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