6. Spooling software

Until recently, the choice for free software users was simple - everyone ran the same old lpd lifted mostly verbatim out of BSD's Net-2 code. Even today, some vendors ship this software. But this is beginning to change. SVR4-like systems including Sun's Solaris come with a completely different print spooling package, centered around lpsched.

Today, there are a number of good systems to chose from. They are all described below; read the descriptions and make your own choice. CUPS is a good option and recommended for most users; it has excellent Postscript printer support, offers IPP support, a web interface, and a number of other features. For business environments with mainly networked Postscript printers, a front-end program like GPR with LPRng is another option; it handles PPD options directly and has a nice interface.

6.1. CUPS

CUPS has become the standard printing system in most distributions today. What makes CUPS different from the rest ? CUPS is an implementation of the Internet Printing Protocol (IPP), a new standard intended to solve some of the deficiencies of the old LPD protocol. CUPS also supports LPD, SMB and AppSocket (JetDirect) with reduced functionality. The implementation of CUPS has been driven by Michael Sweet of Easy Software Products; CUPS is distributed under the GPL. Being a new protocol, the IPP has a number of advantages on the ancient LPD protocol:

Today, all major operating system vendors actively support IPP, as well as the major printer vendors. IPP is a standard printing protocol in Windows 2000 (IIS needs to be installed) which may be a better option for free software users than the proprietary SMB protocol. However, on Windows 2000 automatic printer driver downloading only works with SMB and not with IPP, this may be a reason for administrators with a lot of Windows clients to choose for SMB printer sharing using Samba and CUPS.

There are a number of very good features in it, including sensible option handling; web, GUI, and command-line interfaces; and a mime-based filtering system with strong support for Postscript.

There are several sets of PPDs which you can use with CUPS:


The default CUPS installation contains generic PPDs for 9-pin and 24-pin Epson matrix printers, Epson Stylus Color, Stylus Photo printers, HP LaserJet, DeskJet printers and Dymo Label printers. These will enable you to print to a lot of printer models, but will not give you access to specific capacities of the models


Foomatic can generate a suitable PPD for use with any printer driver that has full details entered in the linuxprinting.org database. The PPD gets used together with a backend script named foomatic-rip. foomatic-rip uses free software drivers. At the moment there is support for a rather large number of printers in this system. Foomatic forms a basis for non-Postscript printer support in most GNU/Linux distributions. CUPS and Foomatic are becoming quite popular and this is currently the recommended printing system for most situations.

Postscript PPDs

CUPS can use vendor-supplied PPD files for Postscript printers directly. Often these come with the Windows drivers for a printer, or can be found on the printer vendor's website. If you have a choice between a driver for Windows 9x and Windows NT/W2K, than select the driver for Windows NT. Adobe also distributes PPD files for many Postscript printers.

ESP Print Pro

Easy Software Products, Inc. sells CUPS bundled with a collection of proprietary drivers. Although they are not free software, they do drive many common printers. The bundle is somewhat expensive measured against the price of a single supported printer, but it certainly has a place. The package includes graphical front-end tools.


The Gimp-Print drivers are high quality drivers for Canon, Epson, Lexmark, and PCL printers for use with Ghostscript, CUPS, Foomatic, and the Gimp.


Omni is a package made by IBM, now containing support for more than 450 printers. The OMNI printer driver model is distributed by IBM under LGPL License.


HPIJS supports around 150 of HP's own printers at excellent print quality now (currently only via the Foomatic path). As of Version 1.0.1 , the "hp Product Only" clause has been removed from the license and the drivers are distributed with a BSD license.

The third-party program XPP (see Figure 4) offers a very nice graphical interface to the user functionality of CUPS, including an marvelous interface to print-time options (shown in Figure 5). For information on using XPP, see Section 3.4.2.

6.2. LPD

LPD, the original BSD Unix Line Printer Daemon, has been the standard on Unix for years. It is available for every style of Unix, and offers a rather minimal feature set derived from the needs of timesharing-era computing. Despite this somewhat peculiar history, it is still useful today as a basic print spooler. To be really useful with modern printer, a good deal of extra work is needed in the form of companion filter scripts and front-end programs. But these exist, and it does all work.

LPD is also the name given to the network printing protocol by RFC 1179. This network protocol is spoken not only by the LPD daemon itself, but by essentially every networked print server, networked printer, and every other print spooler out there; LPD is the least common denominator of standards-based network printing.

LPRng(see Section 6.3) is a far better implementation of the basic LPD design than the regular one; if you must use LPD, consider using LPRng instead. There is far less voodoo involved in making it do what you want, and what voodoo there is is well documented. LPRng is essentially an enhanced LPD implementation with better security and extra features.

There are a large number of LPD sources floating around in the world. Arguably, some strain of BSD Unix is probably the official owner, but everyone implements changes willy-nilly, and they all cross-pollinate in unknown ways, such that it is difficult to say with certainty exactly which LPD you might have. Of the readily available LPDs, GNUlpr offers one with a few minor modifications that make the user interface much more flexible. The GNUlpr supports command-line option specification with a-o flag; options are then passed through to filters. This is similar to the features offered by a number of traditional Unix vendors, and similar to (although incompatible with) LPRng's -z option mechanism.

If you go with LPD, the best way to use it is via a front-end. There are several to chose from; KDEPrint, GPR (see Section 3.4) and XPP are perhaps the best. Others exist; tell me about them.

6.3. LPRng

Some GNU/Linux vendors provide LPRng, a far less ancient LPD print spooling implementation. LPRng is far easier to administer for large installations (read: more than one printer, any serial printers, or any peculiar non-lpd network printers) and has a less frightfully haphazard codebase than does stock lpd. It can even honestly claim to be secure - there are no SUID binaries, and it supports authentication via PGP or Kerberos.

LPRng also includes some example setups for common network printers - HP LaserJets, mainly - that include some accounting abilities. LPRng uses more or less the same basic filter model as does BSD lpd, so the LPD support offered by the linuxprinting.org website applies to LPRng as well. This can help you effectively use free software drivers for many printers.

LPRng is distributed under either the GPL or an Artistic license.

6.4. PPR

PPR is a Postscript-centric spooler which includes a rudimentary Postscript parsing ability from which it derives several nice features. It includes good accounting capabilities, good support for Appletalk, SMB, and LPD clients, and much better error handling than lpd. PPR, like every other spooler here, can call Ghostscript to handle non-Postscript printers.

PPR was written by, and is in use at, Trinity College. The license is BSD-style; free for all use but credit is due.

6.5. Others

6.5.1. PDQ

PDQ stands for "Print, Don't Queue", and the way it works reflects this design. PDQ is a non-daemon-centric print system which has a built-in, and sensible, driver configuration syntax. This includes the ability to declare printing options, and a GUI or command line tool for users to specify these options with; users get a nice dialog box in which to specify resolution, duplexing, paper type, etc.

Running all of the filters as the user has a number of advantages: the security problems possible from Postscript are mostly gone, multi-file LaTeX jobs can be printed effectively as dvi files, and so forth.

PDQ is not without flaws: most notably it processes the entire job before sending it to the printer. This means that, for large jobs, PDQ may simply be impractical—you can end up with hundreds of megs being copied back and forth on your disk. Even worse, for slow drivers like the better quality inkjet drivers, the job will not start printing until Ghostscript and the driver have finished processing. This may be many minutes after submission.

There's a real place for PDQ; it has a simple design that doesn't subtract user control. And the normal control path crosses no security boundaries, so it can't have the classes of security bug people are always finding in other systems. And to top it off, it's small.

However there is no active development done on PDQ. A new maintainer would be most welcome.

6.5.2. GNUlpr

GNUlpr began its life in some work that HP sponsored VA Linux to do. Unfortunately, GNUlpr is now pretty much dead.

6.5.3. CPS

The Coherent Printing System is a set of Perl scripts called "lpr", "lpd", "lprm", and "lpq". These replace the programs of the same name which come with many Linux systems.

6.5.4. CEPS

The Cisco Enterprise Print System was developed by Damian Ivereigh when he was a sysadmin at Cisco. He did more than he was hired to do, he developed a new printing system to improve the administrative hassle. Cisco authorized the release of the software for free under the GNU General Public License. Installing CEPS will however only pay off at large organisations.