Line printer daemon protocol
RFC 1179

Document Type RFC - Informational (August 1990; No errata)
Last updated 2013-03-02
Stream Legacy
Formats plain text pdf htmlized bibtex
Stream Legacy state (None)
Consensus Boilerplate Unknown
RFC Editor Note (None)
IESG IESG state RFC 1179 (Informational)
Telechat date
Responsible AD (None)
Send notices to (None)
Network Printing Working Group                 L. McLaughlin III, Editor
Request for Comments:  1179                         The Wollongong Group
                                                             August 1990

                      Line Printer Daemon Protocol

Status of this Memo

   This RFC describes an existing print server protocol widely used on
   the Internet for communicating between line printer daemons (both
   clients and servers).  This memo is for informational purposes only,
   and does not specify an Internet standard.  Please refer to the
   current edition of the "IAB Official Protocol Standards" for the
   standardization state and status of this protocol.  Distribution of
   this memo is unlimited.

1. Introduction

   The Berkeley versions of the Unix(tm) operating system provide line
   printer spooling with a collection of programs: lpr (assign to
   queue), lpq (display the queue), lprm (remove from queue), and lpc
   (control the queue).  These programs interact with an autonomous
   process called the line printer daemon.  This RFC describes the
   protocols with which a line printer daemon client may control
   printing.

   This memo is based almost entirely on the work of Robert Knight at
   Princeton University.  I gratefully acknowledge his efforts in
   deciphering the UNIX lpr protocol and producing earlier versions of
   this document.

2. Model of Printing Environment

   A group of hosts request services from a line printer daemon process
   running on a host.  The services provided by the process are related
   to printing jobs.  A printing job produces output from one file.
   Each job will have a unique job number which is between 0 and 999,
   inclusive.  The jobs are requested by users which have names.  These
   user names may not start with a digit.

3. Specification of the Protocol

   The specification includes file formats for the control and data
   files as well as messages used by the protocol.

McLaughlin                                                      [Page 1]
RFC 1179                          LPR                        August 1990

3.1 Message formats

   LPR is a a TCP-based protocol.  The port on which a line printer
   daemon listens is 515.  The source port must be in the range 721 to
   731, inclusive.  A line printer daemon responds to commands send to
   its port.  All commands begin with a single octet code, which is a
   binary number which represents the requested function.  The code is
   immediately followed by the ASCII name of the printer queue name on
   which the function is to be performed.  If there are other operands
   to the command, they are separated from the printer queue name with
   white space (ASCII space, horizontal tab, vertical tab, and form
   feed).  The end of the command is indicated with an ASCII line feed
   character.

4. Diagram Conventions

   The diagrams in the rest of this RFC use these conventions.  These
   diagrams show the format of an octet stream sent to the server.  The
   outermost box represents this stream.  Each box within the outermost
   one shows one portion of the stream.  If the contents of the box is
   two decimal digits, this indicates that the binary 8 bit value is to
   be used.  If the contents is two uppercase letters, this indicates
   that the corresponding ASCII control character is to be used.  An
   exception to this is that the character SP can be interpreted as
   white space.  (See the preceding section for a definition.)  If the
   contents is a single letter, the ASCII code for this letter must be
   sent.  Otherwise, the contents are intended to be mnemonic of the
   contents of the field which is a sequence of octets.

5. Daemon commands

   The verbs in the command names should be interpreted as statements
   made to the daemon.  Thus, the command "Print any waiting jobs" is an
   imperative to the line printer daemon to which it is sent.  A new
   connection must be made for each command to be given to the daemon.

5.1 01 - Print any waiting jobs

      +----+-------+----+
      | 01 | Queue | LF |
      +----+-------+----+
      Command code - 1
      Operand - Printer queue name

   This command starts the printing process if it not already running.

McLaughlin                                                      [Page 2]
RFC 1179                          LPR                        August 1990

5.2 02 - Receive a printer job

      +----+-------+----+
      | 02 | Queue | LF |
      +----+-------+----+
      Command code - 2
      Operand - Printer queue name

   Receiving a job is controlled by a second level of commands.  The
   daemon is given commands by sending them over the same connection.
   The commands are described in the next section (6).

   After this command is sent, the client must read an acknowledgement
   octet from the daemon.  A positive acknowledgement is an octet of
   zero bits.  A negative acknowledgement is an octet of any other
Show full document text