]> git.ipfire.org Git - thirdparty/cups.git/blame - doc/help/spec-design.html
Merge changes from CUPS 1.4svn-r8628.
[thirdparty/cups.git] / doc / help / spec-design.html
CommitLineData
745129be 1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4744bd90 2<HTML>
3<!-- SECTION: Specifications -->
4<HEAD>
5 <TITLE>CUPS Design Description</TITLE>
178cb736 6 <LINK REL="STYLESHEET" TYPE="text/css" HREF="../cups-printable.css">
4744bd90 7</HEAD>
8<BODY>
9
178cb736 10<H1 CLASS="title">CUPS Design Description</H1>
e1d6a774 11
178cb736 12<P>This design description documents the overall organization of CUPS. The purpose is not to provide a line-by-line description of the CUPS source code, but rather to describe the overall architecture and location of key pieces so that developers can more easily understand the underlying operation of CUPS.</P>
e1d6a774 13
14<H2 CLASS="title"><A NAME="INTRO">Introduction</A></H2>
15
178cb736 16<P>Like most printing systems, CUPS is designed around a central print scheduling process that dispatches print jobs, processes administrative commands, provides printer status information to local and remote programs, and informs users as needed. <A HREF="#FIGURE1">Figure 1</A> shows the basic organization of CUPS.</P>
e1d6a774 17
18<H3>Scheduler</H3>
19
178cb736
MS
20<P>The scheduler is a HTTP/1.1 and IPP/2.1 server application that manages HTTP and IPP requests, printers, classes, jobs, subscriptions, and notifications on the system. HTTP is used for normal web browser services as well as IPP operation messages passed via HTTP POST requests with the <CODE>application/ipp</CODE> content type. The scheduler uses a series of helper applications based on the Common Gateway Interface ("CGI") to provide dynamic web interfaces and can be configured to run additional site-specific programs or scripts for the web interface.</P>
21
22<P>The scheduler is designed as a traditional single-threaded server process which runs external processes to do longer-term operations such as printing, notification, device/driver enumeration, and remote printer monitoring. External processes are normally run as a non-privileged account ("lp") and, on some platforms, with additional restrictions that limit what the processes are allowed to do.</P>
23
24<P>The maximum number of simultaneous clients and print jobs that can be supported is primarily limited by the available server memory, file descriptors, and CPU - the scheduler itself imposes no hard limits.</P>
e1d6a774 25
26<DIV CLASS="figure"><TABLE SUMMARY="CUPS Block Diagram">
27<CAPTION>Figure 1: <A NAME="FIGURE1">CUPS Block Diagram</A></CAPTION>
28<TR><TD ALIGN="CENTER"><IMG SRC="../images/cups-block-diagram.gif"
178cb736 29WIDTH="768" HEIGHT="768" ALT="CUPS Block Diagram"></TD></TR>
e1d6a774 30</TABLE></DIV>
31
178cb736
MS
32<H4>Config Files</H4>
33
34<P>The scheduler uses several configuration files to store the server settings (<A HREF="ref-cupsd-conf.html">cupsd.conf</A>), available classes (<A HREF="ref-classes-conf.html">classes.conf</A>), available printers (<A HREF="ref-printers-conf.html">printers.conf</A>), current notification subscriptions (<A HREF="ref-subscriptions-conf.html">subscriptions.conf</A>), and supported file types and filters (<A HREF="man-mime.types.html">mime.types</A>, <A HREF="man-mime.convs.html">mime.convs</A>). In addition, PostScript Printer Description ("PPD") files or interface scripts are associated with each printer, and the scheduler has cache files for remote printers, PPD files, and current jobs to optimize the scheduler's startup speed and availability.</P>
35
e1d6a774 36<H4>Job Files</H4>
37
178cb736 38<P>The scheduler stores job files in a <EM>spool directory</EM>, typically <VAR>/var/spool/cups</VAR>. Two types of files will be found in the spool directory: <EM>control files</EM> starting with the letter "c" ("c00001", "c99999", "c100000", etc.) and <EM>data files</EM> starting with the letter "d" ("d00001-001", "d99999-001", "d100000-001", etc.) Control files are IPP messages based on the original IPP Print-Job or Create-Job messages, while data files are the original print files that were submitted for printing. There is one control file for every job known to the system and 0 or more data files for each job.
e1d6a774 39
178cb736 40<p>Control files are normally cleaned out after the 500th job is submitted, while data files are removed immediately after a job has successfully printed. Both behaviors can be configured.</P>
e1d6a774 41
178cb736 42<H4>Log Files</H4>
e1d6a774 43
178cb736
MS
44<P>The scheduler keeps three kinds of log files which are normally stored in the <VAR>/var/log/cups</VAR> directory. The <A HREF="ref-access_log.html">access_log</A> file lists every HTTP and IPP request that is processed by the scheduler. The <A HREF="ref-error_log.html">error_log</A> file contains messages from the scheduler and its helper applications that can be used
45to track down problems. The <A HREF="ref-page_log.html">page_log</A> file lists every page that is printed, allowing for simple print accounting.</P>
e1d6a774 46
178cb736 47<P>Log files are rotated automatically by the scheduler when they reach the configured size limit, by default 1MB. If the limit is set to 0 then no rotation is performed in the scheduler - this mode is often used by Linux distributions so they can use the <B>logrotated(8)</B> program to rotate them instead.</P>
e1d6a774 48
49<H3>Berkeley Commands</H3>
50
178cb736 51<P>CUPS provides the Berkeley <A HREF="man-lpc.html">lpc(8)</A>, <A HREF="man-lpq.html">lpq(1)</A>, <A HREF="man-lpr.html">lpr(1)</A>, and <A HREF="man-lprm.html">lprm(1)</A> commands. In general, they function identically to the original Berkeley commands with the following exceptions:</P>
e1d6a774 52
53<OL>
54
178cb736 55 <LI>The <B>lpc</B> command currently only supports the "status" sub-command.</LI>
e1d6a774 56
178cb736 57 <LI>The <B>lpr</B> command does not support the format modifier options "1" (TROFF font set 1), "2" (TROFF font set 2), "3" (TROFF font set 3), "4" (TROFF font set 4), "c" (CIFPLOT), "d" (DVI), "f" (FORTRAN), "g" (GNU plot), "i" (indentation), "n" (Ditroff), "r" (Sun raster), "t" (Troff), or "w" (width), as they do not map to the IPP MIME media type based document formats.</LI>
e1d6a774 58
59</OL>
60
61<H3>System V Commands</H3>
62
178cb736 63<P>CUPS provides the System V <A HREF="man-cancel.html">cancel(1)</A>, <A HREF="man-lp.html">lp(1)</A>, <A HREF="man-lpadmin.html">lpadmin(8)</A>, <A HREF="man-lpmove.html">lpmove(8)</A>, and <A HREF="man-lpstat.html">lpstat(1)</A> commands. In general, they function identically to the original System V commands with the following exceptions:</P>
e1d6a774 64
65<OL>
66
178cb736 67 <LI>All commands may ask for a password; the System V print spooler requires root access to perform administration tasks, while CUPS allows for more flexible configurations.</LI>
e1d6a774 68
178cb736 69 <LI>The <B>lpadmin</B> command does not implement the Solaris "-A" (alert), "-F" (fault recovery), "-M" (mount form/wheel), "-P" (paper list), "-S" (print wheels), "-T" (type list), "-U" (dialer info), "-W" (wait), "-f" (form name), "-l" (content-type list), "-s" (remote printer), or "-t" (number of trays) options.</LI>
e1d6a774 70
71</OL>
72
73<H3>CUPS Commands</H3>
74
178cb736 75<P>CUPS provides the <A HREF="man-cupsaccept.html">cupsaccept(8)</A>, <A HREF="man-cupsaddsmb.html">cupsaddsmb(8)</A>, <A HREF="man-cupsenable.html">cupsdisable(8)</A>, <A HREF="man-cupsenable.html">cupsenable(8)</A>, <A HREF="man-cupsaccept.html">cupsreject(8)</A>, <A HREF="man-cupstestppd.html">cupstestppd(1)</A>, <A HREF="man-lpinfo.html">lpinfo(8)</A>, and <A HREF="man-lppasswd.html">lppasswd(1)</A> commands. The <B>cupsaccept</B>, <B>cupsdisable</B>, <B>cupsenable</B>, and <B>cupsreject</B> commands correspond to the System V <B>accept</B>, <B>disable</B>, <B>enable</B>, and <B>reject</B> commands but have been renamed to avoid confusion and conflicts with the <B>bash(1)</B> internal <B>enable</B> command of the same name.</P>
e1d6a774 76
77<H3>LPD Support</H3>
78
178cb736
MS
79<P>LPD client support is provided via the <A HREF="man-cups-lpd.html">cups-lpd(8)</A> program. Incoming LPD requests are accepted on TCP port 515 by the local <B>inetd(8)</B>, <B>launchd(8)</B>, or <B>xinetd(8)</B> process and forwarded to the <B>cups-lpd</B> program for conversion to the corresponding IPP request(s).</P>
80
81<P>The <B>cups-lpd</B> program conforms, for the most part, to RFC 1179: Line Printer Daemon Protocol, but does not enforce the privileged source port restriction specified in that document. In addition, the banner page and output format options are usually overridden via command-line options to the <B>cups-lpd</B> program when it is invoked by the corresponding super-daemon program.</P>
e1d6a774 82
83<H3>Web Interface</H3>
84
178cb736 85<P>The web interface is supported by five CGI programs. <A HREF="#TABLE1">Table 1</A> describes the purpose of each of the programs.</P>
e1d6a774 86
87<DIV CLASS="table"><TABLE SUMMARY="CGI Programs">
88<CAPTION>Table 1: <A NAME="TABLE1">CGI Programs</A></CAPTION>
89<THEAD>
90<TR>
91 <TH>Program</TH>
92 <TH>Location</TH>
93 <TH>Description</TH>
94</TR>
95</THEAD>
96<TBODY>
97<TR>
98 <TD>admin.cgi</TD>
99 <TD>/admin</TD>
100 <TD>Provides all of the administrative functions</TD>
101</TR>
102<TR>
103 <TD>classes.cgi</TD>
104 <TD>/classes</TD>
105 <TD>Lists classes and provides class management functions</TD>
106</TR>
107<TR>
108 <TD>help.cgi</TD>
109 <TD>/help</TD>
178cb736 110 <TD>Provides access to online help documents</TD>
e1d6a774 111</TR>
112<TR>
113 <TD>jobs.cgi</TD>
114 <TD>/jobs</TD>
115 <TD>Lists jobs and provides job management functions</TD>
116</TR>
117<TR>
118 <TD>printers.cgi</TD>
119 <TD>/printers</TD>
120 <TD>Lists printers and provides printer management functions</TD>
121</TR>
122</TBODY>
123</TABLE></DIV>
124
125<H3>Notifiers</H3>
126
178cb736
MS
127<P>Notifiers (<A HREF="man-notifier.html">notifier(7)</A>) provide the means for sending asynchronous event notifications from the scheduler. Notifiers are executed with the recipient information on the command-line and the event data on the standard input. For example:</P>
128
129<PRE CLASS="command">
130CUPS_SERVERBIN/notifier/foo recipient user-data
131</PRE>
e1d6a774 132
178cb736 133<P>CUPS includes two notifiers: <B>mailto</B> to provide SMTP-based email notifications and <B>rss</B> to provide Really Simple Syndication ("RSS") notifications from the scheduler. Additional notifiers can be installed in the <VAR>notifier</VAR> directory as needed to support other methods.</P>
e1d6a774 134
135<H3>Filters</H3>
136
178cb736 137<P>Filters (<A HREF="man-filter.html">filter(7)</A>) convert job files into a printable format. Multiple filters are run, as needed, to convert from the job file format to the printable format. A filter program reads from the standard input or from a file if a filename is supplied. All filters must support a common set of options including printer name, job ID, username, job title, number of copies, and job options. All output is sent to the standard output.</P>
e1d6a774 138
178cb736 139<P>CUPS provides filters for printing text, PostScript, PDF, HP-GL/2, and many types of image files. CUPS also provides printer driver filters for HP-PCL, ESC/P, and several types of label printers. Additional filters can be registered with CUPS via mime.convs and PPD files.</P>
e1d6a774 140
141<H3>Port Monitors</H3>
142
178cb736 143<P>Port monitors handle the device- and channel-specific data formatting for a printer. Port monitors use the same interface as filters.</P>
e1d6a774 144
178cb736 145<P>CUPS includes two port monitors: the <B>bcp</B> port monitor which supports the PostScript Binary Communications Protocol ("BCP") and the <b>tbcp</b> port monitor which supports the PostScript Tagged Binary Communications Protocol ("TBCP"). Additional port monitors can be registered in PPD files.</P>
e1d6a774 146
147<H3>Backends</H3>
148
178cb736 149<P>Backends (<A HREF="man-backend.html">backend(7)</A>) send print data to the printer and enumerate available printers/devices as needed. Backends use the same interface as filters.</P>
e1d6a774 150
178cb736 151<P>CUPS includes backends for AppSocket (JetDirect), IPP, LPD, parallel, SCSI, serial, and USB connections. Additional backends can be added as needed without additional configuration.</P>
e1d6a774 152
4744bd90 153
178cb736 154<H2 CLASS="title"><A NAME="PROGRAMMING">Programming Interfaces</A></H2>
4744bd90 155
178cb736 156<P>CUPS makes use of several general-purpose libraries to provide its printing services. Unlike the rest of CUPS, the libraries are provided under the terms of the GNU LGPL so they may be used by non-GPL applications.</P>
4744bd90 157
178cb736 158<H3>CUPS Library (libcups)</H3>
4744bd90 159
178cb736 160<P>The CUPS library contains all of the core HTTP and IPP communications code as well as convenience functions for queuing print jobs, getting printer information, accessing resources via HTTP and IPP, and manipulating PPD files. The scheduler and all commands, filters, and backends use this library.</P>
4744bd90 161
178cb736 162<H3>CUPS CGI Library (libcupscgi)</H3>
4744bd90 163
178cb736 164<P>The CUPS CGI library provides all of the web interface support functions. It is used by the CGI programs to provide the CUPS web interface.</P>
4744bd90 165
178cb736 166<H3>CUPS Driver Library (libcupsdriver)</H3>
4744bd90 167
178cb736 168<P>The CUPS driver library provides access to the dithering, color conversion, and helper functions used by the CUPS sample printer drivers.</P>
4744bd90 169
178cb736 170<H3>CUPS Imaging Library (libcupsimage)</H3>
4744bd90 171
178cb736 172<P>The CUPS imaging library provides functions for managing large images, doing colorspace conversion and color management, scaling images for printing, and managing raster page streams. It is used by the CUPS image file filters, the PostScript RIP, and all raster printers drivers.</P>
4744bd90 173
178cb736 174<H3>CUPS MIME Library (libcupsmime)</H3>
4744bd90 175
178cb736 176<P>The CUPS MIME library provides file typing and conversion functions and is used by the scheduler and <A HREF="man-cupsfilter.html">cupsfilter(8)</A> command to auto-type and convert print files to a printable format.</P>
4744bd90 177
178cb736 178<H3>CUPS PPD Compiler Library (libcupsppdc)</H3>
4744bd90 179
178cb736 180<P>The CUPS PPD compiler library provides access to driver information files and is used by the PPD compiler tools as well as the <A HREF="man-cups-driverd.html">cups-driverd(8)</A> helper program to generate PPD files and message catalogs for localization.</P>
4744bd90 181
4744bd90 182
183</BODY>
184</HTML>