3 <META NAME=
"Author" CONTENT=
"Michael Sweet">
4 <TITLE>An Overview of the Common UNIX Printing System
</TITLE>
5 <LINK REL=STYLESHEET
TYPE=
"text/css" HREF=
"cupsdoc.css">
10 <TD><IMG SRC=
"images/cups-large.gif" WIDTH=
"103" HEIGHT=
"120"></TD>
11 <TD><H1 ALIGN=
"RIGHT">An Overview of the
<BR>
12 Common UNIX Printing System,
<BR>
15 <P ALIGN=
"RIGHT">July
10,
2000<BR>
16 Michael Sweet, Easy Software Products
<BR>
17 Copyright
1998-
2002, All Rights Reserved.
</P>
22 <P>This whitepaper describes the Common UNIX Printing
23 System
<SUP>TM
</SUP> (
"CUPS<SUP>TM</SUP>"), a portable and extensible
24 printing system for UNIX
<SUP>®</SUP>. CUPS is being developed by
25 <A HREF=
"http://www.easysw.com">Easy Software Products
</A>, a software
26 firm located in Hollywood, Maryland that has been selling commercial
27 software for UNIX since
1993 through more than
40 distributors serving
28 over
80 countries worldwide.
30 <P>Additional information on CUPS is available on the World Wide Web at
31 "<A HREF="http://www.cups.org
">http://www.cups.org</A>".
35 <P>Printing within UNIX has historically been done using one of two
36 printing systems - the Berkeley Line Printer Daemon (
"LPD") [RFC1179]
37 and the AT
&T Line Printer system. These printing systems were
38 designed in the
70's for printing text to line printers; vendors have
39 since added varying levels of support for other types of printers.
41 <P>Replacements for these printing systems have emerged [LPRng,
42 Palladin, PLP], however none of the replacements change the fundamental
43 capabilities of these systems.
45 <P>Over the last few years several attempts at developing a standard
46 printing interface have been made, including the draft POSIX Printing
47 standard developed by the Institute of Electrical and Electronics
48 Engineers, Inc. (
"IEEE") [IEEE-
1387.4] and Internet Printing Protocol
49 (
"IPP") developed by the Internet Engineering Task Force (
"IETF")
50 through the Printer Working Group (
"PWG") [IETF-IPP]. The POSIX
51 printing standard defines a common set of command-line tools as well as
52 a C interface for printer administration and print jobs, but has been
55 <P>The Internet Printing Protocol defines extensions to the HyperText
56 Transport Protocol
1.1 [RFC2616] to provide support for remote printing
57 services. IPP/
1.0 was accepted by the IETF as an experimental Request
58 For Comments [RFC] document in October of
1999. Since then the Printer
59 Working Group has developed an updated set of specifications for
60 IPP/
1.1 which have been accepted by the IETF and are awaiting
61 publication as proposed standards. Unlike POSIX Printing, IPP enjoys
62 widespread industry support and is poised to become the standard
63 network printing solution for all operating systems.
65 <P>CUPS uses IPP/
1.1 to provide a complete, modern printing system for
66 UNIX that can be extended to support new printers, devices, and
67 protocols while providing compatibility with existing UNIX
68 applications. CUPS is free software provided under the terms of the
69 GNU General Public License and GNU Library General Public License.
73 <P>The first production release of CUPS (based on IPP/
1.0) was released
74 in October of
1999. Since then, we have released several patch updates
75 to the original CUPS
1.0 release that addressed security, portability,
76 and bugs found, but no new functionality was added to improve the
77 stability of the CUPS code.
79 <P>CUPS
1.1 is based on IPP/
1.1 and adds many of the functional
80 enhancements that have been requested by our users. As with
1.0, CUPS
81 1.1 will be followed by patch releases that address any problems found
82 with the software but add no new features.
84 <H2>Design Overview
</H2>
86 <P>Like most printing systems, CUPS is designed around a central print
87 scheduling process that dispatches print jobs, processes administrative
88 commands, provides printer status information to local and remote
89 programs, and informs users as needed. Figure
1 shows the basic
92 <CENTER><IMG SRC=
"images/cups-block-diagram.gif" WIDTH=
"470" HEIGHT=
"170"></CENTER>
93 <P ALIGN=
"CENTER">Figure
1 - CUPS Block Diagram
</P>
97 <P>The scheduler is a HTTP/
1.1 server application that handles HTTP
98 requests. Besides handling printer requests via IPP POST requests, the
99 scheduler also acts as a full-featured web server for documentation,
100 status monitoring, and administration.
102 <P>The scheduler also manages a list of available printers on the LAN
103 and dispatches print jobs as needed using the appropriate filters and
106 <H3>Configuration Files
</H3>
108 The configuration files consist of:
112 <LI>The HTTP server configuration file.
114 <LI>Printer and class definition files.
116 <LI>MIME type and conversion rule files.
118 <LI>PostScript Printer Description (
"PPD") files.
122 <P>The HTTP server configuration file is purposely similar to the
123 Apache server configuration file and defines all of the access control
124 properties for the server.
126 <P>The printer and class definition files list the available printer
127 queues and classes. Printer classes are collections of printers. Jobs
128 sent to a class are forwarded to the first available printer in the
129 class, round-robin fashion.
131 <P>The MIME type files list the supported MIME types (text/plain,
132 application/postscript, etc.) and
"magic" rules for automatically
133 detecting the format of a file. These are used by the HTTP server to
134 determine the
<I>Content-Type
</I> field for
<I>GET
</I> and
<I>HEAD
</I>
135 requests and by the IPP request handler to determine the file type
136 when a
<I>Print-Job
</I> or
<I>Send-File
</I> request is received with a
137 <I>document-format
</I> of
<I>application/octet-stream
</I>.
139 <P>The MIME conversion rule files list the available filters. The
140 filters are used when a job is dispatched so that an application can
141 send a convenient file format to the printing system which then
142 converts the document into a printable format as needed. Each filter
143 has a relative cost associated with it, and the filtering algorithm
144 chooses the set of filters that will convert the file to the needed
145 format with the lowest total
"cost".
147 <P>The PPD files describe the capabilities of all printers, not just
148 PostScript printers. There is one PPD file for each printer. PPD files
149 for non-PostScript printers define additional filters through
150 <I>cupsFilter
</I> attributes to support printer drivers.
154 <P>The CUPS API contains CUPS-specific convenience functions for queuing
155 print jobs, getting printer information, accessing resources via HTTP
156 and IPP, and manipulating PPD files. Unlike the rest of CUPS, the CUPS
157 API is provided under the terms of the GNU LGPL so it may be used by
158 non-GPL applications.
160 <H3>Berkeley and System V Commands
</H3>
162 <P>CUPS provides the System V and Berkeley command-line interfaces for
163 submitting jobs and checking the printer status. The
164 <CODE>lpstat
</CODE> and
<CODE>lpc status
</CODE> commands also show
165 network printers (
"printer@server") when printer browsing is enabled.
167 <P>The System V administation commands are supplied for managing
168 printers and classes. The Berkeley printer administration tool
169 (
<CODE>lpc
</CODE>) is only supported in a
"read-only" mode to check the
170 current status of the printer queues and scheduler.
174 <P>A filter program reads from the standard input or from a file if a
175 filename is supplied. All filters must support a common set of options
176 including printer name, job ID, username, job title, number of copies,
177 and job options. All output is sent to the standard output.
179 <P>Filters are provided for many file formats and include image file
180 and PostScript raster filters that support non-PostScript printers. Multiple
181 filters are run in parallel to produce the required output format.
183 <P>The PostScript raster filter is based on the GNU Ghostscript
5.50
184 core. Instead of using the Ghostscript printer drivers and front-end,
185 the CUPS filter uses a generic raster printer driver and CUPS-compliant
186 front-end to support any kind of raster printer. This allows the same
187 printer driver filter to be used for printing raster data from any
190 <H3>CUPS Imaging
</H3>
192 <P>The CUPS Imaging library provides functions for managing large
193 images, doing colorspace conversion and color management, scaling
194 images for printing, and managing raster page streams. It is used by
195 the CUPS image file filters, the PostScript RIP, and all raster
200 <P>A backend program is a special filter that sends print data to a
201 device or network connection. Backends for parallel, serial, USB, LPD, IPP,
202 and AppSocket (JetDirect) connections are provided in CUPS
1.1.
204 <P>SAMBA version
2.0.6 and higher includes a SMB backend
205 (
<CODE>smbspool(
1)
</CODE>) that can be used with CUPS
1.0 or
1.1 for
208 <H2>Network Printing
</H2>
210 <P>Traditionally, network printing has been one of the hardest things to
211 get working under UNIX. One reason is because each vendor added their
212 own extensions to the LPD protocol (the previous standard for network
213 printing), making cross-platform printing difficult if not impossible.
215 <P>Another reason is that you have to administer every network printer
216 on every client machine. In some cases you can
"clone" the printer
217 configuration from a
"master" client to each of the others, but even
218 that can be time-consuming and error-prone. Something better is needed.
220 <P>CUPS provides
"printer browsing", which allows clients to
221 automatically see and use printers from any server on a LAN. This means
222 that you only need to configure the server and the clients will
223 automatically see the printers and classes on it.
225 <P>In addition, CUPS can automatically merge multiple identical network
226 printers into
"implicit classes". This allows clients to send jobs to
227 the implicit class and have them print on the first available printer
228 or server. In addition, failsafe and load-balancing functions are
229 enabled simply by defining the same printer on multiple servers!
231 <H2>New Features in CUPS
1.1</H2>
233 <P>CUPS
1.1 includes many new features and capabilities:
237 <LI><A HREF=
"#BACKENDS">Backends
</A>
239 <LI><A HREF=
"#BANNERS">Banner Page Support
</A>
241 <LI><A HREF=
"#DIGEST">Digest Authentication
</A>
243 <LI><A HREF=
"#DIRSVC">Directory Services
</A>
245 <LI><A HREF=
"#FHS2">Directory Structure Changes
</A>
247 <LI><A HREF=
"#DOCOS">Documentation
</A>
249 <LI><A HREF=
"#DRIVERS">Drivers
</A>
251 <LI><A HREF=
"#FILTERS">Filters
</A>
253 <LI><A HREF=
"#IPP">IPP Support
</A>
255 <LI><A HREF=
"#PERSISTENCE">Job Persistence
</A>
257 <LI><A HREF=
"#LPD">LPD Client Support
</A>
259 <LI><A HREF=
"#USEROPTS">User-Defined Printers and Options
</A>
261 <LI><A HREF=
"#WEB">Web Administration Interface
</A>
265 <H3><A NAME=
"BACKENDS">1. Backends
</A></H3>
267 <P>CUPS
1.1 implements a new backend interface for retrieving a list of
268 available devices for CUPS clients. This allows administration
269 interfaces to query the CUPS scheduler for a list of available devices,
270 automatically configure printers if the device identification
271 information is available, and present the user with a list of available
272 devices rather than relying on the user to know what devices are
273 configured on the system.
275 <P>The new release also includes a backend for USB printers under
276 *BSD and Linux. Support for USB under Solaris
8 will be provided in
277 a subsequent patch release.
279 <H3><A NAME=
"BANNERS">2. Banner Page Support
</A></H3>
281 <P>CUPS
1.1 includes support for banner pages at the beginning and end
282 of a job. Banner pages may be of any file format and support variable
283 substitution for job titles, usernames, etc. Default banner pages are
284 associated with each printer and can be overridden with command-line
287 <H3><A NAME=
"DIGEST">3. Digest Authentication
</A></H3>
289 <P>Digest authentication provides a more secure method of authenticating
290 access to the printing system. Unlike Basic authentication, Digest
291 authentication does not send passwords
"in the clear" so it is more
292 difficult to gain unauthorized access to your system.
294 <P>CUPS
1.1 implements Digest authentication using a special MD5
295 password file instead of the UNIX password file. This file is managed
296 using the new
<CODE>lppasswd
</CODE> command.
298 <H3><A NAME=
"DIRSVC">4. Directory Services
</A></H3>
300 <P>CUPS
1.1 adds new directory service (
"printer browsing") features to
301 make using CUPS on large LANs and WANs easier. You can now poll a
302 remote server for printer information and relay it to the LAN as well
303 as restrict what printer information is processed (e.g. to
"hide"
304 servers, domains, or networks that you don't want to see.)
306 <H3><A NAME=
"FHS2">5. Directory Structure Changes
</A></H3>
308 <P>CUPS
1.1 now uses a directory structure that complies with the
309 Filesystem Hierarchy Standard (
"FHS"), version
2.0. This should make
310 integration into existing Linux and *BSD distributions a lot easier.
312 <H3><A NAME=
"DOCOS">6. Documentation
</A></H3>
314 <P>The CUPS
1.1 documentation has gone through many revisions,
315 including a completely rewritten administrators manual, a new
316 programmers manual, and an IPP implementation reference manual.
318 <H3><A NAME=
"DRIVERS">7. Drivers
</A></H3>
320 <P>CUPS
1.1 includes drivers for EPSON dot-matrix and inkjet printers.
321 As with the HP PCL drivers, the EPSON drivers don't necessarily provide
322 the best possible output for each printer but should provide adequate
323 printing quality for general day-to-day printing.
325 <H3><A NAME=
"FILTERS">8. Filters
</A></H3>
327 <P>CUPS
1.1 includes new image, PostScript, PDF, and text filters. The image
328 filters have been upgraded to support Windows BMP and Alias PIX files.
330 <P>The PostScript filter is now based off GNU Ghostscript
5.50. The new
331 filter provides much better performance with higher-resolution printers
332 and supports most Level
3 PostScript language features.
334 <P>The new PDF filter is based off the excellent Xpdf software from
335 Derek Noonburg and supports automatic page scaling. The new filter is a
336 faster, smaller, more reliable replacement for the GNU Ghostscript PDF
337 filtering that was used in CUPS
1.0.
339 <P>The new text filter now supports bidirectional text and can embed
342 <H3><A NAME=
"IPP">9. IPP Support
</A></H3>
344 <P>Probably the least visible portion of CUPS is the IPP support. CUPS
345 1.1 implements all of the required IPP/
1.1 operations and attributes
346 and most of the optional ones. The optional Create-Job and Send-File
347 operations are now implemented, allowing for better System V printing
348 system compatibility (one job ID per
<CODE>lp
</CODE> command) and
349 support for banner pages.
351 <H3><A NAME=
"PERSISTENCE">10. Job Persistence
</A></H3>
353 <P>CUPS
1.1 supports job persistence. This means that jobs are preserved
354 even after a reboot, a feature that was sorely missing from CUPS
1.0.
356 <P>In addition, CUPS
1.1 allows you to keep job information after the
357 job has printed. The basic post-job persistence mode provides a job
358 history (number of pages printed, time job was printed, etc.) but does
359 not preserve the actual job files. This can be changed to discard all
360 information after a job is printed or keep the job files after printing
361 so you can reprint a job at some later time.
363 <H3><A NAME=
"LPD">11. LPD Client Support
</A></H3>
365 <P>By popular request, CUPS
1.1 supports LPD-based clients using a new
366 mini-daemon that handles LPD requests and passes them on to the main
369 <H3><A NAME=
"USEROPTS">12. User-Defined Printers and Options
</A></H3>
371 <P>CUPS
1.1 includes support for user-defined printers and options via
372 a new
<CODE>lpoptions
</CODE> command. User-defined printers are special
373 instances of the available printers (e.g.
"printer/instance" or
374 "printer@server/instance") that can have their own default options such
375 as media size, resolution, and so forth. The
<CODE>lpoptions
</CODE>
376 command can also be used to set a different default printer queue.
378 <H3><A NAME=
"WEB">13. Web Administration Interface
</A></H3>
380 <P>CUPS
1.0 provided a simple class, job, and printer monitoring
381 interface for web browsers. CUPS
1.1 replaces this interface with an
382 enhanced administration interface that allows you to add, modify,
383 delete, configure, and control classes, jobs, and printers.
385 <H2>Software Using CUPS
</H2>
387 <P>A lot has happened since CUPS
1.0 came out, and many software packages
388 are supporting CUPS. We have contributed code to the SAMBA team to support
389 CUPS, and parts of that are already available in SAMBA
2.0.6 and
2.0.7.
390 With any luck the final pieces that provide a complete integration with
391 SAMBA will be available in the next release of SAMBA.
393 <P>Two graphical interfaces have appeared on the scene that use CUPS as
394 well. The KUPS project provides a KDE-based interface for CUPS and can be
398 <A HREF=
"http://kups.sourceforge.net">http://kups.sourceforge.net
</A>
401 <P>The X Printing Panel (
"XPP") project provides a graphical printing
402 panel for CUPS and can be found at:
405 <A HREF=
"http://www.phy.uni-bayreuth.de/till/xpp">http://www.phy.uni-bayreuth.de/till/xpp/
</A>
408 <P>Numerous other filters, drivers, tutorials, etc. have been made available
409 on the CUPS bazaar, available at:
412 <A HREF=
"http://www.cups.org/bazaar.cgi">http://www.cups.org/bazaar.cgi
</A>
415 <P>Finally, our own ESP Print Pro software uses CUPS to provide drivers
416 for thousands of printers and can be found at:
419 <A HREF=
"http://www.easysw.com/printpro">http://www.easysw.com/printpro
</A>
422 <H2>Operating Systems Using CUPS
</H2>
424 <P>One of our goals has always been to get as many UNIX/Linux
425 distributions using CUPS as possible. Debian is currently providing
426 CUPS as part of its stable distribution, and many other distributions
427 are considering it in their next releases.
431 <P>The Common UNIX Printing System provides a modern printing interface
432 for UNIX applications that is both flexible and user-friendly. The
433 software provides System V and Berkeley compatible command-line
434 interfaces to ensure compatibility with existing applications. CUPS
1.1
435 adds many new features that make it an even better choice for printing
438 <H2>Who to Contact
</H2>
440 <P>For more information on CUPS please contact us at:
443 Attn: CUPS Information
444 Easy Software Products
445 44141 Airport View Drive Suite
204
446 Hollywood, Maryland
20636-
3111 USA
450 <A HREF=
"mailto:cups-info@cups.org">cups-info@cups.org
</A>
459 <DD>System Administration - Part
4: Printing Interfaces (draft)
</DD>
461 <DT><A HREF=
"http://www.pwg.org/ipp/index.html">IETF-IPP
</A></DT>
463 <DD>Internet Printing Protocol/
1.1</DD>
465 <DT><A HREF=
"http://www.astart.com/lprng.html">LPRng
</A></DT>
467 <DD>An enhanced, extended, and portable implementation of the
468 Berkeley LPR print spooler functionality
</DD>
472 <DD>A printing system developed at the Massachussetts Institute
475 <DT><A HREF=
"http://www-usa.iona.com//hyplan/jmason/plp.html">PLP
</A></DT>
477 <DD>The Portable Line Printer spooler system
</DD>
479 <DT><A HREF=
"http://www.ietf.org/rfc/rfc1179.txt">RFC1179
</A></DT>
481 <DD>Line Printer Daemon Protocol
</DD>
483 <DT><A HREF=
"http://www.ietf.org/rfc/rfc2046.txt">RFC2046
</A></DT>
485 <DD>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types
</DD>
487 <DT><A HREF=
"http://www.ietf.org/rfc/rfc2616.txt">RFC2616
</A></DT>
489 <DD>Hypertext Transfer Protocol -- HTTP/
1.1</DD>
495 <P>The Common UNIX Printing System, CUPS, and the CUPS logo are the
496 trademark property of Easy Software Products. All other trademarks are
497 the property of their respective owners.