Next Previous Contents

## 2. Print Spooling Overview

A print spooler is a program that accepts print jobs (which are usually one or more files) from a program or network interface, stores them in a spool queue, and then sends them to a printer or another print spooler. Usually there are facilities to submit jobs, check on the current job status, remove jobs from spool queues, and perform administrative functions such as starting or stopping printing.

A print spooler is a client/server application. The client programs are used to submit jobs to the print spooler program which performs the actual printing operations. In order to carry out these operations, the server may need to use other programs to convert print job files into a format acceptable to a printer, or perform various accounting or administrative functions.

## 2.1 Overview

> `

>     +---------+    +-----+    +-----+     +--------+    +---------+
>     | program | -> | lpr | -> | lpd |  -> | filter | -> | printer |
>     +---------+    +-----+  * +-----+     +--------+    +---------+
>                       *    *     |
>                    printcap      V
>                               +-----+     +--------+    +---------+
>                               | lpd |  -> | filter | -> | printer |
>                               +-----+     +--------+    +---------+

>                                Figure 1

> `

Figure 1 shows the flow of data between the individual components of the LPRng print spooling system. A program (or user) will use the `lpr` program to send a file to the `lpd` server over a TCP/IP connection. The `lpd` server will store the file temporarily in a spool queue directory. The information needed by the `lpr` and `lpd` programs to carry out this activity is stored in the `printcap` (usually called the `/etc/printcap`) database file.

The `lpd` server sorts the queue entries and determines the print order. It will select a job to be printed, open a connection to the printer, and then use a filter program to convert the file contents into a format suitable for the printer. If the file does not need conversion, then the `lpd` server will send the file directly to the printer.

The `lpd` server can also `forward` jobs to another print server over a network connection, optionally sending them through a filter as well. The destination server can in turn forward the job or send it to a printer.

The protocol or commands used to do this job forward and transfer are specified by RFC1179. This protocol specifies how the `lpr` client program sends a job to the `lpd` server, as well as how the `lpd` server forwards jobs to another server. In addition to job submission, RFC1179 specifies commands to obtain queue status, to remove jobs from the queue, and to start and stop print queues.

## 2.2 Sample Printcap Entry

As described in the Print Spooling Overview, the information in the `printcap` database is used control printing operations. While there is no RFC specifying its format or content, there is a strong de facto standard for its format. For a complete description of the `printcap` database see Using the Printcap Database. For a list of all of the `printcap` and configuration options see Index To All The Configuration and Printcap Options.

Here is a sample printcap:

> `

>     lp:lp=psqueue@printserver.astart.com

> `

This printcap information tells the client programs that when a client wants to print a job on the `lp` printer, that these jobs should be sent to the `psqueue` on host `printerserver.astart.com`. On the printserver, the following printcap entry is used by the `lpd` server to do the printing.

> `

>     psqueue:server
>       :lp=/dev/lp0
>       :sd=/var/spool/lpd/psqueue
>       :if=/usr/local/libexec/filters/ifhp

> `

The `sd` (spool queue directory) entry specifies the directory where print jobs will be placed. The `lp` line specifies an actual output device, so the `lpd` server will open this device for printing. The `if` (input file filter) entry specifies the program to be used to translate the input file into a format compatible with the actual printer. Many of the times there is not need for conversion, and this entry is left out.

## 2.3 Print Server Configuration

The previous sections have given a very high level view of printing operations. In order to do printing the following programs and information must be established:

1. The printer itself, and the interface to the printer.
2. Client programs for use by users or other programs to send jobs to the print server and perform administrative functions.
3. A server program that runs on a host that accepts jobs for printing.
4. Printcap information to control the printing operations.
5. Filters that convert print jobs into formats compatible with printers.
6. System facilities such as spool queues or storage areas for jobs.

The following sections will cover each of these topics in turn. The initial sections assume that most users are setting up printers on small systems and require an extremely simple print capability. Later sections explore the various configurations that can be used to support large networks of print spoolers as would be found in large academic institutions or businesses.

Next Previous Contents