An Overview of Printing
The various printing implementations available for Linux systems have a basic architecture in common. In every printing system, a central daemon (or service) receives print jobs, via either a user command (such as lpr) or the network. The print job is then processed through input filters if necessary, and sent to either a local printer or another printing daemon.
Printing documents is a slow and error-prone process. Printers accept data in small amounts. They are prone to run out of paper, jam, and go offline for other reasons. Printers also must accept requests from multiple system users. As a result, by design, the end user is isolated from printing functions on most computer systems. This isolation comes in the form of a print queue, which holds print requests until the printer is ready for them. It also manages the order in which print jobs are processed. Feeding print jobs to printers is often called spooling, and the program that manages the print queues is sometimes called a spooler. It can also be called a scheduler.