printing-overview.shtml [plain text]
<H1 ALIGN="RIGHT"><A NAME="OVERVIEW">1 - Printing System Overview</A></H1>
<P>This chapter provides an overview of how the Common UNIX Printing System
<H2>The Printing Problem</H2>
<P>For years <I>the printing problem</I> has plagued UNIX. Unlike
Microsoft® Windows® or Mac OS, UNIX has no standard interface or
system in place for supporting printers. Among the solutions currently
available, the Berkeley and System V printing systems are the most
<P>These printing systems support line printers (text only) or
PostScript printers (text and graphics), and with some coaxing they can
be made to support a full range of printers and file formats. However,
because each varient of the UNIX operating system uses a different
printing system than the next developing printer drivers for a wide
range of printers and operating systems is extremely difficult. That
combined with the limited volume of customers for each UNIX varient has
forced most printer vendors to give up supporting UNIX entirely.
<P>CUPS is designed to eliminate <I>the printing problem</I>. One
common printing system can be used by all UNIX varients to support the
printing needs of users. Printer vendors can use its modular filter
interface to develop a single driver program that supports a wide range
of file formats with little or no effort. Since CUPS provides both the
System V and Berkeley printing commands, users (and applications) can
reap the benefits of this new technology with no changes.
<P>CUPS is based upon an emerging Internet standard called the Internet
Printing Protocol. IPP has been embraced by dozens of printer and
printer server manufacturers and is supported by Microsoft Windows
<P>IPP defines a standard protocol for printing as well as managing
print jobs and printer options like media size, resolution, and so
forth. Like all IP-based protocols, IPP can be used locally or over the
Internet to printers hundreds or thousands of miles away. Unlike other
protocols, however, IPP also supports access control, authentication,
and encryption, making it a much more capable and secure printing
solution than older ones.
<P>IPP is layered on top of the Hyper-Text Transport Protocol ("HTTP")
which is the basis of web servers on the Internet. This allows users
to view documentation, check status information on a printer or server,
and manage their printers, classes, and jobs using their web browser.
<P>CUPS provides a complete IPP/1.1 based printing system that provides
Basic, Digest, and local certificate authentication and user, domain,
or IP-based access control. TLS encryption will be available in future
versions of CUPS.
<P>Each file or set of files that is submitted for printing is called a
<I>job</I>. Jobs are identified by a unique number starting at 1 and
are assigned to a particular destination, usually a printer. Jobs can
also have options associated with them such as media size, number of
copies, and priority.
<P>CUPS supports collections of printers known as <I>classes</I>. Jobs
sent to a class are forwarded to the first available printer in the
<P>Filters allow a user or application to print many types of files
without extra effort. Print jobs sent to a CUPS server are filtered
before sending them to a printer. Some filters convert job files to
different formats that the printer can understand. Others perform page
selection and ordering tasks.
<P>CUPS provides filters for printing many types of image files,
HP-GL/2 files, PDF files, and text files. CUPS also supplies PostScript
and image file Raster Image Processor ("RIP") filters that convert
PostScript or image files into bitmaps that can be sent to a raster
<P>Backends perform the most important task of all - they send the
filtered print data to the printer.
<P>CUPS provides backends for printing over parallel, serial, and USB
ports, and over the network via the IPP, JetDirect (AppSocket), and
Line Printer Daemon ("LPD") protocols. Additional backends are
available in network service packages such as the SMB backend
included with the popular SAMBA software.
<P>Backends are also used to determine the available devices. On
startup each backend is asked for a list of devices it supports,
and any information that is available. This allows the parallel
backend to tell CUPS that an EPSON Stylus Color 600 printer is
attached to parallel port 1, for example.
<P>Printer drivers in CUPS consist of one of more filters specific to a
printer. CUPS includes sample printer drivers for Hewlett-Packard
LaserJet and DeskJet printers and EPSON 9-pin, 24-pin, Stylus Color,
and Stylus Photo printers. While these drivers do not generate optimal
output for the different printer models, they do provide basic printing
and demonstrate how you can write your own printer drivers and
incorporate them into CUPS.
<P>Printers and classes on the local system are automatically shared
with other systems on the network. This allows you to setup one system
to print to a printer and use this system as a printer server or spool
host for all of the others. Users may then select a local printer by
name or a remote printer using "name@server".
<P>CUPS also provides <I>implicit classes</I>, which are collections of
printers and/or classes with the same name. This allows you to setup
multiple servers pointing to the same physical network printer, for
example, so that you aren't relying on a single system for printing.
Because this also works with printer classes, you can setup multiple
servers and printers and never worry about a single point of failure
unless all of the printers and servers go down!