The printing process on Unix works roughly as follows:
An application generates a document to print.
You or the application sends the document to a print server by means of a print client program.
The print server puts the document on a queue.
When it is the document's turn to print, the print server sends the document through a print filter program.
The print filter changes the document to make it acceptable to a printer.
If the printer does not understand PostScript (the standard document format in Unix), another print filter must rasterize the document into a bitmap form that the printer understands.
The print server sends the result to the printer device.
Making your printer work on a Unix system can be a trying experience. There are several problems:
There are few standards.
Each stage of the process can present any number of errors.
There are several different client, server, and filter packages for printing.
It's sometimes difficult to determine the purpose of each printing system component.
The existing software never seems quite satisfactory, so upgrades are frequent.
Security holes run rampant in network print servers.
There are two basic ways to configure network printing: one where all computers send their documents directly to a printer, and the other where all computers send their documents to a print server, which then talks to the printer. It can be confusing when you have a network full of machines that use both approaches.
With all of this said, you may not even want to bother to learn how printing works. To be perfectly honest, if your distribution's printer setup tool works for you, it may not be worth going any further, as long as you know how to firewall the print server's network port. However, when things don't work according to plan, the information in this chapter will help you find out where the problem lies.
This chapter first explains the pieces of the printing system on Linux and then shows you how to put everything together using CUPS (Common Unix Printing System). The best place to start is the print code that applications create, PostScript.