]> git.ipfire.org Git - thirdparty/cups.git/blob - doc/overview.html
Load cups into easysw/current.
[thirdparty/cups.git] / doc / overview.html
1 <html>
2 <head>
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'/>
6 </head>
7 <body>
8
9 <table width='100%'>
10 <tr valign='top'>
11 <td><img src='images/cups-large.gif' width='103'
12 height='120' alt='CUPS Logo'/></td>
13 <td><h1 align='right'>An Overview of the<br />
14 Common UNIX Printing System,<br />
15 Version 1.2</h1>
16
17 <p align='right'>July 3, 2004<br />
18 Michael Sweet, Easy Software Products<br />
19 Copyright 1998-2004, All Rights Reserved.</p>
20 </td>
21 </tr>
22 </table>
23
24 <pre>
25 New Outline:
26
27 New Features:
28
29 1. Networking
30 a. IPv6
31 i. Next-generation Internet support
32 ii. ????
33 b. Domain sockets
34 i. Enhanced performance under load for local clients.
35 ii. Authentication without passwords on platforms that support it.
36 c. CUPS browsing updates
37 i. "Delete" bit for printers
38 ii. "lease-time" for printers so that clients and servers don't need
39 the same browse timeout/interval settings
40 iii. Additional attributes/default options for network-wide defaults
41 iv. Network default printer
42 v. Ability to control send and receive protocols independently
43 d. Rendevous support
44 e. LDAP support
45 f. Per-printer sharing
46
47 2. IPP Support
48 a. Notifications
49 b. Document object
50 c. Send-URI, Print-URI
51 d. Other stuff?
52 e. Add/delete device operations
53
54 3. Scheduler
55 a. Backchannel support
56 b. Port monitor support
57 c. Device monitor
58 i. Dynamic device discovery/management
59 d. All errors include a localized message.
60 e. Fine-grain policies, server default + per-printer
61 f. UTF-8 throughout
62
63 4. Web Interface
64 a. cupsd.conf interface
65 b. Move-Job
66 c. Export printers to windows
67 d. Per-printer sharing controls
68 e. Per-printer access control lists
69 f. Policy stuff
70
71 5. I18N
72 a. Support for ... character sets
73 b. All commands and messages are localized
74 c. Character set transcoding
75 d. ... , and Japanese localizations
76
77 6. Drivers
78 a. New HP-RTL driver.
79
80 </pre>
81
82 <p>This whitepaper describes the Common UNIX Printing
83 System<sup>TM</sup> (CUPS<sup>TM</sup>), a portable and
84 extensible printing system for Linux<sup>&reg;</sup>,
85 MacOS<sup>&reg;</sup> X, UNIX<sup>&reg;</sup>. CUPS is developed
86 by <a href='http://www.easysw.com'>Easy Software Products</a>, a
87 software firm located in Hollywood, Maryland that has been
88 selling commercial software for UNIX since 1993 through more
89 than 40 distributors serving over 80 countries worldwide.</p>
90
91 <p>CUPS is used by Apple to provide printing on MacOS X and is
92 the defacto-standard for Linux. Additional information on CUPS
93 is available on the World Wide Web at the following URL:</p>
94
95 <pre>
96 <a href='http://www.cups.org/'>http://www.cups.org/</a>
97 </pre>
98
99
100 <h2>Background</h2>
101
102 <p>Printing within UNIX has historically been done using one of
103 two printing systems - the Berkeley Line Printer Daemon (LPD)
104 [RFC1179] and the AT&amp;T Line Printer system. These printing
105 systems were designed in the 70's for printing text to line
106 printers; vendors have since added varying levels of support for
107 other types of printers.</p>
108
109 <p>Replacements for these printing systems have emerged [LPRng,
110 Palladin, PLP], however none of the replacements change the
111 fundamental capabilities of these systems.</p>
112
113 <p>Over the years several attempts at developing a standard
114 printing interface have been made, including the draft POSIX
115 Printing standard developed by the Institute of Electrical and
116 Electronics Engineers, Inc. (IEEE) [IEEE-1387.4] and Internet
117 Printing Protocol (IPP) developed by the Internet Engineering
118 Task Force (IETF) through the Printer Working Group (PWG)
119 [IETF-IPP]. The POSIX printing standard defines a common set of
120 command-line tools as well as a C interface for printer
121 administration and print jobs, but has been shelved by the
122 IEEE.</p>
123
124 <p>The Internet Printing Protocol defines extensions to the
125 HyperText Transport Protocol 1.1 [RFC2616] to provide support
126 for remote printing services. IPP/1.1 was accepted by the IETF
127 as a proposed standard in ??? of ???. Unlike POSIX Printing, IPP
128 enjoys widespread industry support and has become the standard
129 network printing solution for all operating systems.</p>
130
131 <p>CUPS uses IPP/1.1 to provide a complete, modern printing
132 system for UNIX that can be extended to support new printers,
133 devices, and protocols while providing compatibility with
134 existing UNIX applications. CUPS is free software provided under
135 the terms of the GNU General Public License and GNU Library
136 General Public License.</p>
137
138 <h2>History</h2>
139
140 <p>The first production release of CUPS (based on IPP/1.0) was
141 released in October of 1999. Version 1.1 of CUPS was released in
142 August of 2002 ???? and added support for IPP/1.1.</p>
143
144 <p>CUPS 1.2 is based on IPP/1.1 and adds many of the functional
145 enhancements that have been requested by our users. As with CUPS
146 1.1, CUPS 1.2 will be followed by patch releases that address
147 any problems found with the software. New features will be put
148 in the 1.3 release to follow.</p>
149
150 <h2>Design Overview</h2>
151
152 <p>Like most printing systems, CUPS is designed around a central
153 print scheduling process that dispatches print jobs, processes
154 administrative commands, provides printer status information to
155 local and remote programs, and informs users as needed. Figure 1
156 shows the basic organization of CUPS.</p>
157
158 <p align='center'><img src='images/cups-block-diagram.gif'
159 width='470' height='170' alt='CUPS Block Diagram'/><br />
160 <i>Figure 1 - CUPS Block Diagram</i></p>
161
162 <h3>Scheduler</h3>
163
164 <p>The scheduler is a HTTP/1.1 server application that handles
165 HTTP requests. Besides handling printer requests via IPP POST
166 requests, the scheduler also acts as a full-featured web server
167 for documentation, status monitoring, and administration.</p>
168
169 <p>The scheduler also manages a list of available printers on
170 the LAN and dispatches print jobs as needed using the
171 appropriate filters and backends.</p>
172
173 <h3>Configuration Files</h3>
174
175 <p>The configuration files consist of:</p>
176
177 <ul>
178
179 <li>The HTTP server configuration file.</li>
180
181 <li>Printer and class definition files.</li>
182
183 <li>MIME type and conversion rule files.</li>
184
185 <li>PostScript Printer Description (PPD) files.</li>
186
187 </ul>
188
189 <p>The HTTP server configuration file is purposely similar to
190 the Apache server configuration file and defines all of the
191 access control properties for the server.</p>
192
193 <p>The printer and class definition files list the available
194 printer queues and classes. Printer classes are collections of
195 printers. Jobs sent to a class are forwarded to the first
196 available printer in the class, round-robin fashion.</p>
197
198 <p>The MIME type files list the supported MIME types
199 (text/plain, application/postscript, etc.) and "magic' rules for
200 automatically detecting the format of a file. These are used by
201 the HTTP server to determine the <tt>Content-Type</tt> field for
202 <tt>GET</tt> and <tt>HEAD</tt> requests and by the IPP request
203 handler to determine the file type when a <tt>Print-Job</tt> or
204 <tt>Send-File</tt> request is received with a
205 <tt>document-format</tt> of
206 <tt>application/octet-stream</tt>.</p>
207
208 <p>The MIME conversion rule files list the available filters.
209 The filters are used when a job is dispatched so that an
210 application can send a convenient file format to the printing
211 system which then converts the document into a printable format
212 as needed. Each filter has a relative cost associated with it,
213 and the filtering algorithm chooses the set of filters that will
214 convert the file to the needed format with the lowest total
215 "cost".</p>
216
217 <p>The PPD files describe the capabilities of all printers, not
218 just PostScript printers. There is one PPD file for each
219 printer. PPD files for non-PostScript printers define additional
220 filters through <tt>cupsFilter</tt> attributes to support
221 printer drivers.</p>
222
223 <h3>CUPS API</h3>
224
225 <p>The CUPS API contains CUPS-specific convenience functions for
226 queuing print jobs, getting printer information, accessing
227 resources via HTTP and IPP, and manipulating PPD files. Unlike
228 the rest of CUPS, the CUPS API is provided under the terms of
229 the GNU LGPL so it may be used by non-GPL applications.</p>
230
231 <h3>Berkeley and System V Commands</h3>
232
233 <p>CUPS provides the System V and Berkeley command-line
234 interfaces for submitting jobs and checking the printer status.
235 The <tt>lpstat</tt> and <tt>lpc status</tt> commands
236 also show network printers ("printer@server") when printer
237 browsing is enabled.</p>
238
239 <p>The System V administation commands are supplied for managing
240 printers and classes. The Berkeley printer administration tool
241 (<tt>lpc</tt>) is only supported in a "read-only' mode to
242 check the current status of the printer queues and
243 scheduler.</p>
244
245 <h3>Filters</h3>
246
247 <p>A filter program reads from the standard input or from a file
248 if a filename is supplied. All filters must support a common set
249 of options including printer name, job ID, username, job title,
250 number of copies, and job options. All output is sent to the
251 standard output.</p>
252
253 <p>Filters are provided for many file formats and include image
254 file and PostScript raster filters that support non-PostScript
255 printers. Multiple filters are run in parallel to produce the
256 required output format.</p>
257
258 <p>The PostScript raster filter is based on the ESP Ghostscript
259 core. Instead of using the Ghostscript printer drivers, the CUPS
260 filter uses a generic CUPS raster printer driver and
261 CUPS-compliant front-end to support any kind of raster printer.
262 This allows the same printer driver filter to be used for
263 printing raster data from any filter.</p>
264
265 <pre>Talk about Apple's use of CUPS...</pre>
266
267 <h3>CUPS Imaging</h3>
268
269 <p>The CUPS Imaging library provides functions for managing
270 large images, doing colorspace conversion and color management,
271 scaling images for printing, and managing raster page streams.
272 It is used by the CUPS image file filters, the PostScript RIP,
273 and all raster printers drivers.</p>
274
275 <h3>Backends</h3>
276
277 <p>A backend program is a special filter that sends print data
278 to a device or network connection. Backends for parallel,
279 serial, USB, LPD, IPP, and AppSocket (JetDirect) connections are
280 provided in CUPS 1.2.</p>
281
282 <p>SAMBA version 2.0.6 and higher includes a SMB backend
283 (<tt>smbspool(1)</tt>) that can be used for printing to
284 Windows.</p>
285
286 <h2>Network Printing</h2>
287
288 <p>Traditionally, network printing has been one of the hardest
289 things to get working under UNIX. One reason is because each
290 vendor added their own extensions to the LPD protocol (the
291 previous standard for network printing), making cross-platform
292 printing difficult if not impossible.</p>
293
294 <p>Another reason is that you have to administer every network
295 printer on every client machine. In some cases you can "clone'
296 the printer configuration from a "master' client to each of the
297 others, but even that can be time-consuming and error-prone.
298 Something better is needed.</p>
299
300 <p>CUPS provides "printer browsing", which allows clients to
301 automatically see and use printers from any server on a LAN.
302 This means that you only need to configure the server and the
303 clients will automatically see the printers and classes on
304 it.</p>
305
306 <p>In addition, CUPS can automatically merge multiple identical
307 network printers into "implicit classes". This allows clients to
308 send jobs to the implicit class and have them print on the first
309 available printer or server. In addition, failsafe and
310 load-balancing functions are enabled simply by defining the same
311 printer on multiple servers!</p>
312
313 <h2>New Features in CUPS 1.2</h2>
314
315 <p>CUPS 1.2 includes many new features and capabilities:
316
317 <ol>
318
319 <li><a href='#BACKENDS'>Backends</a>
320
321 <li><a href='#BANNERS'>Banner Page Support</a>
322
323 <li><a href='#DIGEST'>Digest Authentication</a>
324
325 <li><a href='#DIRSVC'>Directory Services</a>
326
327 <li><a href='#FHS2'>Directory Structure Changes</a>
328
329 <li><a href='#DOCOS'>Documentation</a>
330
331 <li><a href='#DRIVERS'>Drivers</a>
332
333 <li><a href='#FILTERS'>Filters</a>
334
335 <li><a href='#IPP'>IPP Support</a>
336
337 <li><a href='#PERSISTENCE'>Job Persistence</a>
338
339 <li><a href='#LPD'>LPD Client Support</a>
340
341 <li><a href='#USEROPTS'>User-Defined Printers and Options</a>
342
343 <li><a href='#WEB'>Web Administration Interface</a>
344
345 </ol>
346
347 <h3><a name='BACKENDS'>1. Backends</a></h3>
348
349 <p>CUPS 1.2 implements a new backend interface for retrieving a
350 list of available devices for CUPS clients. This allows
351 administration interfaces to query the CUPS scheduler for a list
352 of available devices, automatically configure printers if the
353 device identification information is available, and present the
354 user with a list of available devices rather than relying on the
355 user to know what devices are configured on the system.</p>
356
357 <p>The new release also includes a backend for USB printers
358 under *BSD and Linux. Support for USB under Solaris 8 will be
359 provided in a subsequent patch release.</p>
360
361 <h3><a name='BANNERS'>2. Banner Page Support</a></h3>
362
363 <p>CUPS 1.2 includes support for banner pages at the beginning
364 and end of a job. Banner pages may be of any file format and
365 support variable substitution for job titles, usernames, etc.
366 Default banner pages are associated with each printer and can be
367 overridden with command-line options by the user.</p>
368
369 <h3><a name='DIGEST'>3. Digest Authentication</a></h3>
370
371 <p>Digest authentication provides a more secure method of
372 authenticating access to the printing system. Unlike Basic
373 authentication, Digest authentication does not send passwords
374 "in the clear' so it is more difficult to gain unauthorized
375 access to your system.</p>
376
377 <p>CUPS 1.2 implements Digest authentication using a special MD5
378 password file instead of the UNIX password file. This file is
379 managed using the new <tt>lppasswd</tt> command.</p>
380
381 <h3><a name='DIRSVC'>4. Directory Services</a></h3>
382
383 <p>CUPS 1.2 adds new directory service ("printer browsing")
384 features to make using CUPS on large LANs and WANs easier. You
385 can now poll a remote server for printer information and relay
386 it to the LAN as well as restrict what printer information is
387 processed (e.g. to "hide" servers, domains, or networks that you
388 don't want to see.)</p>
389
390 <h3><a name='FHS2'>5. Directory Structure Changes</a></h3>
391
392 <p>CUPS 1.2 now uses a directory structure that complies with
393 the Filesystem Hierarchy Standard (FHS), version 2.0. This
394 should make integration into existing Linux and *BSD
395 distributions a lot easier.</p>
396
397 <h3><a name='DOCOS'>6. Documentation</a></h3>
398
399 <p>The CUPS 1.2 documentation has gone through many revisions,
400 including a completely rewritten administrators manual, a new
401 programmers manual, and an IPP implementation reference
402 manual.</p>
403
404 <h3><a name='DRIVERS'>7. Drivers</a></h3>
405
406 <p>CUPS 1.2 includes drivers for EPSON dot-matrix and inkjet
407 printers. As with the HP PCL drivers, the EPSON drivers don't
408 necessarily provide the best possible output for each printer
409 but should provide adequate printing quality for general
410 day-to-day printing.</p>
411
412 <h3><a name='FILTERS'>8. Filters</a></h3>
413
414 <p>CUPS 1.2 includes new image, PostScript, PDF, and text
415 filters. The image filters have been upgraded to support Windows
416 BMP and Alias PIX files.</p>
417
418 <p>The PostScript filter is now based off ESP Ghostscript. The
419 new filter provides much better performance with
420 higher-resolution printers and supports all Level 3 PostScript
421 language features.</p>
422
423 <p>The new PDF filter is based off the excellent Xpdf software
424 from Derek Noonburg and supports automatic page scaling. The new
425 filter is a faster, smaller, more reliable replacement for the
426 GNU Ghostscript PDF filtering that was used in CUPS 1.0.</p>
427
428 <p>The new text filter now supports bidirectional text and can
429 embed fonts as needed.</p>
430
431 <h3><a name='IPP'>9. IPP Support</a></h3>
432
433 <p>Probably the least visible portion of CUPS is the IPP
434 support. CUPS 1.1 implements all of the required IPP/1.1
435 operations and attributes and most of the optional ones. The
436 optional Create-Job and Send-File operations are now
437 implemented, allowing for better System V printing system
438 compatibility (one job ID per <tt>lp</tt> command) and support
439 for banner pages.</p>
440
441 <h3><a name='PERSISTENCE'>10. Job Persistence</a></h3>
442
443 <p>CUPS 1.2 supports job persistence. This means that jobs are
444 preserved even after a reboot, a feature that was sorely missing
445 from CUPS 1.0.</p>
446
447 <p>In addition, CUPS 1.2 allows you to keep job information
448 after the job has printed. The basic post-job persistence mode
449 provides a job history (number of pages printed, time job was
450 printed, etc.) but does not preserve the actual job files. This
451 can be changed to discard all information after a job is printed
452 or keep the job files after printing so you can reprint a job at
453 some later time.</p>
454
455 <h3><a name='LPD'>11. LPD Client Support</a></h3>
456
457 <p>By popular request, CUPS 1.2 supports LPD-based clients using
458 a new mini-daemon that handles LPD requests and passes them on
459 to the main server.</p>
460
461 <h3><a name='USEROPTS'>12. User-Defined Printers and Options</a></h3>
462
463 <p>CUPS 1.2 includes support for user-defined printers and
464 options via a new <tt>lpoptions</tt> command. User-defined
465 printers are special instances of the available printers (e.g.
466 "printer/instance" or "printer@server/instance") that can have
467 their own default options such as media size, resolution, and so
468 forth. The <tt>lpoptions</tt> command can also be used to set a
469 different default printer queue.</p>
470
471 <h3><a name='WEB'>13. Web Administration Interface</a></h3>
472
473 <p>CUPS 1.0 provided a simple class, job, and printer monitoring
474 interface for web browsers. CUPS 1.2 replaces this interface
475 with an enhanced administration interface that allows you to
476 add, modify, delete, configure, and control classes, jobs, and
477 printers.</p>
478
479 <h2>Software Using CUPS</h2>
480
481 <p>A lot has happened since CUPS 1.0 came out, and many software
482 packages are supporting CUPS. We have contributed code to the
483 SAMBA team to support CUPS, and parts of that are already
484 available in SAMBA 2.0.6 and 2.0.7. With any luck the final
485 pieces that provide a complete integration with SAMBA will be
486 available in the next release of SAMBA.</p>
487
488 <p>Two graphical interfaces have appeared on the scene that use
489 CUPS as well. The KUPS project provides a KDE-based interface
490 for CUPS and can be found at:</p>
491
492 <pre>
493 <a href='http://kups.sourceforge.net'>http://kups.sourceforge.net</a>
494 </pre>
495
496 <p>The X Printing Panel (XPP) project provides a graphical
497 printing panel for CUPS and can be found at:</p>
498
499 <pre>
500 <a href='http://www.phy.uni-bayreuth.de/till/xpp'>http://www.phy.uni-bayreuth.de/till/xpp/</a>
501 </pre>
502
503 <p>Numerous other filters, drivers, tutorials, etc. have been
504 made available on the CUPS Links web page, available at:</p>
505
506 <pre>
507 <a href='http://www.cups.org/links.php'>http://www.cups.org/links.php</a>
508 </pre>
509
510 <p>Finally, our own ESP Print Pro software uses CUPS to provide
511 drivers for thousands of printers and can be found at:</p>
512
513 <pre>
514 <a href='http://www.easysw.com/printpro'>http://www.easysw.com/printpro</a>
515 </pre>
516
517 <h2>Operating Systems Using CUPS</h2>
518
519 <p>One of our goals has always been to get as many UNIX/Linux
520 distributions using CUPS as possible. Debian is currently
521 providing CUPS as part of its stable distribution, and many
522 other distributions are considering it in their next
523 releases.</p>
524
525 <h2>Summary</h2>
526
527 <p>The Common UNIX Printing System provides a modern printing
528 interface for UNIX applications that is both flexible and
529 user-friendly. The software provides System V and Berkeley
530 compatible command-line interfaces to ensure compatibility with
531 existing applications. CUPS 1.2 adds many new features that make
532 it an even better choice for printing under UNIX.</p>
533
534 <h2>Who to Contact</h2>
535
536 <p>For more information on CUPS please contact us at:
537
538 <pre>
539 Attn: CUPS Information
540 Easy Software Products
541 44141 Airport View Drive Suite 204
542 Hollywood, Maryland 20636-3142 USA
543
544 +1.301.373.9600
545
546 <a href='mailto:cups-info@cups.org'>cups-info@cups.org</a>
547 </pre>
548
549 <h2>References</h2>
550
551 <dl>
552
553 <dt>IEEE-1387.4</dt>
554
555 <dd>System Administration - Part 4: Printing Interfaces
556 (draft)</dd>
557
558 <dt><a href='http://www.pwg.org/ipp/index.html'>IETF-IPP</a></dt>
559
560 <dd>Internet Printing Protocol/1.1</dd>
561
562 <dt><a href='http://www.astart.com/lprng.html'>LPRng</a></dt>
563
564 <dd>An enhanced, extended, and portable implementation
565 of the Berkeley LPR print spooler functionality</dd>
566
567 <dt>Palladin</dt>
568
569 <dd>A printing system developed at the Massachussetts
570 Institute of Technology</dd>
571
572 <dt><a href='http://www-usa.iona.com//hyplan/jmason/plp.html'>PLP</a></dt>
573
574 <dd>The Portable Line Printer spooler system</dd>
575
576 <dt><a href='http://www.ietf.org/rfc/rfc1179.txt'>RFC1179</a></dt>
577
578 <dd>Line Printer Daemon Protocol</dd>
579
580 <dt><a href='http://www.ietf.org/rfc/rfc2046.txt'>RFC2046</a></dt>
581
582 <dd>Multipurpose Internet Mail Extensions (MIME) Part
583 Two: Media Types</dd>
584
585 <dt><a href='http://www.ietf.org/rfc/rfc2616.txt'>RFC2616</a></dt>
586
587 <dd>Hypertext Transfer Protocol -- HTTP/1.1</dd>
588
589 </dl>
590
591 <h2>Trademarks</h2>
592
593 <p>The Common UNIX Printing System, CUPS, and the CUPS logo are
594 the trademark property of Easy Software Products. All other
595 trademarks are the property of their respective owners.</p>
596
597 </body>
598 </html>