1 | <?xml version="1.0" encoding="iso-8859-1"?>
|
---|
2 | <!DOCTYPE chapter PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
|
---|
3 | <chapter id="CUPS-printing">
|
---|
4 |
|
---|
5 | <chapterinfo>
|
---|
6 |
|
---|
7 | <author>
|
---|
8 | <firstname>Kurt</firstname><surname>Pfeifle</surname>
|
---|
9 | <affiliation>
|
---|
10 | <orgname>Danka Deutschland GmbH </orgname>
|
---|
11 | <address><email>kpfeifle@danka.de</email></address>
|
---|
12 | </affiliation>
|
---|
13 | </author>
|
---|
14 | <author>
|
---|
15 | <firstname>Ciprian</firstname><surname>Vizitiu</surname>
|
---|
16 | <affiliation>
|
---|
17 | <address><email>CVizitiu@gbif.org</email></address>
|
---|
18 | </affiliation>
|
---|
19 | <contrib>drawings</contrib>
|
---|
20 | </author>
|
---|
21 |
|
---|
22 | <author>&person.jelmer;<contrib>drawings</contrib></author>
|
---|
23 |
|
---|
24 | <pubdate> (27 Jan 2004) </pubdate>
|
---|
25 | </chapterinfo>
|
---|
26 |
|
---|
27 | <title>CUPS Printing Support</title>
|
---|
28 |
|
---|
29 | <sect1>
|
---|
30 |
|
---|
31 | <title>Introduction</title>
|
---|
32 |
|
---|
33 | <sect2>
|
---|
34 | <title>Features and Benefits</title>
|
---|
35 |
|
---|
36 | <para>
|
---|
37 | <indexterm><primary>default printing</primary></indexterm>
|
---|
38 | The Common UNIX Print System (<ulink url="http://www.cups.org/">CUPS</ulink>)
|
---|
39 | has become quite popular. All major Linux distributions now ship it as their default printing
|
---|
40 | system. To many, it is still a mystical tool. Mostly, it just works. People tend to regard
|
---|
41 | it as a <quote>black box</quote> that they do not want to look into as long as it works. But once
|
---|
42 | there is a little problem, they have trouble finding out where to start debugging it. Refer to
|
---|
43 | <link linkend="classicalprinting">Classical Printing</link>, which contains much information
|
---|
44 | that is also relevant to CUPS.
|
---|
45 | </para>
|
---|
46 |
|
---|
47 | <para>
|
---|
48 | <indexterm><primary>CUPS</primary></indexterm>
|
---|
49 | CUPS sports quite a few unique and powerful features. While its basic functions may be grasped quite
|
---|
50 | easily, they are also new. Because it is different from other, more traditional printing systems, it is best
|
---|
51 | not to try to apply any prior knowledge about printing to this new system. Rather, try to understand CUPS from
|
---|
52 | the beginning. This documentation will lead you to a complete understanding of CUPS. Let's start with the most
|
---|
53 | basic things first.
|
---|
54 | </para>
|
---|
55 |
|
---|
56 | </sect2>
|
---|
57 |
|
---|
58 | <sect2>
|
---|
59 | <title>Overview</title>
|
---|
60 |
|
---|
61 | <para>
|
---|
62 | <indexterm><primary>print spooling system</primary></indexterm>
|
---|
63 | <indexterm><primary>CUPS</primary></indexterm>
|
---|
64 | <indexterm><primary>printer management system</primary></indexterm>
|
---|
65 | <indexterm><primary>IETF</primary></indexterm>
|
---|
66 | <indexterm><primary>Internet Printing Protocol</primary><see>IPP</see></indexterm>
|
---|
67 | <indexterm><primary>Internet Engineering Task Force</primary><see>IETF</see></indexterm>
|
---|
68 | <indexterm><primary>GUI</primary></indexterm>
|
---|
69 | <indexterm><primary>KDEPrint</primary></indexterm>
|
---|
70 | CUPS is more than just a print spooling system. It is a complete printer management system that
|
---|
71 | complies with the new Internet Printing Protocol (IPP). IPP is an industry and Internet Engineering Task Force
|
---|
72 | (IETF) standard for network printing. Many of its functions can be managed remotely (or locally) via a Web
|
---|
73 | browser (giving you platform-independent access to the CUPS print server). Additionally, it has the
|
---|
74 | traditional command line and several more modern GUI interfaces (GUI interfaces developed by third parties,
|
---|
75 | like KDE's overwhelming <ulink url="http://printing.kde.org/">KDEPrint</ulink>).
|
---|
76 | </para>
|
---|
77 |
|
---|
78 | <para>
|
---|
79 | <indexterm><primary>raw printers</primary></indexterm>
|
---|
80 | <indexterm><primary>smart printers</primary></indexterm>
|
---|
81 | CUPS allows creation of <emphasis>raw</emphasis> printers (i.e., no print file format translation) as
|
---|
82 | well as <emphasis>smart</emphasis> printers (i.e., CUPS does file format conversion as required for the
|
---|
83 | printer). In many ways, this gives CUPS capabilities similar to the MS Windows print monitoring system. Of
|
---|
84 | course, if you are a CUPS advocate, you would argue that CUPS is better! In any case, let us now explore how
|
---|
85 | to configure CUPS for interfacing with MS Windows print clients via Samba.
|
---|
86 | </para>
|
---|
87 |
|
---|
88 | </sect2>
|
---|
89 |
|
---|
90 | </sect1>
|
---|
91 |
|
---|
92 | <sect1>
|
---|
93 | <title>Basic CUPS Support Configuration</title>
|
---|
94 |
|
---|
95 | <para>
|
---|
96 | <indexterm><primary>CUPS</primary></indexterm>
|
---|
97 | <indexterm><primary>cupsd.conf</primary></indexterm>
|
---|
98 | <indexterm><primary>/etc/printcap</primary></indexterm>
|
---|
99 | <indexterm><primary>Printcap</primary></indexterm>
|
---|
100 | <indexterm><primary>PrintcapFormat</primary></indexterm>
|
---|
101 | Printing with CUPS in the most basic &smb.conf; setup in Samba-3.0 (as was true for 2.2.x) requires just two
|
---|
102 | parameters: <smbconfoption name="printing">cups</smbconfoption> and <smbconfoption
|
---|
103 | name="printcap">cups</smbconfoption>. CUPS does not need a printcap file. However, the
|
---|
104 | <filename>cupsd.conf</filename> configuration file knows of two related directives that control how such a
|
---|
105 | file will be automatically created and maintained by CUPS for the convenience of third-party applications
|
---|
106 | (example: <parameter>Printcap /etc/printcap</parameter> and <parameter>PrintcapFormat BSD</parameter>).
|
---|
107 | Legacy programs often require the existence of a printcap file containing printer names or they will refuse to
|
---|
108 | print. Make sure CUPS is set to generate and maintain a printcap file. For details, see <command>man
|
---|
109 | cupsd.conf</command> and other CUPS-related documentation, like the wealth of documents regarding the CUPS
|
---|
110 | server itself available from the <ulink noescape="1"
|
---|
111 | url="http://localhost:631/documentation.html">CUPS</ulink> web site.
|
---|
112 | </para>
|
---|
113 |
|
---|
114 | <sect2>
|
---|
115 | <title>Linking smbd with libcups.so</title>
|
---|
116 |
|
---|
117 | <para>
|
---|
118 | <indexterm><primary>libcups.so</primary></indexterm>
|
---|
119 | Samba has a special relationship to CUPS. Samba can be compiled with CUPS library support.
|
---|
120 | Most recent installations have this support enabled. By default, CUPS linking is compiled
|
---|
121 | into smbd and other Samba binaries. Of course, you can use CUPS even
|
---|
122 | if Samba is not linked against <filename>libcups.so</filename> &smbmdash; but
|
---|
123 | there are some differences in required or supported configuration.
|
---|
124 | </para>
|
---|
125 |
|
---|
126 | <para>
|
---|
127 | <indexterm><primary>libcups</primary></indexterm>
|
---|
128 | <indexterm><primary>ldd</primary></indexterm>
|
---|
129 | When Samba is compiled and linked with <filename>libcups</filename>, <smbconfoption name="printcap">cups</smbconfoption>
|
---|
130 | uses the CUPS API to list printers, submit jobs, query queues, and so on. Otherwise it maps to the System V
|
---|
131 | commands with an additional <command>-oraw</command> option for printing. On a Linux
|
---|
132 | system, you can use the <command>ldd</command> utility to find out if smbd has been linked with the
|
---|
133 | libcups library (<command>ldd</command> may not be present on other OS platforms, or its function may be embodied
|
---|
134 | by a different command):
|
---|
135 | <screen>
|
---|
136 | &rootprompt;<userinput>ldd `which smbd`</userinput>
|
---|
137 | libssl.so.0.9.6 => /usr/lib/libssl.so.0.9.6 (0x4002d000)
|
---|
138 | libcrypto.so.0.9.6 => /usr/lib/libcrypto.so.0.9.6 (0x4005a000)
|
---|
139 | libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000)
|
---|
140 | [....]
|
---|
141 | </screen>
|
---|
142 | </para>
|
---|
143 |
|
---|
144 | <para>
|
---|
145 | <indexterm><primary>libcups.so.2</primary></indexterm>
|
---|
146 | The line <computeroutput>libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000)</computeroutput> shows
|
---|
147 | there is CUPS support compiled into this version of Samba. If this is the case, and printing = cups
|
---|
148 | is set, then <emphasis>any otherwise manually set print command in &smb.conf; is ignored</emphasis>.
|
---|
149 | This is an important point to remember!
|
---|
150 | </para>
|
---|
151 |
|
---|
152 | <tip><para> Should it be necessary, for any reason, to set your own print commands, you can do this by setting
|
---|
153 | <smbconfoption name="printing">sysv</smbconfoption>. However, you will lose all the benefits
|
---|
154 | of tight CUPS-Samba integration. When you do this, you must manually configure the printing system commands
|
---|
155 | (most important:
|
---|
156 | <smbconfoption name="print command"/>; other commands are
|
---|
157 | <smbconfoption name="lppause command"/>,
|
---|
158 | <smbconfoption name="lpresume command"/>,
|
---|
159 | <smbconfoption name="lpq command"/>,
|
---|
160 | <smbconfoption name="lprm command"/>,
|
---|
161 | <smbconfoption name="queuepause command"/> and
|
---|
162 | <smbconfoption name="queue resume command"/>).
|
---|
163 | </para></tip>
|
---|
164 |
|
---|
165 | </sect2>
|
---|
166 |
|
---|
167 | <sect2>
|
---|
168 | <title>Simple &smb.conf; Settings for CUPS</title>
|
---|
169 |
|
---|
170 | <para>
|
---|
171 | To summarize, <link linkend="cups-exam-simple">the Simplest Printing-Related
|
---|
172 | &smb.conf; file</link> shows the simplest printing-related setup for &smb.conf; to
|
---|
173 | enable basic CUPS support:
|
---|
174 | </para>
|
---|
175 |
|
---|
176 | <example id="cups-exam-simple">
|
---|
177 | <title>Simplest Printing-Related smb.conf</title>
|
---|
178 | <smbconfblock>
|
---|
179 | <smbconfsection name="[global]"/>
|
---|
180 | <smbconfoption name="load printers">yes</smbconfoption>
|
---|
181 | <smbconfoption name="printing">cups</smbconfoption>
|
---|
182 | <smbconfoption name="printcap name">cups</smbconfoption>
|
---|
183 |
|
---|
184 | <smbconfsection name="[printers]"/>
|
---|
185 | <smbconfoption name="comment">All Printers</smbconfoption>
|
---|
186 | <smbconfoption name="path">/var/spool/samba</smbconfoption>
|
---|
187 | <smbconfoption name="browseable">no</smbconfoption>
|
---|
188 | <smbconfoption name="guest ok">yes</smbconfoption>
|
---|
189 | <smbconfoption name="writable">no</smbconfoption>
|
---|
190 | <smbconfoption name="printable">yes</smbconfoption>
|
---|
191 | <smbconfoption name="printer admin">root, @ntadmins, @smbprintadm</smbconfoption>
|
---|
192 | </smbconfblock>
|
---|
193 | </example>
|
---|
194 |
|
---|
195 | <para>
|
---|
196 | <indexterm><primary>PDF</primary></indexterm>
|
---|
197 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
198 | <indexterm><primary>printer driver</primary></indexterm>
|
---|
199 | This is all you need for basic printing setup for CUPS. It will print all graphic, text, PDF, and PostScript
|
---|
200 | files submitted from Windows clients. However, most of your Windows users would not know how to send these
|
---|
201 | kinds of files to print without opening a GUI application. Windows clients tend to have local printer drivers
|
---|
202 | installed, and the GUI application's print buttons start a printer driver. Your users also rarely send files
|
---|
203 | from the command line. Unlike UNIX clients, they rarely submit graphic, text, or PDF formatted files directly
|
---|
204 | to the spooler. They nearly exclusively print from GUI applications with a <quote>printer driver</quote>
|
---|
205 | hooked between the application's native format and the print data stream. If the backend printer is not a
|
---|
206 | PostScript device, the print data stream is <quote>binary,</quote> sensible only for the target printer. Read
|
---|
207 | on to learn what problem this may cause and how to avoid it.
|
---|
208 | </para>
|
---|
209 |
|
---|
210 | </sect2>
|
---|
211 |
|
---|
212 | <sect2>
|
---|
213 | <title>More Complex CUPS &smb.conf; Settings</title>
|
---|
214 |
|
---|
215 | <para>
|
---|
216 | <link linkend="overridesettings">The Overriding Global CUPS Settings for One Printer example</link>
|
---|
217 | is a slightly more complex printing-related setup for &smb.conf;. It enables general CUPS printing
|
---|
218 | support for all printers, but defines one printer share, which is set up differently.
|
---|
219 | </para>
|
---|
220 |
|
---|
221 | <example id="overridesettings">
|
---|
222 | <title>Overriding Global CUPS Settings for One Printer</title>
|
---|
223 | <smbconfblock>
|
---|
224 | <smbconfsection name="[global]"/>
|
---|
225 | <smbconfoption name="printing">cups</smbconfoption>
|
---|
226 | <smbconfoption name="printcap name">cups</smbconfoption>
|
---|
227 | <smbconfoption name="load printers">yes</smbconfoption>
|
---|
228 |
|
---|
229 | <smbconfsection name="[printers]"/>
|
---|
230 | <smbconfoption name="comment">All Printers</smbconfoption>
|
---|
231 | <smbconfoption name="path">/var/spool/samba</smbconfoption>
|
---|
232 | <smbconfoption name="guest ok">yes</smbconfoption>
|
---|
233 | <smbconfoption name="writable">no</smbconfoption>
|
---|
234 | <smbconfoption name="printable">yes</smbconfoption>
|
---|
235 | <smbconfoption name="printer admin">root, @ntadmins, @smbprintadm</smbconfoption>
|
---|
236 |
|
---|
237 | <smbconfsection name="[special_printer]"/>
|
---|
238 | <smbconfoption name="comment">A special printer with his own settings</smbconfoption>
|
---|
239 | <smbconfoption name="path">/var/spool/samba-special</smbconfoption>
|
---|
240 | <smbconfoption name="printing">sysv</smbconfoption>
|
---|
241 | <smbconfoption name="printcap">lpstat</smbconfoption>
|
---|
242 | <smbconfoption name="print command">echo "NEW: `date`: printfile %f" >> /tmp/smbprn.log ; echo " `date`: p-%p s-%s f-%f" >> /tmp/smbprn.log ; echo " `date`: j-%j J-%J z-%z c-%c" >> /tmp/smbprn.log ; rm %f </smbconfoption>
|
---|
243 | <smbconfoption name="guest ok">no</smbconfoption>
|
---|
244 | <smbconfoption name="writable">no</smbconfoption>
|
---|
245 | <smbconfoption name="printable">yes</smbconfoption>
|
---|
246 | <smbconfoption name="printer admin">kurt</smbconfoption>
|
---|
247 | <smbconfoption name="hosts deny">0.0.0.0</smbconfoption>
|
---|
248 | <smbconfoption name="hosts allow">turbo_xp, 10.160.50.23, 10.160.51.60</smbconfoption>
|
---|
249 | </smbconfblock>
|
---|
250 | </example>
|
---|
251 |
|
---|
252 | <para>
|
---|
253 | This special share is only for testing purposes. It does not write the print job to a file. It just logs the job parameters
|
---|
254 | known to Samba into the <filename>/tmp/smbprn.log</filename> file and deletes the job-file. Moreover, the
|
---|
255 | <smbconfoption name="printer admin"/> of this share is <quote>kurt</quote> (not the <quote>@ntadmins</quote> group),
|
---|
256 | guest access is not allowed, the share isn't published to the Network Neighborhood (so you need to know it is there), and it
|
---|
257 | allows access from only three hosts. To prevent CUPS from kicking in and taking over the print jobs for that share, we need to set
|
---|
258 | <smbconfoption name="printing">sysv</smbconfoption> and <smbconfoption name="printcap">lpstat</smbconfoption>.
|
---|
259 | </para>
|
---|
260 |
|
---|
261 | </sect2>
|
---|
262 |
|
---|
263 | </sect1>
|
---|
264 |
|
---|
265 | <sect1>
|
---|
266 | <title>Advanced Configuration</title>
|
---|
267 |
|
---|
268 | <para>
|
---|
269 | Before we delve into all the configuration options, let us clarify a few points. <emphasis>Network printing
|
---|
270 | needs to be organized and set up correctly</emphasis>. This frequently doesn't happen. Legacy systems or small
|
---|
271 | business LAN environments often lack design and good housekeeping.
|
---|
272 | </para>
|
---|
273 |
|
---|
274 |
|
---|
275 | <sect2>
|
---|
276 | <title>Central Spooling vs. <quote>Peer-to-Peer</quote> Printing</title>
|
---|
277 |
|
---|
278 |
|
---|
279 | <para>
|
---|
280 | <indexterm><primary>spooling</primary></indexterm>
|
---|
281 | <indexterm><primary>spooling</primary><secondary>central</secondary></indexterm>
|
---|
282 | <indexterm><primary>spooling</primary><secondary>peer-to-peer</secondary></indexterm>
|
---|
283 | Many small office or home networks, as well as badly organized larger environments, allow each client a direct
|
---|
284 | access to available network printers. This is generally a bad idea. It often blocks one client's access to the
|
---|
285 | printer when another client's job is printing. It might freeze the first client's application while it is
|
---|
286 | waiting to get rid of the job. Also, there are frequent complaints about various jobs being printed with their
|
---|
287 | pages mixed with each other. A better concept is the use of a print server: it routes all jobs through one
|
---|
288 | central system, which responds immediately, takes jobs from multiple concurrent clients, and transfers them to
|
---|
289 | the printer(s) in the correct order.
|
---|
290 | </para>
|
---|
291 |
|
---|
292 | </sect2>
|
---|
293 |
|
---|
294 | <sect2>
|
---|
295 | <title>Raw Print Serving: Vendor Drivers on Windows Clients</title>
|
---|
296 |
|
---|
297 | <para>
|
---|
298 | <indexterm><primary>spooling-only</primary></indexterm>
|
---|
299 | <indexterm><primary>raw printing</primary></indexterm>
|
---|
300 | Most traditionally configured UNIX print servers acting on behalf of
|
---|
301 | Samba's Windows clients represented a really simple setup. Their only
|
---|
302 | task was to manage the <quote>raw</quote> spooling of all jobs handed to them by
|
---|
303 | Samba. This approach meant that the Windows clients were expected to
|
---|
304 | prepare the print job file that is ready to be sent to the printing
|
---|
305 | device. In this case, a native (vendor-supplied) Windows printer driver needs to
|
---|
306 | be installed on each and every client for the target device.
|
---|
307 | </para>
|
---|
308 |
|
---|
309 | <para>
|
---|
310 | <indexterm><primary>render</primary></indexterm>
|
---|
311 | <indexterm><primary>vendor-provided drivers</primary></indexterm>
|
---|
312 | It is possible to configure CUPS, Samba, and your Windows clients in the
|
---|
313 | same traditional and simple way. When CUPS printers are configured
|
---|
314 | for raw print-through mode operation, it is the responsibility of the
|
---|
315 | Samba client to fully render the print job (file). The file must be
|
---|
316 | sent in a format that is suitable for direct delivery to the
|
---|
317 | printer. Clients need to run the vendor-provided drivers to do
|
---|
318 | this. In this case, CUPS will not do any print file format conversion
|
---|
319 | work.
|
---|
320 | </para>
|
---|
321 |
|
---|
322 | <para>
|
---|
323 | The easiest printing configuration possible is raw print-through.
|
---|
324 | This is achieved by installation of the printer as if it were physically
|
---|
325 | attached to the Windows client. You then redirect output to a raw network
|
---|
326 | print queue. This procedure may be followed to achieve this:
|
---|
327 | </para>
|
---|
328 |
|
---|
329 | <procedure>
|
---|
330 | <title>Configuration Steps for Raw CUPS Printing Support</title>
|
---|
331 |
|
---|
332 | <step><para>
|
---|
333 | <indexterm><primary>/etc/cups/mime.types</primary></indexterm>
|
---|
334 | Edit <filename>/etc/cups/mime.types</filename> to uncomment the line
|
---|
335 | near the end of the file that has:
|
---|
336 | <screen>
|
---|
337 | #application/octet-...
|
---|
338 | </screen>
|
---|
339 | </para></step>
|
---|
340 |
|
---|
341 | <step><para>
|
---|
342 | <indexterm><primary>/etc/cups/mime.convs</primary></indexterm>
|
---|
343 | Do the same for the file <filename>/etc/cups/mime.convs</filename>.
|
---|
344 | </para></step>
|
---|
345 |
|
---|
346 | <step><para>
|
---|
347 | Add a raw printer using the Web interface. Point your browser at
|
---|
348 | <constant>http://localhost:631</constant>. Enter Administration, and add
|
---|
349 | the printer following the prompts. Do not install any drivers for it.
|
---|
350 | Choose Raw. Choose queue name <constant>Raw Queue</constant>.
|
---|
351 | </para></step>
|
---|
352 |
|
---|
353 | <step><para>
|
---|
354 | In the &smb.conf; file <constant>[printers]</constant> section add
|
---|
355 | <smbconfoption name="use client driver">Yes</smbconfoption>,
|
---|
356 | and in the <constant>[global]</constant> section add
|
---|
357 | <smbconfoption name="printing">CUPS</smbconfoption>, plus
|
---|
358 | <smbconfoption name="printcap">CUPS</smbconfoption>.
|
---|
359 | </para></step>
|
---|
360 |
|
---|
361 | <step><para>
|
---|
362 | Install the printer as if it is a local printer, that is, Printing to <constant>LPT1:</constant>.
|
---|
363 | </para></step>
|
---|
364 |
|
---|
365 | <step><para>
|
---|
366 | Edit the configuration under the <guimenu>Detail</guimenu> tab and create a
|
---|
367 | <constant>local port</constant> that points to the raw printer queue that
|
---|
368 | you have configured above. Example: <constant>\\server\raw_q</constant>.
|
---|
369 | Here, the name <constant>raw_q</constant> is the name you gave the print
|
---|
370 | queue in the CUPS environment.
|
---|
371 | </para></step>
|
---|
372 | </procedure>
|
---|
373 |
|
---|
374 | </sect2>
|
---|
375 |
|
---|
376 | <sect2>
|
---|
377 | <title>Installation of Windows Client Drivers</title>
|
---|
378 |
|
---|
379 | <para>
|
---|
380 | The printer drivers on the Windows clients may be installed
|
---|
381 | in two functionally different ways:
|
---|
382 | </para>
|
---|
383 |
|
---|
384 | <itemizedlist>
|
---|
385 | <listitem><para>Manually install the drivers locally on each client,
|
---|
386 | one by one; this yields the old LanMan style
|
---|
387 | printing and uses a <filename>\\sambaserver\printershare</filename>
|
---|
388 | type of connection.</para></listitem>
|
---|
389 |
|
---|
390 |
|
---|
391 | <listitem><para>
|
---|
392 | <indexterm><primary>point 'n' print</primary></indexterm>
|
---|
393 | Deposit and prepare the drivers (for later download) on
|
---|
394 | the print server (Samba); this enables the clients to use
|
---|
395 | <quote>Point'n'Print</quote> to get drivers semi-automatically installed the
|
---|
396 | first time they access the printer; with this method NT/200x/XP
|
---|
397 | clients use the <emphasis>SPOOLSS/MS-RPC</emphasis>
|
---|
398 | type printing calls.</para></listitem>
|
---|
399 | </itemizedlist>
|
---|
400 |
|
---|
401 | <para>
|
---|
402 | The second method is recommended for use over the first as it reduces the
|
---|
403 | administrative efforts and prevents that different versions of the drivers
|
---|
404 | are used accidentally.
|
---|
405 | </para>
|
---|
406 | </sect2>
|
---|
407 |
|
---|
408 | <sect2 id="cups-raw">
|
---|
409 | <title>Explicitly Enable <quote>raw</quote> Printing for <emphasis>application/octet-stream</emphasis></title>
|
---|
410 |
|
---|
411 |
|
---|
412 | <para>
|
---|
413 | <indexterm><primary>application/octet-stream</primary></indexterm>
|
---|
414 | <indexterm><primary>raw printing</primary></indexterm>
|
---|
415 | <indexterm><primary>MIME</primary><secondary>raw</secondary></indexterm>
|
---|
416 | If you use the first option (drivers are installed on the client
|
---|
417 | side), there is one setting to take care of: CUPS needs to be told
|
---|
418 | that it should allow <quote>raw</quote> printing of deliberate (binary) file
|
---|
419 | formats. The CUPS files that need to be correctly set for raw mode
|
---|
420 | printers to work are:
|
---|
421 | </para>
|
---|
422 |
|
---|
423 | <itemizedlist>
|
---|
424 | <listitem><para><filename>/etc/cups/mime.types</filename></para></listitem>
|
---|
425 | <listitem><para><filename>/etc/cups/mime.convs</filename></para></listitem>
|
---|
426 | </itemizedlist>
|
---|
427 |
|
---|
428 | <para>
|
---|
429 | Both contain entries (at the end of the respective files) that must be uncommented to allow RAW mode
|
---|
430 | operation. In <filename>/etc/cups/mime.types</filename>, make sure this line is present:
|
---|
431 | <programlisting>
|
---|
432 | application/octet-stream
|
---|
433 | </programlisting>
|
---|
434 | <indexterm><primary>/etc/cups/mime.convs</primary></indexterm>
|
---|
435 | <indexterm><primary>/etc/cups/mime.types</primary></indexterm>
|
---|
436 | In <filename>/etc/cups/mime.convs</filename>, have this line:
|
---|
437 | <indexterm><primary>application/vnd.cups-raw</primary></indexterm>
|
---|
438 | <programlisting>
|
---|
439 | application/octet-stream application/vnd.cups-raw 0 -
|
---|
440 | </programlisting>
|
---|
441 | If these two files are not set up correctly for raw Windows client
|
---|
442 | printing, you may encounter the dreaded <computeroutput>Unable to
|
---|
443 | convert file 0</computeroutput> in your CUPS <filename>error_log</filename> file.
|
---|
444 | </para>
|
---|
445 |
|
---|
446 | <note><para>
|
---|
447 | Editing the <filename>mime.convs</filename> and the <filename>mime.types</filename> file does
|
---|
448 | not <emphasis>enforce</emphasis> <quote>raw</quote> printing, it only <emphasis>allows</emphasis> it.
|
---|
449 | </para></note>
|
---|
450 |
|
---|
451 | <formalpara><title>Background</title>
|
---|
452 |
|
---|
453 | <para>
|
---|
454 | <indexterm><primary>application/octet-stream</primary></indexterm>
|
---|
455 | <indexterm><primary>MIME type</primary></indexterm>
|
---|
456 | That CUPS is a more security-aware printing system than traditional ones does not by default allow a user to
|
---|
457 | send deliberate (possibly binary) data to printing devices. This could be easily abused to launch a
|
---|
458 | <quote>Denial of Service</quote> attack on your printer(s), causing at least the loss of a lot of paper and
|
---|
459 | ink. <quote>Unknown</quote> data are tagged by CUPS as <parameter>MIME type: application/octet-stream</parameter>
|
---|
460 | and not allowed to go to the printer. By default, you can only send other (known) MIME types <quote>raw.</quote>
|
---|
461 | Sending data <quote>raw</quote> means that CUPS does not try to convert them and passes them to the printer
|
---|
462 | untouched.
|
---|
463 | </para>
|
---|
464 | </formalpara>
|
---|
465 |
|
---|
466 | <para>
|
---|
467 | This is all you need to know to get the CUPS/Samba combo printing
|
---|
468 | <quote>raw</quote> files prepared by Windows clients, which have vendor drivers
|
---|
469 | locally installed. If you are not interested in background information about
|
---|
470 | more advanced CUPS/Samba printing, simply skip the remaining sections
|
---|
471 | of this chapter.
|
---|
472 | </para>
|
---|
473 |
|
---|
474 | </sect2>
|
---|
475 |
|
---|
476 | <sect2>
|
---|
477 | <title>Driver Upload Methods</title>
|
---|
478 |
|
---|
479 | <para>
|
---|
480 | This section describes three familiar methods, plus one new one, by which
|
---|
481 | printer drivers may be uploaded.
|
---|
482 | </para>
|
---|
483 |
|
---|
484 | <para>
|
---|
485 | <indexterm><primary>point'n'print</primary></indexterm>
|
---|
486 | If you want to use the MS-RPC-type printing, you must upload the
|
---|
487 | drivers onto the Samba server first (<smbconfsection name="[print$]"/>
|
---|
488 | share). For a discussion on how to deposit printer drivers on the
|
---|
489 | Samba host (so the Windows clients can download and use them via
|
---|
490 | <quote>Point'n'Print</quote>), please refer to the <link linkend="classicalprinting">Classical Printing
|
---|
491 | chapter</link> of this book. There you will find a description or reference to
|
---|
492 | three methods of preparing the client drivers on the Samba server:
|
---|
493 | </para>
|
---|
494 |
|
---|
495 | <itemizedlist>
|
---|
496 | <listitem><para>
|
---|
497 | <indexterm><primary>add printer wizard</primary></indexterm>
|
---|
498 | The GUI, <quote>Add Printer Wizard</quote> <emphasis>upload-from-a-Windows-client</emphasis> method.
|
---|
499 | </para></listitem>
|
---|
500 |
|
---|
501 | <listitem><para>
|
---|
502 | The command line, <quote>smbclient/rpcclient</quote> upload-from-a-UNIX-workstation method.
|
---|
503 | </para></listitem>
|
---|
504 |
|
---|
505 | <listitem><para>
|
---|
506 | <indexterm><primary>imprints</primary></indexterm>
|
---|
507 | The Imprints tool set method.
|
---|
508 | </para></listitem>
|
---|
509 | </itemizedlist>
|
---|
510 |
|
---|
511 | <para>
|
---|
512 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
513 | These three methods apply to CUPS all the same. The <command>cupsaddsmb</command> utility is a new and more
|
---|
514 | convenient way to load the Windows drivers into Samba and is provided if you use CUPS.
|
---|
515 | </para>
|
---|
516 |
|
---|
517 | <para>
|
---|
518 | <command>cupsaddsmb</command> is discussed in much detail later in this chapter. But we first
|
---|
519 | explore the CUPS filtering system and compare the Windows and UNIX printing architectures.
|
---|
520 | </para>
|
---|
521 |
|
---|
522 | </sect2>
|
---|
523 |
|
---|
524 | </sect1>
|
---|
525 |
|
---|
526 | <sect1>
|
---|
527 | <title>Advanced Intelligent Printing with PostScript Driver Download</title>
|
---|
528 |
|
---|
529 | <para>
|
---|
530 | <indexterm><primary>PostScript</primary><seealso>Ghostscript</seealso></indexterm>
|
---|
531 | We now know how to set up a <quote>dump</quote> print server, that is, a server that spools
|
---|
532 | print jobs <quote>raw</quote>, leaving the print data untouched.
|
---|
533 | </para>
|
---|
534 |
|
---|
535 | <para>
|
---|
536 | You might need to set up CUPS in a smarter way. The reasons could be manifold:
|
---|
537 | </para>
|
---|
538 |
|
---|
539 | <indexterm><primary>print statistics</primary></indexterm>
|
---|
540 | <indexterm><primary>average print run</primary></indexterm>
|
---|
541 | <indexterm><primary>print quota</primary></indexterm>
|
---|
542 | <itemizedlist>
|
---|
543 | <listitem><para>Maybe your boss wants to get monthly statistics: Which
|
---|
544 | printer did how many pages? What was the average data size of a job?
|
---|
545 | What was the average print run per day? What are the typical hourly
|
---|
546 | peaks in printing? Which department prints how much?</para></listitem>
|
---|
547 |
|
---|
548 | <listitem><para>Maybe you are asked to set up a print quota system:
|
---|
549 | Users should not be able to print more jobs once they have surpassed
|
---|
550 | a given limit per period.</para></listitem>
|
---|
551 |
|
---|
552 | <listitem><para>Maybe your previous network printing setup is a mess
|
---|
553 | and must be re-organized from a clean beginning.</para></listitem>
|
---|
554 |
|
---|
555 | <listitem><para>Maybe you are experiencing too many <quote>blue screens</quote>
|
---|
556 | originating from poorly debugged printer drivers running in NT <quote>kernel mode</quote>?</para></listitem>
|
---|
557 | </itemizedlist>
|
---|
558 |
|
---|
559 | <para>
|
---|
560 | These goals cannot be achieved by a raw print server. To build a
|
---|
561 | server meeting these requirements, you'll first need to learn
|
---|
562 | how CUPS works and how you can enable its features.
|
---|
563 | </para>
|
---|
564 |
|
---|
565 | <para>
|
---|
566 | What follows is the comparison of some fundamental concepts for
|
---|
567 | Windows and UNIX printing, then a description of the
|
---|
568 | CUPS filtering system, how it works, and how you can tweak it.
|
---|
569 | </para>
|
---|
570 |
|
---|
571 | <sect2 id="gdipost">
|
---|
572 | <title>GDI on Windows, PostScript on UNIX</title>
|
---|
573 |
|
---|
574 | <para>
|
---|
575 | <indexterm><primary>GDI</primary></indexterm>
|
---|
576 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
577 | Network printing is one of the most complicated and error-prone
|
---|
578 | day-to-day tasks any user or administrator may encounter. This is
|
---|
579 | true for all OS platforms, and there are reasons it is so.
|
---|
580 | </para>
|
---|
581 |
|
---|
582 |
|
---|
583 | <para>
|
---|
584 | <indexterm><primary>PCL</primary></indexterm>
|
---|
585 | <indexterm><primary>PDL</primary></indexterm>
|
---|
586 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
587 | <indexterm><primary>Adobe</primary></indexterm>
|
---|
588 | <indexterm><primary>page description languages</primary><see>PDL</see></indexterm>
|
---|
589 | You can't expect to throw just any file format at a printer and have it get printed. A file format conversion
|
---|
590 | must take place. The problem is that there is no common standard for print file formats across all
|
---|
591 | manufacturers and printer types. While PostScript (trademark held by Adobe) and, to an extent, PCL (trademark
|
---|
592 | held by Hewlett-Packard) have developed into semi-official <quote>standards</quote> by being the most widely
|
---|
593 | used page description languages (PDLs), there are still many manufacturers who <quote>roll their own</quote>
|
---|
594 | (their reasons may be unacceptable license fees for using printer-embedded PostScript interpreters, and so on).
|
---|
595 | </para>
|
---|
596 |
|
---|
597 | </sect2>
|
---|
598 |
|
---|
599 | <sect2>
|
---|
600 | <title>Windows Drivers, GDI, and EMF</title>
|
---|
601 |
|
---|
602 | <para>
|
---|
603 | <indexterm><primary>GDI</primary></indexterm>
|
---|
604 | <indexterm><primary>EMF</primary></indexterm>
|
---|
605 | <indexterm><primary>WYSIWYG</primary></indexterm>
|
---|
606 | <indexterm><primary>Enhanced MetaFile</primary><see>EMF</see></indexterm>
|
---|
607 | In Windows OS, the format conversion job is done by the printer drivers. On MS Windows OS platforms all
|
---|
608 | application programmers have at their disposal a built-in API, the graphical device interface (GDI), as part
|
---|
609 | and parcel of the OS itself to base themselves on. This GDI core is used as one common unified ground for all
|
---|
610 | Windows programs to draw pictures, fonts, and documents <emphasis>on screen</emphasis> as well as <emphasis>on
|
---|
611 | paper</emphasis> (print). Therefore, printer driver developers can standardize on a well-defined GDI output
|
---|
612 | for their own driver input. Achieving WYSIWYG (What You See Is What You Get) is relatively easy, because the
|
---|
613 | on-screen graphic primitives, as well as the on-paper drawn objects, come from one common source. This source,
|
---|
614 | the GDI, often produces a file format called Enhanced MetaFile (EMF). The EMF is processed by the printer
|
---|
615 | driver and converted to the printer-specific file format.
|
---|
616 | </para>
|
---|
617 |
|
---|
618 | <note><para>
|
---|
619 | <indexterm><primary>PDF</primary></indexterm>
|
---|
620 | <indexterm><primary>Xprint</primary></indexterm>
|
---|
621 | <indexterm><primary>core graphic engine</primary></indexterm>
|
---|
622 | To the GDI foundation in MS Windows, Apple has chosen to put paper and screen output on a common foundation
|
---|
623 | for its (BSD-UNIX-based, did you know?) Mac OS X and Darwin operating <indexterm><primary>X Window
|
---|
624 | System</primary></indexterm> <indexterm><primary>PostScript</primary></indexterm>
|
---|
625 | <indexterm><primary>PCL</primary></indexterm> <indexterm><primary>Xprint</primary></indexterm> systems.
|
---|
626 | Apple's <emphasis>core graphic engine</emphasis> uses a <emphasis>PDF</emphasis> derivative for all display work.
|
---|
627 | </para></note>
|
---|
628 |
|
---|
629 | <para>
|
---|
630 | The example in <link linkend="f1small">Windows Printing to a Local Printer</link> illustrates local Windows
|
---|
631 | printing.
|
---|
632 | </para>
|
---|
633 |
|
---|
634 | <figure id="f1small">
|
---|
635 | <title>Windows Printing to a Local Printer.</title>
|
---|
636 | <imagefile>1small</imagefile>
|
---|
637 | </figure>
|
---|
638 |
|
---|
639 | </sect2>
|
---|
640 |
|
---|
641 | <sect2>
|
---|
642 | <title>UNIX Printfile Conversion and GUI Basics</title>
|
---|
643 |
|
---|
644 | <para>
|
---|
645 | <indexterm><primary>X Window System</primary></indexterm>
|
---|
646 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
647 | <indexterm><primary>PCL</primary></indexterm>
|
---|
648 | <indexterm><primary>Xprint</primary></indexterm>
|
---|
649 | In UNIX and Linux, there is no comparable layer built into the OS kernel(s) or the X (screen display) server.
|
---|
650 | Every application is responsible for itself to create its print output. Fortunately, most use PostScript and
|
---|
651 | that at least gives some common ground. Unfortunately, there are many different levels of quality for this
|
---|
652 | PostScript. And worse, there is a huge difference (and no common root) in the way the same document is
|
---|
653 | displayed on screen and how it is presented on paper. WYSIWYG is more difficult to achieve. This goes back to
|
---|
654 | the time, decades ago, when the predecessors of X.org, designing the UNIX foundations and protocols for
|
---|
655 | graphical user interfaces, refused to take responsibility for <quote>paper output</quote>, as some had
|
---|
656 | demanded at the time, and restricted itself to <quote>on-screen only.</quote> (For some years now, the
|
---|
657 | <quote>Xprint</quote> project has been under development, attempting to build printing support into the X
|
---|
658 | framework, including a PostScript and a PCL driver, but it is not yet ready for prime time.) You can see this
|
---|
659 | unfavorable inheritance up to the present day by looking into the various <quote>font</quote> directories on
|
---|
660 | your system; there are separate ones for fonts used for X display and fonts to be used on paper.
|
---|
661 | </para>
|
---|
662 |
|
---|
663 | <formalpara>
|
---|
664 | <title>Background</title>
|
---|
665 |
|
---|
666 | <para>
|
---|
667 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
668 | <indexterm><primary>color</primary></indexterm>
|
---|
669 | <indexterm><primary>linewidth</primary></indexterm>
|
---|
670 | <indexterm><primary>scale</primary></indexterm>
|
---|
671 | <indexterm><primary>distort</primary></indexterm>
|
---|
672 | <indexterm><primary>rotate</primary></indexterm>
|
---|
673 | <indexterm><primary>shift</primary></indexterm>
|
---|
674 | <indexterm><primary>raster images</primary></indexterm>
|
---|
675 | <indexterm><primary>display PostScript</primary></indexterm>
|
---|
676 | <indexterm><primary>graphical objects</primary></indexterm>
|
---|
677 | The PostScript programming language is an <quote>invention</quote> by Adobe, but its specifications have been
|
---|
678 | published extensively. Its strength lies in its powerful abilities to describe graphical objects (fonts,
|
---|
679 | shapes, patterns, lines, curves, and dots), their attributes (color, linewidth), and the way to manipulate
|
---|
680 | (scale, distort, rotate, shift) them. Because of its open specification, anybody with the skill can start
|
---|
681 | writing his or her own implementation of a PostScript interpreter and use it to display PostScript files on
|
---|
682 | screen or on paper. Most graphical output devices are based on the concept of <quote>raster images</quote> or
|
---|
683 | <quote>pixels</quote> (one notable exception is pen plotters). Of course, you can look at a PostScript file in
|
---|
684 | its textual form and you will be reading its PostScript code, the language instructions that need to be
|
---|
685 | interpreted by a rasterizer. Rasterizers produce pixel images, which may be displayed on screen by a viewer
|
---|
686 | program or on paper by a printer.
|
---|
687 | </para>
|
---|
688 | </formalpara>
|
---|
689 | </sect2>
|
---|
690 |
|
---|
691 | <sect2 id="post-and-ghost">
|
---|
692 | <title>PostScript and Ghostscript</title>
|
---|
693 |
|
---|
694 | <para>
|
---|
695 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
696 | <indexterm><primary>GhostScript</primary><seealso>PostScript</seealso></indexterm>
|
---|
697 | <indexterm><primary>PostScript</primary><secondary>RIP</secondary></indexterm>
|
---|
698 | <indexterm><primary>PostScript interpreter</primary></indexterm>
|
---|
699 | <indexterm><primary>raster image processor</primary><see>RIP</see></indexterm>
|
---|
700 | So UNIX is lacking a common ground for printing on paper and displaying on screen. Despite this unfavorable
|
---|
701 | legacy for UNIX, basic printing is fairly easy if you have PostScript printers at your disposal. The reason is
|
---|
702 | that these devices have a built-in PostScript language <quote>interpreter,</quote> also called a raster image
|
---|
703 | processor (RIP), (which makes them more expensive than other types of printers; throw PostScript toward them,
|
---|
704 | and they will spit out your printed pages. The RIP does all the hard work of converting the PostScript drawing
|
---|
705 | commands into a bitmap picture as you see it on paper, in a resolution as done by your printer. This is no
|
---|
706 | different than PostScript printing a file from a Windows origin.
|
---|
707 | </para>
|
---|
708 |
|
---|
709 | <note><para>
|
---|
710 | <indexterm><primary>PPD</primary></indexterm>
|
---|
711 | <indexterm><primary>PPD-aware</primary></indexterm>
|
---|
712 | <indexterm><primary>PostScript Printer Description</primary><see>PPD</see></indexterm>
|
---|
713 | Traditional UNIX programs and printing systems &smbmdash; while using PostScript &smbmdash; are largely not
|
---|
714 | PPD-aware. PPDs are <quote>PostScript Printer Description</quote> files. They enable you to specify and
|
---|
715 | control all options a printer supports: duplexing, stapling, and punching. Therefore, UNIX users for a long
|
---|
716 | time couldn't choose many of the supported device and job options, unlike Windows or Apple users. But now
|
---|
717 | there is CUPS. as illustrated in <link linkend="f2small">Printing to a PostScript Printer</link>.
|
---|
718 | </para>
|
---|
719 | </note>
|
---|
720 |
|
---|
721 | <figure id="f2small">
|
---|
722 | <title>Printing to a PostScript Printer.</title>
|
---|
723 | <imagefile>2small</imagefile>
|
---|
724 | </figure>
|
---|
725 |
|
---|
726 | <para>
|
---|
727 | <indexterm><primary>PDL</primary></indexterm>
|
---|
728 | However, there are other types of printers out there. These do not know how to print PostScript. They use
|
---|
729 | their own PDL, often proprietary. To print to them is much more demanding. Since your UNIX applications mostly
|
---|
730 | produce PostScript, and since these devices do not understand PostScript, you need to convert the print files
|
---|
731 | to a format suitable for your printer on the host before you can send it away.
|
---|
732 | </para>
|
---|
733 |
|
---|
734 | </sect2>
|
---|
735 |
|
---|
736 | <sect2>
|
---|
737 | <title>Ghostscript: The Software RIP for Non-PostScript Printers</title>
|
---|
738 |
|
---|
739 | <para>
|
---|
740 | <indexterm><primary>GhostScript</primary></indexterm>
|
---|
741 | Here is where Ghostscript kicks in. Ghostscript is the traditional (and quite powerful) PostScript interpreter
|
---|
742 | used on UNIX platforms. It is a RIP in software, capable of doing a <emphasis>lot</emphasis> of file format
|
---|
743 | conversions for a very broad spectrum of hardware devices as well as software file formats. Ghostscript
|
---|
744 | technology and drivers are what enable PostScript printing to non-PostScript hardware. This is shown in
|
---|
745 | <link linkend="f3small">Ghostscript as a RIP for Non-PostScript Printers</link>.
|
---|
746 | </para>
|
---|
747 |
|
---|
748 | <figure id="f3small">
|
---|
749 | <title>Ghostscript as a RIP for Non-PostScript Printers.</title>
|
---|
750 | <imagefile>3small</imagefile>
|
---|
751 | </figure>
|
---|
752 |
|
---|
753 | <tip><para>
|
---|
754 | <indexterm><primary>PNG</primary></indexterm>
|
---|
755 | <indexterm><primary>AFPL</primary></indexterm>
|
---|
756 | <indexterm><primary>ESP</primary></indexterm>
|
---|
757 | Use the <quote>gs -h</quote> command to check for all built-in <quote>devices</quote> on your Ghostscript
|
---|
758 | version. If you specify a parameter of <parameter>-sDEVICE=png256</parameter> on your Ghostscript command
|
---|
759 | line, you are asking Ghostscript to convert the input into a PNG file. Naming a <quote>device</quote> on the
|
---|
760 | command line is the most important single parameter to tell Ghostscript exactly how it should render the
|
---|
761 | input. New Ghostscript versions are released at fairly regular intervals, now by artofcode LLC. They are
|
---|
762 | initially put under the <quote>AFPL</quote> license, but re-released under the GNU GPL as soon as the next
|
---|
763 | AFPL version appears. GNU Ghostscript is probably the version installed on most Samba systems. But it has some
|
---|
764 | deficiencies. <indexterm><primary>Ghostscript</primary><secondary>ESP</secondary><see>ESP
|
---|
765 | GhostScript</see></indexterm> Therefore, ESP Ghostscript was developed as an enhancement over GNU Ghostscript,
|
---|
766 | with lots of bug-fixes, additional devices, and improvements. It is jointly maintained by developers from
|
---|
767 | CUPS, Gutenprint, MandrakeSoft, SuSE, Red Hat, and Debian. It includes the <quote>cups</quote> device
|
---|
768 | (essential to print to non-PS printers from CUPS).
|
---|
769 | </para></tip>
|
---|
770 |
|
---|
771 | </sect2>
|
---|
772 |
|
---|
773 | <sect2>
|
---|
774 | <title>PostScript Printer Description (PPD) Specification</title>
|
---|
775 |
|
---|
776 | <para>
|
---|
777 | <indexterm><primary>PPD</primary></indexterm>
|
---|
778 | <indexterm><primary>PDL</primary></indexterm>
|
---|
779 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
780 | While PostScript in essence is a PDL to represent the page layout in a device-independent way, real-world
|
---|
781 | print jobs are always ending up being output on hardware with device-specific features. To take care of all
|
---|
782 | the differences in hardware and to allow for innovations, Adobe has specified a syntax and file format for
|
---|
783 | PostScript Printer Description (PPD) files. Every PostScript printer ships with one of these files.
|
---|
784 | </para>
|
---|
785 |
|
---|
786 | <para>
|
---|
787 | PPDs contain all the information about general and special features of the
|
---|
788 | given printer model: Which different resolutions can it handle? Does
|
---|
789 | it have a duplexing unit? How many paper trays are there? What media
|
---|
790 | types and sizes does it take? For each item, it also names the special
|
---|
791 | command string to be sent to the printer (mostly inside the PostScript
|
---|
792 | file) in order to enable it.
|
---|
793 | </para>
|
---|
794 |
|
---|
795 | <para>
|
---|
796 | Information from these PPDs is meant to be taken into account by the
|
---|
797 | printer drivers. Therefore, installed as part of the Windows
|
---|
798 | PostScript driver for a given printer is the printer's PPD. Where it
|
---|
799 | makes sense, the PPD features are presented in the drivers' UI dialogs
|
---|
800 | to display to the user a choice of print options. In the end, the
|
---|
801 | user selections are somehow written (in the form of special
|
---|
802 | PostScript, PJL, JCL, or vendor-dependent commands) into the PostScript
|
---|
803 | file created by the driver.
|
---|
804 | </para>
|
---|
805 |
|
---|
806 | <warning><para>
|
---|
807 | <indexterm><primary>PDF</primary></indexterm>
|
---|
808 | <indexterm><primary>PDF distilling</primary></indexterm>
|
---|
809 | A PostScript file that was created to contain device-specific commands
|
---|
810 | for achieving a certain print job output (e.g., duplexed, stapled, and
|
---|
811 | punched) on a specific target machine may not print as expected, or
|
---|
812 | may not be printable at all on other models; it also may not be fit
|
---|
813 | for further processing by software (e.g., by a PDF distilling program).
|
---|
814 | </para></warning>
|
---|
815 | </sect2>
|
---|
816 |
|
---|
817 | <sect2>
|
---|
818 | <title>Using Windows-Formatted Vendor PPDs</title>
|
---|
819 |
|
---|
820 | <para>
|
---|
821 | <indexterm><primary>CUPS</primary></indexterm>
|
---|
822 | <indexterm><primary>PPDs</primary></indexterm>
|
---|
823 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
824 | CUPS can handle all spec-compliant PPDs as supplied by the manufacturers for their PostScript models. Even if
|
---|
825 | a vendor does not mention our favorite OS in his or her manuals and brochures, you can safely trust this:
|
---|
826 | <emphasis>If you get the Windows NT version of the PPD, you can use it unchanged in CUPS</emphasis> and thus
|
---|
827 | access the full power of your printer just like a Windows NT user could!
|
---|
828 | </para>
|
---|
829 |
|
---|
830 | <tip><para>
|
---|
831 | To check the spec compliance of any PPD online, go to <ulink noescape="1"
|
---|
832 | url="http://www.cups.org/testppd.php">http://www.cups.org/testppd.php</ulink> and upload your PPD. You will
|
---|
833 | see the results displayed immediately. CUPS in all versions after 1.1.19 has a much stricter internal PPD
|
---|
834 | parsing and checking code enabled; in case of printing trouble, this online resource should be one of your
|
---|
835 | first pit stops.
|
---|
836 | </para></tip>
|
---|
837 |
|
---|
838 | <warning><para>
|
---|
839 | <indexterm><primary>foomatic</primary></indexterm>
|
---|
840 | <indexterm><primary>cupsomatic</primary></indexterm>
|
---|
841 | For real PostScript printers, <emphasis>do not</emphasis> use the <emphasis>Foomatic</emphasis> or
|
---|
842 | <emphasis>cupsomatic</emphasis> PPDs from Linuxprinting.org. With these devices, the original vendor-provided
|
---|
843 | PPDs are always the first choice.
|
---|
844 | </para></warning>
|
---|
845 |
|
---|
846 | <tip><para>
|
---|
847 | <indexterm><primary>W32X86/2</primary></indexterm>
|
---|
848 | If you are looking for an original vendor-provided PPD of a specific device, and you know that an NT4 box (or
|
---|
849 | any other Windows box) on your LAN has the PostScript driver installed, just use <command>smbclient
|
---|
850 | //NT4-box/print\$ -U username</command> to access the Windows directory where all printer driver files are
|
---|
851 | stored. First look in the <filename>W32X86/2</filename> subdirectory for the PPD you are seeking.
|
---|
852 | </para></tip>
|
---|
853 | </sect2>
|
---|
854 |
|
---|
855 | <sect2>
|
---|
856 | <title>CUPS Also Uses PPDs for Non-PostScript Printers</title>
|
---|
857 |
|
---|
858 | <para>
|
---|
859 | <indexterm><primary>non-PostScript</primary></indexterm>
|
---|
860 | <indexterm><primary>PPD</primary></indexterm>
|
---|
861 | <indexterm><primary>CUPS filtering</primary></indexterm>
|
---|
862 | CUPS also uses specially crafted PPDs to handle non-PostScript printers. These PPDs are usually not available
|
---|
863 | from the vendors (and no, you can't just take the PPD of a PostScript printer with the same model name and
|
---|
864 | hope it works for the non-PostScript version too). To understand how these PPDs work for non-PS printers, we
|
---|
865 | first need to dive deeply into the CUPS filtering and file format conversion architecture. Stay tuned.
|
---|
866 | </para>
|
---|
867 |
|
---|
868 | </sect2>
|
---|
869 |
|
---|
870 | </sect1>
|
---|
871 |
|
---|
872 | <sect1>
|
---|
873 | <title>The CUPS Filtering Architecture</title>
|
---|
874 |
|
---|
875 | <para>
|
---|
876 | <indexterm><primary>CUPS filtering</primary></indexterm>
|
---|
877 | <indexterm><primary>Ghostscript</primary></indexterm>
|
---|
878 | <indexterm><primary>MIME type</primary></indexterm>
|
---|
879 | <indexterm><primary>MIME recognition</primary></indexterm>
|
---|
880 | <indexterm><primary>MIME conversion rules</primary></indexterm>
|
---|
881 | The core of the CUPS filtering system is based on Ghostscript. In addition to Ghostscript, CUPS uses some
|
---|
882 | other filters of its own. You (or your OS vendor) may have plugged in even more filters. CUPS handles all data
|
---|
883 | file formats under the label of various MIME types. Every incoming print file is subjected to an initial
|
---|
884 | autotyping. The autotyping determines its given MIME type. A given MIME type implies zero or more possible
|
---|
885 | filtering chains relevant to the selected target printer. This section discusses how MIME types recognition
|
---|
886 | and conversion rules interact. They are used by CUPS to automatically set up a working filtering chain for any
|
---|
887 | given input data format.
|
---|
888 | </para>
|
---|
889 |
|
---|
890 | <para>
|
---|
891 | If CUPS rasterizes a PostScript file natively to a bitmap, this is done in two stages:
|
---|
892 | </para>
|
---|
893 |
|
---|
894 | <itemizedlist>
|
---|
895 | <listitem><para>
|
---|
896 | <indexterm><primary>generic raster format</primary></indexterm>
|
---|
897 | <indexterm><primary>CUPS raster</primary></indexterm>
|
---|
898 | The first stage uses a Ghostscript device named <quote>cups</quote>
|
---|
899 | (this is since version 1.1.15) and produces a generic raster format
|
---|
900 | called <quote>CUPS raster</quote>.
|
---|
901 | </para></listitem>
|
---|
902 |
|
---|
903 | <listitem><para>
|
---|
904 | <indexterm><primary>raster driver</primary></indexterm>
|
---|
905 | The second stage uses a <quote>raster driver</quote> that converts
|
---|
906 | the generic CUPS raster to a device-specific raster.
|
---|
907 | </para></listitem>
|
---|
908 | </itemizedlist>
|
---|
909 |
|
---|
910 | <para>
|
---|
911 | <indexterm><primary>Ghostscript</primary></indexterm>
|
---|
912 | <indexterm><primary>GNU Ghostscript</primary></indexterm>
|
---|
913 | <indexterm><primary>ESP Ghostscript</primary></indexterm>
|
---|
914 | Make sure your Ghostscript version has the <quote>cups</quote> device compiled in (check with <command>gs -h |
|
---|
915 | grep cups</command>). Otherwise you may encounter the dreaded <computeroutput>Unable to convert file
|
---|
916 | 0</computeroutput> in your CUPS error_log file. To have <quote>cups</quote> as a device in your Ghostscript,
|
---|
917 | you either need to patch GNU Ghostscript and recompile or use
|
---|
918 | <indexterm><primary>ESP</primary><secondary>Ghostscript</secondary></indexterm><ulink
|
---|
919 | url="http://www.cups.org/ghostscript.php">ESP Ghostscript</ulink>. The superior alternative is ESP
|
---|
920 | Ghostscript. It supports not just CUPS, but 300 other devices (while GNU Ghostscript supports only about 180).
|
---|
921 | Because of this broad output device support, ESP Ghostscript is the first choice for non-CUPS spoolers, too.
|
---|
922 | It is now recommended by Linuxprinting.org for all spoolers.
|
---|
923 | </para>
|
---|
924 |
|
---|
925 | <para>
|
---|
926 | <indexterm><primary>cupsomatic</primary></indexterm>
|
---|
927 | <indexterm><primary>foomatic</primary></indexterm>
|
---|
928 | <indexterm><primary>foomatic-rip</primary></indexterm>
|
---|
929 | <indexterm><primary>ESP Ghostscript</primary></indexterm>
|
---|
930 | CUPS printers may be set up to use external rendering paths. One of the most common is provided by the
|
---|
931 | Foomatic/cupsomatic concept from <ulink url="http://www.linuxprinting.org/">Linuxprinting.org</ulink>. This
|
---|
932 | uses the classical Ghostscript approach, doing everything in one step. It does not use the
|
---|
933 | <quote>cups</quote> device, but one of the many others. However, even for Foomatic/cupsomatic usage, best
|
---|
934 | results and <indexterm><primary>ESP</primary><secondary>Ghostscript</secondary></indexterm> broadest printer
|
---|
935 | model support is provided by ESP Ghostscript (more about Foomatic/cupsomatic, particularly the new version
|
---|
936 | called now <emphasis>foomatic-rip</emphasis>, follows).
|
---|
937 | </para>
|
---|
938 |
|
---|
939 | <sect2>
|
---|
940 | <title>MIME Types and CUPS Filters</title>
|
---|
941 |
|
---|
942 |
|
---|
943 | <para>
|
---|
944 | <indexterm><primary>MIME</primary><secondary>filters</secondary></indexterm>
|
---|
945 | <indexterm><primary>MIME</primary></indexterm>
|
---|
946 | <indexterm><primary>mime.types</primary></indexterm>
|
---|
947 | <indexterm><primary>application/pdf</primary></indexterm>
|
---|
948 | <indexterm><primary>autotyping</primary></indexterm>
|
---|
949 | CUPS reads the file <filename>/etc/cups/mime.types</filename> (and all other files carrying a
|
---|
950 | <filename>*.types</filename> suffix in the same directory) upon startup. These files contain the MIME type
|
---|
951 | recognition rules that are applied when CUPS runs its autotyping routines. The rule syntax is explained in the
|
---|
952 | man page for <filename>mime.types</filename> and in the comments section of the
|
---|
953 | <filename>mime.types</filename> file itself. A simple rule reads like this:
|
---|
954 | <indexterm><primary>application/pdf</primary></indexterm>
|
---|
955 | <programlisting>
|
---|
956 | application/pdf pdf string(0,%PDF)
|
---|
957 | </programlisting>
|
---|
958 | <indexterm><primary>%PDF</primary></indexterm>
|
---|
959 | <indexterm><primary>.pdf</primary></indexterm>
|
---|
960 | This means if a filename has a <filename>.pdf</filename> suffix or if the magic string
|
---|
961 | <emphasis>%PDF</emphasis> is right at the beginning of the file itself (offset 0 from the start), then it is a
|
---|
962 | PDF file (<parameter>application/pdf</parameter>). Another rule is this:
|
---|
963 | <programlisting>
|
---|
964 | application/postscript ai eps ps string(0,%!) string(0,<04>%!)
|
---|
965 | </programlisting>
|
---|
966 | <indexterm><primary>suffixes</primary></indexterm>
|
---|
967 | <indexterm><primary>.ai</primary></indexterm>
|
---|
968 | <indexterm><primary>.eps</primary></indexterm>
|
---|
969 | <indexterm><primary>.ps</primary></indexterm>
|
---|
970 | <indexterm><primary>generic PostScript</primary></indexterm>
|
---|
971 | <indexterm><primary>application/postscript</primary></indexterm>
|
---|
972 | If the filename has one of the suffixes <filename>.ai</filename>, <filename>.eps</filename>,
|
---|
973 | <filename>.ps</filename>, or if the file itself starts with one of the strings <emphasis>%!</emphasis> or
|
---|
974 | <emphasis><![CDATA[<04>%!]]></emphasis>, it is a generic PostScript file
|
---|
975 | (<parameter>application/postscript</parameter>).
|
---|
976 | </para>
|
---|
977 |
|
---|
978 | <warning><para>
|
---|
979 | <indexterm><primary>/etc/cups/</primary></indexterm>
|
---|
980 | Don't confuse the other mime.types files your system might be using
|
---|
981 | with the one in the <filename>/etc/cups/</filename> directory.
|
---|
982 | </para></warning>
|
---|
983 |
|
---|
984 | <note><para>
|
---|
985 | <indexterm><primary>application/postscript</primary></indexterm>
|
---|
986 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
987 | <indexterm><primary>filter</primary></indexterm>
|
---|
988 | <indexterm><primary>PPD</primary></indexterm>
|
---|
989 | <indexterm><primary>transformation</primary></indexterm>
|
---|
990 | There is an important difference between two similar MIME types in CUPS: one is
|
---|
991 | <parameter>application/postscript</parameter>, the other is
|
---|
992 | <parameter>application/vnd.cups-postscript</parameter>. While <parameter>application/postscript</parameter> is
|
---|
993 | meant to be device-independent, job options for the file are still outside the PS file content, embedded in
|
---|
994 | command line or environment variables by CUPS, <parameter>application/vnd.cups-postscript</parameter> may have
|
---|
995 | the job options inserted into the PostScript data itself (where applicable). The transformation of the generic
|
---|
996 | PostScript (<parameter>application/postscript</parameter>) to the device-specific version
|
---|
997 | (<parameter>application/vnd.cups-postscript</parameter>) is the responsibility of the CUPS
|
---|
998 | <parameter>pstops</parameter> filter. pstops uses information contained in the PPD to do the transformation.
|
---|
999 | </para></note>
|
---|
1000 |
|
---|
1001 | <para>
|
---|
1002 | <indexterm><primary>ASCII</primary></indexterm>
|
---|
1003 | <indexterm><primary>HP-GL</primary></indexterm>
|
---|
1004 | <indexterm><primary>PDF</primary></indexterm>
|
---|
1005 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
1006 | <indexterm><primary>DVI</primary></indexterm>
|
---|
1007 | <indexterm><primary>GIF</primary></indexterm>
|
---|
1008 | <indexterm><primary>PNG</primary></indexterm>
|
---|
1009 | <indexterm><primary>TIFF</primary></indexterm>
|
---|
1010 | <indexterm><primary>JPEG</primary></indexterm>
|
---|
1011 | <indexterm><primary>Photo-CD</primary></indexterm>
|
---|
1012 | <indexterm><primary>SUN-Raster</primary></indexterm>
|
---|
1013 | <indexterm><primary>PNM</primary></indexterm>
|
---|
1014 | <indexterm><primary>PBM</primary></indexterm>
|
---|
1015 | <indexterm><primary>SGI-RGB</primary></indexterm>
|
---|
1016 | <indexterm><primary>MIME</primary></indexterm>
|
---|
1017 | <indexterm><primary>filters</primary></indexterm>
|
---|
1018 | CUPS can handle ASCII text, HP-GL, PDF, PostScript, DVI, and
|
---|
1019 | many image formats (GIF, PNG, TIFF, JPEG, Photo-CD, SUN-Raster,
|
---|
1020 | PNM, PBM, SGI-RGB, and more) and their associated MIME types
|
---|
1021 | with its filters.
|
---|
1022 | </para>
|
---|
1023 |
|
---|
1024 | </sect2>
|
---|
1025 |
|
---|
1026 | <sect2>
|
---|
1027 | <title>MIME Type Conversion Rules</title>
|
---|
1028 |
|
---|
1029 |
|
---|
1030 | <para>
|
---|
1031 | <indexterm><primary>MIME</primary></indexterm>
|
---|
1032 | <indexterm><primary>application/pdf</primary></indexterm>
|
---|
1033 | <indexterm><primary>/etc/cups/mime.convs</primary></indexterm>
|
---|
1034 | <indexterm><primary>application/pdf</primary></indexterm>
|
---|
1035 | <indexterm><primary>application/postscript</primary></indexterm>
|
---|
1036 | CUPS reads the file <filename>/etc/cups/mime.convs</filename>
|
---|
1037 | (and all other files named with a <filename>*.convs</filename>
|
---|
1038 | suffix in the same directory) upon startup. These files contain
|
---|
1039 | lines naming an input MIME type, an output MIME type, a format
|
---|
1040 | conversion filter that can produce the output from the input type,
|
---|
1041 | and virtual costs associated with this conversion. One example line
|
---|
1042 | reads like this:
|
---|
1043 | <programlisting>
|
---|
1044 | application/pdf application/postscript 33 pdftops
|
---|
1045 | </programlisting>
|
---|
1046 | <indexterm><primary>pdftops</primary></indexterm>
|
---|
1047 | This means that the <parameter>pdftops</parameter> filter will take
|
---|
1048 | <parameter>application/pdf</parameter> as input and produce
|
---|
1049 | <parameter>application/postscript</parameter> as output; the virtual
|
---|
1050 | cost of this operation is 33 CUPS-$. The next filter is more
|
---|
1051 | expensive, costing 66 CUPS-$:
|
---|
1052 | <indexterm><primary>pdf</primary></indexterm>
|
---|
1053 | <programlisting>
|
---|
1054 | application/vnd.hp-HPGL application/postscript 66 hpgltops
|
---|
1055 | </programlisting>
|
---|
1056 | <indexterm><primary>hpgltops</primary></indexterm>
|
---|
1057 | This is the <parameter>hpgltops</parameter>, which processes HP-GL
|
---|
1058 | plotter files to PostScript.
|
---|
1059 | <indexterm><primary>application/octet-stream</primary></indexterm>
|
---|
1060 | <programlisting>
|
---|
1061 | application/octet-stream
|
---|
1062 | </programlisting>
|
---|
1063 | Here are two more examples:
|
---|
1064 | <indexterm><primary>text/plain</primary></indexterm>
|
---|
1065 | <indexterm><primary>application/x-shell</primary></indexterm>
|
---|
1066 | <indexterm><primary>text/plain</primary></indexterm>
|
---|
1067 | <indexterm><primary>texttops</primary></indexterm>
|
---|
1068 | <programlisting>
|
---|
1069 | application/x-shell application/postscript 33 texttops
|
---|
1070 | text/plain application/postscript 33 texttops
|
---|
1071 | </programlisting>
|
---|
1072 | <indexterm><primary>application/x-shell</primary></indexterm>
|
---|
1073 | The last two examples name the <parameter>texttops</parameter> filter to work on
|
---|
1074 | <parameter>text/plain</parameter> as well as on <parameter>application/x-shell</parameter>. (Hint: This
|
---|
1075 | differentiation is needed for the syntax highlighting feature of <parameter>texttops</parameter>).
|
---|
1076 | </para>
|
---|
1077 | </sect2>
|
---|
1078 |
|
---|
1079 | <sect2>
|
---|
1080 | <title>Filtering Overview</title>
|
---|
1081 |
|
---|
1082 | <para>
|
---|
1083 | <indexterm><primary>MIME</primary></indexterm>
|
---|
1084 | There are many more combinations named in <filename>mime.convs</filename>. However, you are not limited to use
|
---|
1085 | the ones predefined there. You can plug in any filter you like to the CUPS framework. It must meet, or must be
|
---|
1086 | made to meet, some minimal requirements. If you find (or write) a cool conversion filter of some kind, make
|
---|
1087 | sure it complies with what CUPS needs and put in the right lines in <filename>mime.types</filename> and
|
---|
1088 | <filename>mime.convs</filename>; then it will work seamlessly inside CUPS.
|
---|
1089 | </para>
|
---|
1090 |
|
---|
1091 | <sect3>
|
---|
1092 | <title>Filter Requirements</title>
|
---|
1093 |
|
---|
1094 | <para>
|
---|
1095 | The <quote>CUPS requirements</quote> for filters are simple. Take filenames or <filename>stdin</filename> as
|
---|
1096 | input and write to <filename>stdout</filename>. They should take these arguments:
|
---|
1097 | </para>
|
---|
1098 |
|
---|
1099 | <variablelist>
|
---|
1100 | <varlistentry><term>printer</term>
|
---|
1101 | <listitem><para>
|
---|
1102 | The name of the printer queue (normally this is the name of the filter being run).
|
---|
1103 | </para></listitem>
|
---|
1104 | </varlistentry>
|
---|
1105 |
|
---|
1106 | <varlistentry><term>job</term>
|
---|
1107 | <listitem><para>
|
---|
1108 | The numeric job ID for the job being printed.
|
---|
1109 | </para></listitem>
|
---|
1110 | </varlistentry>
|
---|
1111 |
|
---|
1112 | <varlistentry><term>user</term>
|
---|
1113 | <listitem><para>
|
---|
1114 | The string from the originating-user-name attribute.
|
---|
1115 | </para></listitem>
|
---|
1116 | </varlistentry>
|
---|
1117 |
|
---|
1118 | <varlistentry><term>title</term>
|
---|
1119 | <listitem><para>
|
---|
1120 | The string from the job-name attribute.
|
---|
1121 | </para></listitem>
|
---|
1122 | </varlistentry>
|
---|
1123 |
|
---|
1124 | <varlistentry><term>copies</term>
|
---|
1125 | <listitem><para>
|
---|
1126 | The numeric value from the number-copies attribute.
|
---|
1127 | </para></listitem>
|
---|
1128 | </varlistentry>
|
---|
1129 |
|
---|
1130 | <varlistentry><term>options</term>
|
---|
1131 | <listitem><para>
|
---|
1132 | The job options.
|
---|
1133 | </para></listitem>
|
---|
1134 | </varlistentry>
|
---|
1135 |
|
---|
1136 | <varlistentry><term>filename</term>
|
---|
1137 | <listitem><para>
|
---|
1138 | (optionally) The print request file (if missing, filters expect data
|
---|
1139 | fed through <filename>stdin</filename>). In most cases, it is easy to
|
---|
1140 | write a simple wrapper script around existing filters to make them work with CUPS.
|
---|
1141 | </para></listitem>
|
---|
1142 | </varlistentry>
|
---|
1143 | </variablelist>
|
---|
1144 |
|
---|
1145 | </sect3>
|
---|
1146 |
|
---|
1147 | </sect2>
|
---|
1148 |
|
---|
1149 | <sect2>
|
---|
1150 | <title>Prefilters</title>
|
---|
1151 |
|
---|
1152 | <para>
|
---|
1153 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
1154 | <indexterm><primary>non-PostScript printers</primary></indexterm>
|
---|
1155 | <indexterm><primary>raster</primary></indexterm>
|
---|
1156 | As previously stated, PostScript is the central file format to any UNIX-based
|
---|
1157 | printing system. From PostScript, CUPS generates raster data to feed
|
---|
1158 | non-PostScript printers.
|
---|
1159 | </para>
|
---|
1160 |
|
---|
1161 | <para>
|
---|
1162 | <indexterm><primary>prefilters</primary></indexterm>
|
---|
1163 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
1164 | <indexterm><primary>ASCII text</primary></indexterm>
|
---|
1165 | <indexterm><primary>PDF</primary></indexterm>
|
---|
1166 | <indexterm><primary>DVI</primary></indexterm>
|
---|
1167 | <indexterm><primary>HP-GL.</primary></indexterm>
|
---|
1168 | <indexterm><primary>MIME type</primary></indexterm>
|
---|
1169 | <indexterm><primary>application/postscript</primary></indexterm>
|
---|
1170 | <indexterm><primary>pstops</primary></indexterm>
|
---|
1171 | <indexterm><primary>application/vnd.cups-postscript</primary></indexterm>
|
---|
1172 | But what happens if you send one of the supported non-PS formats to print? Then CUPS runs
|
---|
1173 | <quote>prefilters</quote> on these input formats to generate PostScript first. There are prefilters to create
|
---|
1174 | PostScript from ASCII text, PDF, DVI, or HP-GL. The outcome of these filters is always of MIME type
|
---|
1175 | <parameter>application/postscript</parameter> (meaning that any device-specific print options are not yet
|
---|
1176 | embedded into the PostScript by CUPS and that the next filter to be called is pstops). Another prefilter is
|
---|
1177 | running on all supported image formats, the <parameter>imagetops</parameter> filter. Its outcome is always of
|
---|
1178 | MIME type <parameter>application/vnd.cups-postscript</parameter> (not application/postscript), meaning it has
|
---|
1179 | the print options already embedded into the file. This is shown in <link linkend="f4small">Prefiltering in
|
---|
1180 | CUPS to Form PostScript</link>.
|
---|
1181 | </para>
|
---|
1182 |
|
---|
1183 | <figure id="f4small">
|
---|
1184 | <title>Prefiltering in CUPS to Form PostScript.</title>
|
---|
1185 | <imagefile scale="25">4small</imagefile>
|
---|
1186 | </figure>
|
---|
1187 |
|
---|
1188 | </sect2>
|
---|
1189 |
|
---|
1190 | <sect2>
|
---|
1191 | <title>pstops</title>
|
---|
1192 |
|
---|
1193 | <para>
|
---|
1194 | <indexterm><primary>pstops</primary></indexterm>
|
---|
1195 | <indexterm><primary>application/postscript</primary></indexterm>
|
---|
1196 | <indexterm><primary>application/vnd.cups-postscript</primary></indexterm>
|
---|
1197 | <indexterm><primary>output duplexing</primary></indexterm>
|
---|
1198 | <indexterm><primary>stapling</primary></indexterm>
|
---|
1199 | <indexterm><primary>punching</primary></indexterm>
|
---|
1200 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
1201 | <emphasis>pstops</emphasis> is a filter that is used to convert <parameter>application/postscript</parameter> to
|
---|
1202 | <parameter>application/vnd.cups-postscript</parameter>. As stated earlier, this filter inserts all
|
---|
1203 | device-specific print options (commands to the printer to ask for the duplexing of output, or stapling and
|
---|
1204 | punching it, and so on) into the PostScript file. An example is illustrated in <link
|
---|
1205 | linkend="f5small">Adding Device-Specific Print Options</link>.
|
---|
1206 | </para>
|
---|
1207 |
|
---|
1208 | <figure id="f5small">
|
---|
1209 | <title>Adding Device-Specific Print Options.</title>
|
---|
1210 | <imagefile scale="25">5small</imagefile>
|
---|
1211 | </figure>
|
---|
1212 |
|
---|
1213 | <para>
|
---|
1214 | This is not all. Other tasks performed by it are:
|
---|
1215 | </para>
|
---|
1216 |
|
---|
1217 | <itemizedlist>
|
---|
1218 | <listitem><para>
|
---|
1219 | Selecting the range of pages to be printed (e.g., you can choose to
|
---|
1220 | print only pages <quote>3, 6, 8-11, 16, and 19-21</quote>, or only odd-numbered
|
---|
1221 | pages).
|
---|
1222 | </para></listitem>
|
---|
1223 |
|
---|
1224 | <listitem><para>
|
---|
1225 | Putting two or more logical pages on one sheet of paper (the
|
---|
1226 | so-called <quote>number-up</quote> function).
|
---|
1227 | </para></listitem>
|
---|
1228 |
|
---|
1229 | <listitem><para>Counting the pages of the job to insert the accounting
|
---|
1230 | information into the <filename>/var/log/cups/page_log</filename>.
|
---|
1231 | </para></listitem>
|
---|
1232 | </itemizedlist>
|
---|
1233 | </sect2>
|
---|
1234 |
|
---|
1235 | <sect2>
|
---|
1236 | <title>pstoraster</title>
|
---|
1237 |
|
---|
1238 | <para>
|
---|
1239 | <indexterm><primary>pstoraster</primary></indexterm>
|
---|
1240 | <indexterm><primary>rasterization</primary></indexterm>
|
---|
1241 | <indexterm><primary>raster drivers</primary></indexterm>
|
---|
1242 | <parameter>pstoraster</parameter> is at the core of the CUPS filtering system. It is responsible for the first
|
---|
1243 | stage of the rasterization process. Its input is of MIME type application/vnd.cups-postscript; its output is
|
---|
1244 | application/vnd.cups-raster. This output format is not yet meant to be printable. Its aim is to serve as a
|
---|
1245 | general-purpose input format for more specialized <emphasis>raster drivers</emphasis> that are able to
|
---|
1246 | generate device-specific printer data. This is shown in <link linkend="cups-raster">the PostScript to
|
---|
1247 | Intermediate Raster Format diagram</link>.
|
---|
1248 | </para>
|
---|
1249 |
|
---|
1250 | <figure id="cups-raster">
|
---|
1251 | <title>PostScript to Intermediate Raster Format.</title>
|
---|
1252 | <imagefile scale="25">6small</imagefile>
|
---|
1253 | </figure>
|
---|
1254 |
|
---|
1255 | <para>
|
---|
1256 | <indexterm><primary>CUPS raster</primary></indexterm>
|
---|
1257 | <indexterm><primary>generic raster</primary></indexterm>
|
---|
1258 | <indexterm><primary>IANA</primary></indexterm>
|
---|
1259 | <indexterm><primary>raster drivers</primary></indexterm>
|
---|
1260 | CUPS raster is a generic raster format with powerful features. It is able to include per-page information,
|
---|
1261 | color profiles, and more, to be used by the downstream raster drivers. Its MIME type is registered with IANA
|
---|
1262 | and its specification is, of course, completely open. It is designed to make it quite easy and inexpensive for
|
---|
1263 | manufacturers to develop Linux and UNIX raster drivers for their printer models should they choose to do so.
|
---|
1264 | CUPS always takes care of the first stage of rasterization so these vendors do not need to care about
|
---|
1265 | Ghostscript complications (in fact, there are currently more than one vendor financing the development of CUPS
|
---|
1266 | raster drivers). This is illustrated in <link linkend="cups-raster2">the CUPS-Raster Production Using
|
---|
1267 | Ghostscript illustration</link>.
|
---|
1268 | </para>
|
---|
1269 |
|
---|
1270 | <figure id="cups-raster2">
|
---|
1271 | <title>CUPS-Raster Production Using Ghostscript.</title>
|
---|
1272 | <imagefile>7small</imagefile>
|
---|
1273 | </figure>
|
---|
1274 |
|
---|
1275 | <para>
|
---|
1276 | <indexterm><primary>pstoraster</primary></indexterm>
|
---|
1277 | <indexterm><primary>GNU Ghostscript</primary></indexterm>
|
---|
1278 | <indexterm><primary>AFPL Ghostscript</primary></indexterm>
|
---|
1279 | <indexterm><primary>standalone filter</primary></indexterm>
|
---|
1280 | CUPS versions before version 1.1.15 shipped a binary (or source code) standalone filter, named
|
---|
1281 | <parameter>pstoraster</parameter>. <parameter>pstoraster</parameter>, which was derived from GNU Ghostscript
|
---|
1282 | 5.50 and could be installed instead of and in addition to any GNU or AFPL Ghostscript package without
|
---|
1283 | conflicting.
|
---|
1284 | </para>
|
---|
1285 |
|
---|
1286 | <para>
|
---|
1287 | Since version 1.1.15, this feature has changed. The functions for this filter have been integrated back
|
---|
1288 | into Ghostscript (now based on GNU Ghostscript version 7.05). The <parameter>pstoraster</parameter> filter is
|
---|
1289 | now a simple shell script calling <command>gs</command> with the <command>-sDEVICE=cups</command> parameter.
|
---|
1290 | If your Ghostscript fails when this command is executed: <command>gs -h |grep cups</command>, you might not
|
---|
1291 | be able to print, update your Ghostscript.
|
---|
1292 | </para>
|
---|
1293 | </sect2>
|
---|
1294 |
|
---|
1295 | <sect2>
|
---|
1296 | <title>imagetops and imagetoraster</title>
|
---|
1297 |
|
---|
1298 | <para>
|
---|
1299 | <indexterm><primary>prefilter</primary></indexterm>
|
---|
1300 | <indexterm><primary>imagetoraster</primary></indexterm>
|
---|
1301 | In the section about prefilters, we mentioned the prefilter
|
---|
1302 | that generates PostScript from image formats. The <parameter>imagetoraster</parameter>
|
---|
1303 | filter is used to convert directly from image to raster, without the
|
---|
1304 | intermediate PostScript stage. It is used more often than the previously
|
---|
1305 | mentioned prefilters. We summarize in a flowchart the image file
|
---|
1306 | filtering in <link linkend="small8">the Image Format to CUPS-Raster Format Conversion illustration</link>.
|
---|
1307 | </para>
|
---|
1308 |
|
---|
1309 | <figure id="small8">
|
---|
1310 | <title>Image Format to CUPS-Raster Format Conversion.</title>
|
---|
1311 | <imagefile>8small</imagefile>
|
---|
1312 | </figure>
|
---|
1313 |
|
---|
1314 | </sect2>
|
---|
1315 |
|
---|
1316 | <sect2>
|
---|
1317 | <title>rasterto [printers specific]</title>
|
---|
1318 |
|
---|
1319 | <para>
|
---|
1320 | <indexterm><primary>rastertoalps</primary></indexterm>
|
---|
1321 | <indexterm><primary>rastertobj</primary></indexterm>
|
---|
1322 | <indexterm><primary>rastertoepson</primary></indexterm>
|
---|
1323 | <indexterm><primary>rastertoescp</primary></indexterm>
|
---|
1324 | <indexterm><primary>rastertopcl</primary></indexterm>
|
---|
1325 | <indexterm><primary>rastertoturboprint</primary></indexterm>
|
---|
1326 | <indexterm><primary>rastertoescp</primary></indexterm>
|
---|
1327 | <indexterm><primary>rastertohp</primary></indexterm>
|
---|
1328 | <indexterm><primary>rastertoprinter</primary></indexterm>
|
---|
1329 | <indexterm><primary>rastertoprinter</primary></indexterm>
|
---|
1330 | <indexterm><primary>Gutenprint</primary></indexterm>
|
---|
1331 | CUPS ships with quite a variety of raster drivers for processing CUPS raster. On my system, I find in
|
---|
1332 | /usr/lib/cups/filter/ the following: <parameter>rastertoalps</parameter>, <parameter>rastertobj</parameter>,
|
---|
1333 | <parameter>rastertoepson</parameter>, <parameter>rastertoescp</parameter>, <parameter>rastertopcl</parameter>,
|
---|
1334 | <parameter>rastertoturboprint</parameter>, <parameter>rastertoapdk</parameter>,
|
---|
1335 | <parameter>rastertodymo</parameter>, <parameter>rastertoescp</parameter>, <parameter>rastertohp</parameter>,
|
---|
1336 | and <parameter>rastertoprinter</parameter>. Don't worry if you have fewer drivers than this; some of these are
|
---|
1337 | installed by commercial add-ons to CUPS (like <parameter>rastertoturboprint</parameter>), and others (like
|
---|
1338 | <parameter>rastertoprinter</parameter>) by third-party driver development projects (such as Gutenprint)
|
---|
1339 | wanting to cooperate as closely as possible with CUPS. See <link linkend="small9">the Raster to
|
---|
1340 | Printer-Specific Formats illustration</link>.
|
---|
1341 | </para>
|
---|
1342 |
|
---|
1343 | <figure id="small9">
|
---|
1344 | <title>Raster to Printer-Specific Formats.</title>
|
---|
1345 | <imagefile>9small</imagefile>
|
---|
1346 | </figure>
|
---|
1347 | </sect2>
|
---|
1348 |
|
---|
1349 | <sect2>
|
---|
1350 | <title>CUPS Backends</title>
|
---|
1351 |
|
---|
1352 | <para>
|
---|
1353 | <indexterm><primary>CUPS filtering chain</primary></indexterm>
|
---|
1354 | <indexterm><primary>print queue</primary></indexterm>
|
---|
1355 | The last part of any CUPS filtering chain is a backend. Backends
|
---|
1356 | are special programs that send the print-ready file to the final
|
---|
1357 | device. There is a separate backend program for any transfer
|
---|
1358 | protocol for sending print jobs over the network, and one for every local
|
---|
1359 | interface. Every CUPS print queue needs to have a CUPS <quote>device-URI</quote>
|
---|
1360 | associated with it. The device URI is the way to encode the backend
|
---|
1361 | used to send the job to its destination. Network device-URIs use
|
---|
1362 | two slashes in their syntax, local device URIs only one, as you can
|
---|
1363 | see from the following list. Keep in mind that local interface names
|
---|
1364 | may vary greatly from my examples, if your OS is not Linux:
|
---|
1365 | </para>
|
---|
1366 |
|
---|
1367 | <variablelist>
|
---|
1368 | <varlistentry><term>usb</term>
|
---|
1369 | <listitem><para>
|
---|
1370 | This backend sends print files to USB-connected printers. An
|
---|
1371 | example for the CUPS device-URI to use is
|
---|
1372 | <filename>usb:/dev/usb/lp0</filename>.
|
---|
1373 | </para></listitem></varlistentry>
|
---|
1374 |
|
---|
1375 | <varlistentry><term>serial</term>
|
---|
1376 | <listitem><para>
|
---|
1377 | This backend sends print files to serially connected printers.
|
---|
1378 | An example for the CUPS device-URI to use is
|
---|
1379 | <filename>serial:/dev/ttyS0?baud=11500</filename>.
|
---|
1380 | </para></listitem></varlistentry>
|
---|
1381 |
|
---|
1382 | <varlistentry><term>parallel</term>
|
---|
1383 | <listitem><para>
|
---|
1384 | This backend sends print files to printers connected to the
|
---|
1385 | parallel port. An example for the CUPS device-URI to use is
|
---|
1386 | <filename>parallel:/dev/lp0</filename>.
|
---|
1387 | </para></listitem></varlistentry>
|
---|
1388 |
|
---|
1389 | <varlistentry><term>SCSI</term>
|
---|
1390 | <listitem><para>
|
---|
1391 | This backend sends print files to printers attached to the
|
---|
1392 | SCSI interface. An example for the CUPS device-URI to use is
|
---|
1393 | <filename>scsi:/dev/sr1</filename>.
|
---|
1394 | </para></listitem></varlistentry>
|
---|
1395 |
|
---|
1396 | <varlistentry><term>lpd</term>
|
---|
1397 | <listitem><para>
|
---|
1398 | This backend sends print files to LPR/LPD-connected network
|
---|
1399 | printers. An example for the CUPS device-URI to use is
|
---|
1400 | <filename>lpd://remote_host_name/remote_queue_name</filename>.
|
---|
1401 | </para></listitem></varlistentry>
|
---|
1402 |
|
---|
1403 | <varlistentry><term>AppSocket/HP JetDirect</term>
|
---|
1404 | <listitem><para>
|
---|
1405 | This backend sends print files to AppSocket (a.k.a., HP
|
---|
1406 | JetDirect) connected network printers. An example for the CUPS
|
---|
1407 | device-URI to use is
|
---|
1408 | <filename>socket://10.11.12.13:9100</filename>.
|
---|
1409 | </para></listitem></varlistentry>
|
---|
1410 |
|
---|
1411 | <varlistentry><term>ipp</term>
|
---|
1412 | <listitem><para>
|
---|
1413 | This backend sends print files to IPP-connected network
|
---|
1414 | printers (or to other CUPS servers). Examples for CUPS device-URIs
|
---|
1415 | to use are
|
---|
1416 | <filename>ipp:://192.193.194.195/ipp</filename>
|
---|
1417 | (for many HP printers) and
|
---|
1418 | <filename>ipp://remote_cups_server/printers/remote_printer_name</filename>.
|
---|
1419 | </para></listitem></varlistentry>
|
---|
1420 |
|
---|
1421 | <varlistentry><term>http</term>
|
---|
1422 | <listitem><para>
|
---|
1423 | This backend sends print files to HTTP-connected printers.
|
---|
1424 | (The http:// CUPS backend is only a symlink to the ipp:// backend.)
|
---|
1425 | Examples for the CUPS device-URIs to use are
|
---|
1426 | <filename>http:://192.193.194.195:631/ipp</filename>
|
---|
1427 | (for many HP printers) and
|
---|
1428 | <filename>http://remote_cups_server:631/printers/remote_printer_name</filename>.
|
---|
1429 | </para></listitem></varlistentry>
|
---|
1430 |
|
---|
1431 | <varlistentry><term>smb</term>
|
---|
1432 | <listitem><para>
|
---|
1433 | This backend sends print files to printers shared by a Windows
|
---|
1434 | host. Examples of CUPS device-URIs that may be used includes:
|
---|
1435 | </para>
|
---|
1436 |
|
---|
1437 | <para>
|
---|
1438 | <simplelist>
|
---|
1439 | <member><filename>smb://workgroup/server/printersharename</filename></member>
|
---|
1440 | <member><filename>smb://server/printersharename</filename></member>
|
---|
1441 | <member><filename>smb://username:password@workgroup/server/printersharename</filename></member>
|
---|
1442 | <member><filename>smb://username:password@server/printersharename</filename></member>
|
---|
1443 | </simplelist>
|
---|
1444 | </para>
|
---|
1445 |
|
---|
1446 | <para>
|
---|
1447 | The smb:// backend is a symlink to the Samba utility
|
---|
1448 | <parameter>smbspool</parameter> (does not ship with CUPS). If the
|
---|
1449 | symlink is not present in your CUPS backend directory, have your
|
---|
1450 | root user create it: <command>ln -s `which smbspool'
|
---|
1451 | /usr/lib/cups/backend/smb</command>.
|
---|
1452 | </para></listitem></varlistentry>
|
---|
1453 | </variablelist>
|
---|
1454 |
|
---|
1455 | <para>
|
---|
1456 | It is easy to write your own backends as shell or Perl scripts if you
|
---|
1457 | need any modification or extension to the CUPS print system. One
|
---|
1458 | reason could be that you want to create <quote>special</quote> printers that send
|
---|
1459 | the print jobs as email (through a <quote>mailto:/</quote> backend), convert them to
|
---|
1460 | PDF (through a <quote>pdfgen:/</quote> backend) or dump them to <quote>/dev/null</quote>. (In
|
---|
1461 | fact, I have the systemwide default printer set up to be connected to
|
---|
1462 | a devnull:/ backend: there are just too many people sending jobs
|
---|
1463 | without specifying a printer, and scripts and programs that do not name
|
---|
1464 | a printer. The systemwide default deletes the job and sends a polite
|
---|
1465 | email back to the $USER asking him or her to always specify the correct
|
---|
1466 | printer name.)
|
---|
1467 | </para>
|
---|
1468 |
|
---|
1469 | <para>
|
---|
1470 | <indexterm><primary>lpinfo</primary></indexterm>
|
---|
1471 | <indexterm><primary>CUPS backends</primary></indexterm>
|
---|
1472 | Not all of the mentioned backends may be present on your system or
|
---|
1473 | usable (depending on your hardware configuration). One test for all
|
---|
1474 | available CUPS backends is provided by the <emphasis>lpinfo</emphasis>
|
---|
1475 | utility. Used with the <option>-v</option> parameter, it lists
|
---|
1476 | all available backends:
|
---|
1477 | </para>
|
---|
1478 |
|
---|
1479 | <para><screen>
|
---|
1480 | &prompt;<userinput>lpinfo -v</userinput>
|
---|
1481 | </screen></para>
|
---|
1482 | </sect2>
|
---|
1483 |
|
---|
1484 | <sect2>
|
---|
1485 | <title>The Role of <parameter>cupsomatic/foomatic</parameter></title>
|
---|
1486 |
|
---|
1487 | <para>
|
---|
1488 | <indexterm><primary>cupsomatic</primary></indexterm>
|
---|
1489 | <indexterm><primary>foomatic</primary></indexterm>
|
---|
1490 | <indexterm><primary>PPDs</primary></indexterm>
|
---|
1491 | <indexterm><primary>Foomatic Printer</primary></indexterm>
|
---|
1492 | <indexterm><primary>Linuxprinting.org</primary></indexterm>
|
---|
1493 | <parameter>cupsomatic</parameter> filters may be the most widely used on CUPS
|
---|
1494 | installations. You must be clear that these were not
|
---|
1495 | developed by the CUPS people. They are a third-party add-on to
|
---|
1496 | CUPS. They utilize the traditional Ghostscript devices to render jobs
|
---|
1497 | for CUPS. When troubleshooting, you should know about the
|
---|
1498 | difference. Here the whole rendering process is done in one stage,
|
---|
1499 | inside Ghostscript, using an appropriate device for the target
|
---|
1500 | printer. <parameter>cupsomatic</parameter> uses PPDs that are generated from the Foomatic
|
---|
1501 | Printer & Driver Database at Linuxprinting.org.
|
---|
1502 | </para>
|
---|
1503 |
|
---|
1504 | <para>
|
---|
1505 | You can recognize these PPDs from the line calling the
|
---|
1506 | <parameter>cupsomatic</parameter> filter:
|
---|
1507 | <programlisting>
|
---|
1508 | *cupsFilter: "application/vnd.cups-postscript 0 cupsomatic"
|
---|
1509 | </programlisting>
|
---|
1510 | You may find this line among the first 40 or so lines of the PPD
|
---|
1511 | file. If you have such a PPD installed, the printer shows up in the
|
---|
1512 | CUPS Web interface with a <parameter>foomatic</parameter> namepart for
|
---|
1513 | the driver description. <parameter>cupsomatic</parameter> is a Perl script that runs
|
---|
1514 | Ghostscript with all the complicated command line options
|
---|
1515 | autoconstructed from the selected PPD and command line options given to
|
---|
1516 | the print job.
|
---|
1517 | </para>
|
---|
1518 |
|
---|
1519 | <para>
|
---|
1520 | <indexterm><primary>point'n'print</primary></indexterm>
|
---|
1521 | <indexterm><primary>foomatic-rip</primary></indexterm>
|
---|
1522 | <indexterm><primary>Adobe specifications</primary></indexterm>
|
---|
1523 | <indexterm><primary>hi-res photo</primary></indexterm>
|
---|
1524 | <indexterm><primary>normal color</primary></indexterm>
|
---|
1525 | <indexterm><primary>grayscale</primary></indexterm>
|
---|
1526 | <indexterm><primary>draft</primary></indexterm>
|
---|
1527 | <indexterm><primary>media type</primary></indexterm>
|
---|
1528 | <indexterm><primary>resolution</primary></indexterm>
|
---|
1529 | <indexterm><primary>inktype</primary></indexterm>
|
---|
1530 | <indexterm><primary>dithering algorithm</primary></indexterm>
|
---|
1531 | However, <parameter>cupsomatic</parameter> is now deprecated. Its PPDs (especially the first
|
---|
1532 | generation of them, still in heavy use out there) are not meeting the
|
---|
1533 | Adobe specifications. You might also suffer difficulties when you try
|
---|
1534 | to download them with <quote>Point'n'Print</quote> to Windows clients. A better
|
---|
1535 | and more powerful successor is now available: it is called <parameter>foomatic-rip</parameter>. To use
|
---|
1536 | <parameter>foomatic-rip</parameter> as a filter with CUPS, you need the new type of PPDs, which
|
---|
1537 | have a similar but different line:
|
---|
1538 | <programlisting>
|
---|
1539 | *cupsFilter: "application/vnd.cups-postscript 0 foomatic-rip"
|
---|
1540 | </programlisting>
|
---|
1541 | The PPD-generating engine at Linuxprinting.org has been revamped.
|
---|
1542 | The new PPDs comply with the Adobe spec. They also provide a
|
---|
1543 | new way to specify different quality levels (hi-res photo, normal
|
---|
1544 | color, grayscale, and draft) with a single click, whereas before you
|
---|
1545 | could have required five or more different selections (media type,
|
---|
1546 | resolution, inktype, and dithering algorithm). There is support for
|
---|
1547 | custom-size media built in. There is support to switch
|
---|
1548 | print options from page to page in the middle of a job. And the
|
---|
1549 | best thing is that the new <constant>foomatic-rip</constant> works seamlessly with all
|
---|
1550 | legacy spoolers too (like LPRng, BSD-LPD, PDQ, PPR, and so on), providing
|
---|
1551 | for them access to use PPDs for their printing.
|
---|
1552 | </para>
|
---|
1553 | </sect2>
|
---|
1554 |
|
---|
1555 | <sect2>
|
---|
1556 | <title>The Complete Picture</title>
|
---|
1557 |
|
---|
1558 | <para>
|
---|
1559 | If you want to see an overview of all the filters and how they
|
---|
1560 | relate to each other, the complete picture of the puzzle is at the end
|
---|
1561 | of this chapter.
|
---|
1562 | </para>
|
---|
1563 | </sect2>
|
---|
1564 |
|
---|
1565 | <sect2>
|
---|
1566 | <title><filename>mime.convs</filename></title>
|
---|
1567 |
|
---|
1568 | <para>
|
---|
1569 | CUPS autoconstructs all possible filtering chain paths for any given
|
---|
1570 | MIME type and every printer installed. But how does it decide in
|
---|
1571 | favor of or against a specific alternative? (There may be cases
|
---|
1572 | where there is a choice of two or more possible filtering chains for
|
---|
1573 | the same target printer.) Simple. You may have noticed the figures in
|
---|
1574 | the third column of the mime.convs file. They represent virtual costs
|
---|
1575 | assigned to this filter. Every possible filtering chain will sum up to
|
---|
1576 | a total <quote>filter cost.</quote> CUPS decides for the most <quote>inexpensive</quote> route.
|
---|
1577 | </para>
|
---|
1578 |
|
---|
1579 | <tip><para>
|
---|
1580 | <indexterm><primary>cupsd.conf</primary></indexterm>
|
---|
1581 | <indexterm><primary>FilterLimit</primary></indexterm>
|
---|
1582 | Setting <parameter>FilterLimit 1000</parameter> in
|
---|
1583 | <filename>cupsd.conf</filename> will not allow more filters to
|
---|
1584 | run concurrently than will consume a total of 1000 virtual filter
|
---|
1585 | cost. This is an efficient way to limit the load of any CUPS
|
---|
1586 | server by setting an appropriate <quote>FilterLimit</quote> value. A FilterLimit of
|
---|
1587 | 200 allows roughly one job at a time, while a FilterLimit of 1000 allows
|
---|
1588 | approximately five jobs maximum at a time.
|
---|
1589 | </para></tip>
|
---|
1590 | </sect2>
|
---|
1591 |
|
---|
1592 | <sect2>
|
---|
1593 | <title><quote>Raw</quote> Printing</title>
|
---|
1594 |
|
---|
1595 | <para>
|
---|
1596 | <indexterm><primary>PPD</primary></indexterm>
|
---|
1597 | <indexterm><primary>lpadmin</primary></indexterm>
|
---|
1598 | <indexterm><primary>rawprinter</primary></indexterm>
|
---|
1599 | You can tell CUPS to print (nearly) any file <quote>raw</quote>. <quote>Raw</quote> means it will not be
|
---|
1600 | filtered. CUPS will send the file to the printer <quote>as is</quote> without bothering if the printer is able
|
---|
1601 | to digest it. Users need to take care themselves that they send sensible data formats only. Raw printing can
|
---|
1602 | happen on any queue if the <quote><parameter>-o raw</parameter></quote> option is specified on the command
|
---|
1603 | line. You can also set up raw-only queues by simply not associating any PPD with it. This command:
|
---|
1604 | <screen>
|
---|
1605 | &prompt;<userinput>lpadmin -P rawprinter -v socket://11.12.13.14:9100 -E</userinput>
|
---|
1606 | </screen>
|
---|
1607 | sets up a queue named <quote>rawprinter</quote>, connected via the <quote>socket</quote> protocol (a.k.a.
|
---|
1608 | <quote>HP JetDirect</quote>) to the device at IP address 11.12.1.3.14, using port 9100. (If you had added a
|
---|
1609 | PPD with <command>-P /path/to/PPD</command> to this command line, you would have installed a
|
---|
1610 | <quote>normal</quote> print queue.)
|
---|
1611 | </para>
|
---|
1612 |
|
---|
1613 | <para>
|
---|
1614 | CUPS will automatically treat each job sent to a queue as a <quote>raw</quote> one
|
---|
1615 | if it can't find a PPD associated with the queue. However, CUPS will
|
---|
1616 | only send known MIME types (as defined in its own mime.types file) and
|
---|
1617 | refuse others.
|
---|
1618 | </para>
|
---|
1619 | </sect2>
|
---|
1620 |
|
---|
1621 | <sect2>
|
---|
1622 | <title>application/octet-stream Printing</title>
|
---|
1623 |
|
---|
1624 | <para>
|
---|
1625 | <indexterm><primary>/etc/cups/mime.types</primary></indexterm>
|
---|
1626 | <indexterm><primary>application/octet-stream</primary></indexterm>
|
---|
1627 | Any MIME type with no rule in the <filename>/etc/cups/mime.types</filename> file is regarded as unknown
|
---|
1628 | or <parameter>application/octet-stream</parameter> and will not be
|
---|
1629 | sent. Because CUPS refuses to print unknown MIME types by default,
|
---|
1630 | you will probably have experienced that print jobs originating
|
---|
1631 | from Windows clients were not printed. You may have found an error
|
---|
1632 | message in your CUPS logs like:
|
---|
1633 | </para>
|
---|
1634 |
|
---|
1635 | <para><computeroutput>
|
---|
1636 | Unable to convert file 0 to printable format for job
|
---|
1637 | </computeroutput></para>
|
---|
1638 |
|
---|
1639 | <para>
|
---|
1640 | To enable the printing of <parameter>application/octet-stream</parameter> files, edit
|
---|
1641 | these two files:
|
---|
1642 | </para>
|
---|
1643 |
|
---|
1644 | <itemizedlist>
|
---|
1645 | <listitem><para><filename>/etc/cups/mime.convs</filename></para></listitem>
|
---|
1646 |
|
---|
1647 | <listitem><para><filename>/etc/cups/mime.types</filename></para></listitem>
|
---|
1648 | </itemizedlist>
|
---|
1649 |
|
---|
1650 | <para>
|
---|
1651 | <indexterm><primary>raw mode</primary></indexterm>
|
---|
1652 | Both contain entries (at the end of the respective files) that must be uncommented to allow raw mode
|
---|
1653 | operation for <parameter>application/octet-stream</parameter>. In <filename>/etc/cups/mime.types</filename>
|
---|
1654 | make sure this line is present:
|
---|
1655 | <indexterm><primary>application/octet-stream</primary></indexterm>
|
---|
1656 | <programlisting>
|
---|
1657 | application/octet-stream
|
---|
1658 | </programlisting>
|
---|
1659 | This line (with no specific autotyping rule set) makes all files
|
---|
1660 | not otherwise auto-typed a member of <parameter>application/octet-stream</parameter>. In
|
---|
1661 | <filename>/etc/cups/mime.convs</filename>, have this
|
---|
1662 | line:
|
---|
1663 | <programlisting>
|
---|
1664 | application/octet-stream application/vnd.cups-raw 0 -
|
---|
1665 | </programlisting>
|
---|
1666 | <indexterm><primary>MIME</primary></indexterm>
|
---|
1667 | This line tells CUPS to use the <emphasis>Null Filter</emphasis>
|
---|
1668 | (denoted as <quote>-</quote>, doing nothing at all) on
|
---|
1669 | <parameter>application/octet-stream</parameter>, and tag the result as
|
---|
1670 | <parameter>application/vnd.cups-raw</parameter>. This last one is
|
---|
1671 | always a green light to the CUPS scheduler to now hand the file over
|
---|
1672 | to the backend connecting to the printer and sending it over.
|
---|
1673 | </para>
|
---|
1674 |
|
---|
1675 | <note><para>
|
---|
1676 | Editing the <filename>mime.convs</filename> and the <filename>mime.types</filename> file does not
|
---|
1677 | <emphasis>enforce</emphasis> <quote>raw</quote> printing, it only <emphasis>allows</emphasis> it.
|
---|
1678 | </para></note>
|
---|
1679 |
|
---|
1680 | <formalpara>
|
---|
1681 | <title>Background</title>
|
---|
1682 |
|
---|
1683 | <para>
|
---|
1684 | <indexterm><primary>security-aware</primary></indexterm>
|
---|
1685 | <indexterm><primary>MIME type</primary></indexterm>
|
---|
1686 | <indexterm><primary>/etc/cups/mime.types</primary></indexterm>
|
---|
1687 | <indexterm><primary>/etc/cups/mime.convs</primary></indexterm>
|
---|
1688 | That CUPS is a more security-aware printing system than traditional ones
|
---|
1689 | does not by default allow one to send deliberate (possibly binary)
|
---|
1690 | data to printing devices. (This could be easily abused to launch a
|
---|
1691 | Denial of Service attack on your printer(s), causing at least the loss
|
---|
1692 | of a lot of paper and ink.) <quote>Unknown</quote> data are regarded by CUPS
|
---|
1693 | as <emphasis>MIME type</emphasis> <emphasis>application/octet-stream</emphasis>. While you
|
---|
1694 | <emphasis>can</emphasis> send data <quote>raw</quote>, the MIME type for these must
|
---|
1695 | be one that is known to CUPS and allowed by it. The file
|
---|
1696 | <filename>/etc/cups/mime.types</filename> defines the <quote>rules</quote> of how CUPS
|
---|
1697 | recognizes MIME types. The file <filename>/etc/cups/mime.convs</filename> decides which file
|
---|
1698 | conversion filter(s) may be applied to which MIME types.
|
---|
1699 | </para>
|
---|
1700 | </formalpara>
|
---|
1701 | </sect2>
|
---|
1702 |
|
---|
1703 | <sect2>
|
---|
1704 | <title>PostScript Printer Descriptions for Non-PostScript Printers</title>
|
---|
1705 |
|
---|
1706 | <para>
|
---|
1707 | <indexterm><primary>PPD</primary></indexterm>
|
---|
1708 | <indexterm><primary>non-PostScript</primary></indexterm>
|
---|
1709 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
1710 | <indexterm><primary>RIP</primary></indexterm>
|
---|
1711 | <indexterm><primary>Ghostscript</primary></indexterm>
|
---|
1712 | <indexterm><primary>device-specific commands</primary></indexterm>
|
---|
1713 | Originally PPDs were meant to be used for PostScript printers
|
---|
1714 | only. Here, they help to send device-specific commands and settings
|
---|
1715 | to the RIP, which processes the job file. CUPS has extended this
|
---|
1716 | scope for PPDs to cover non-PostScript printers too. This was not
|
---|
1717 | difficult, because it is a standardized file format. In a way
|
---|
1718 | it was logical too: CUPS handles PostScript and uses a PostScript
|
---|
1719 | RIP (Ghostscript) to process the job files. The only difference is that
|
---|
1720 | a PostScript printer has the RIP built-in, for other types of
|
---|
1721 | printers the Ghostscript RIP runs on the host computer.
|
---|
1722 | </para>
|
---|
1723 |
|
---|
1724 | <para>
|
---|
1725 | PPDs for a non-PostScript printer have a few lines that are unique to
|
---|
1726 | CUPS. The most important one looks similar to this:
|
---|
1727 | <indexterm><primary>application/vnd.cups-raster</primary></indexterm>
|
---|
1728 | <programlisting>
|
---|
1729 | *cupsFilter: application/vnd.cups-raster 66 rastertoprinter
|
---|
1730 | </programlisting>
|
---|
1731 | It is the last piece in the CUPS filtering puzzle. This line tells the
|
---|
1732 | CUPS daemon to use as a last filter <parameter>rastertoprinter</parameter>. This filter
|
---|
1733 | should be served as input an <parameter>application/vnd.cups-raster</parameter> MIME type
|
---|
1734 | file. Therefore, CUPS should autoconstruct a filtering chain, which
|
---|
1735 | delivers as its last output the specified MIME type. This is then
|
---|
1736 | taken as input to the specified <parameter>rastertoprinter</parameter> filter. After
|
---|
1737 | the last filter has done its work (<parameter>rastertoprinter</parameter> is a Gutenprint
|
---|
1738 | filter), the file should go to the backend, which sends it to the
|
---|
1739 | output device.
|
---|
1740 | </para>
|
---|
1741 |
|
---|
1742 | <para>
|
---|
1743 | CUPS by default ships only a few generic PPDs, but they are good for
|
---|
1744 | several hundred printer models. You may not be able to control
|
---|
1745 | different paper trays, or you may get larger margins than your
|
---|
1746 | specific model supports. See Table 21.1<link linkend="cups-ppds"></link> for summary information.
|
---|
1747 | </para>
|
---|
1748 |
|
---|
1749 | <table frame="all" id="cups-ppds">
|
---|
1750 | <title>PPDs Shipped with CUPS</title>
|
---|
1751 | <tgroup cols="2" align="left">
|
---|
1752 | <colspec align="left"/>
|
---|
1753 | <colspec align="justify" colwidth="1*"/>
|
---|
1754 | <thead><row><entry>PPD file</entry><entry>Printer type</entry></row></thead>
|
---|
1755 | <tbody>
|
---|
1756 | <row><entry>deskjet.ppd</entry><entry>older HP inkjet printers and compatible</entry></row>
|
---|
1757 |
|
---|
1758 | <row><entry>deskjet2.ppd</entry> <entry>newer HP inkjet printers and compatible </entry> </row>
|
---|
1759 |
|
---|
1760 | <row><entry>dymo.ppd</entry> <entry>label printers </entry> </row>
|
---|
1761 |
|
---|
1762 | <row><entry>epson9.ppd</entry> <entry>Epson 24-pin impact printers and compatible </entry> </row>
|
---|
1763 |
|
---|
1764 | <row><entry>epson24.ppd</entry> <entry>Epson 24-pin impact printers and compatible </entry> </row>
|
---|
1765 |
|
---|
1766 | <row><entry>okidata9.ppd</entry> <entry>Okidata 9-pin impact printers and compatible </entry> </row>
|
---|
1767 |
|
---|
1768 | <row><entry>okidat24.ppd</entry> <entry>Okidata 24-pin impact printers and compatible </entry> </row>
|
---|
1769 |
|
---|
1770 | <row><entry>stcolor.ppd</entry> <entry>older Epson Stylus Color printers </entry> </row>
|
---|
1771 |
|
---|
1772 | <row><entry>stcolor2.ppd</entry> <entry>newer Epson Stylus Color printers </entry> </row>
|
---|
1773 |
|
---|
1774 | <row><entry>stphoto.ppd</entry> <entry>older Epson Stylus Photo printers </entry> </row>
|
---|
1775 |
|
---|
1776 | <row><entry>stphoto2.ppd</entry> <entry>newer Epson Stylus Photo printers </entry> </row>
|
---|
1777 |
|
---|
1778 | <row><entry>laserjet.ppd</entry> <entry>all PCL printers </entry> </row>
|
---|
1779 |
|
---|
1780 | </tbody>
|
---|
1781 | </tgroup>
|
---|
1782 | </table>
|
---|
1783 |
|
---|
1784 | </sect2>
|
---|
1785 |
|
---|
1786 | <sect2>
|
---|
1787 | <title><emphasis>cupsomatic/foomatic-rip</emphasis> Versus <emphasis>Native CUPS</emphasis> Printing</title>
|
---|
1788 |
|
---|
1789 | <para>
|
---|
1790 | <indexterm><primary>cupsomatic</primary></indexterm>
|
---|
1791 | <indexterm><primary>foomatic-rip</primary></indexterm>
|
---|
1792 | Native CUPS rasterization works in two steps:
|
---|
1793 | </para>
|
---|
1794 |
|
---|
1795 | <itemizedlist>
|
---|
1796 | <listitem><para>
|
---|
1797 | <indexterm><primary>pstoraster</primary></indexterm>
|
---|
1798 | First is the <parameter>pstoraster</parameter> step. It uses the special CUPS
|
---|
1799 | <indexterm><primary>ESP</primary><secondary>Ghostscript</secondary></indexterm>
|
---|
1800 | device from ESP Ghostscript 7.05.x as its tool.
|
---|
1801 | </para></listitem>
|
---|
1802 |
|
---|
1803 | <listitem><para>
|
---|
1804 | Second is the <parameter>rasterdriver</parameter> step. It uses various
|
---|
1805 | device-specific filters; there are several vendors who provide good
|
---|
1806 | quality filters for this step. Some are free software, some are
|
---|
1807 | shareware, and some are proprietary.
|
---|
1808 | </para></listitem>
|
---|
1809 | </itemizedlist>
|
---|
1810 |
|
---|
1811 | <para>
|
---|
1812 | Often this produces better quality (and has several more advantages) than other methods.
|
---|
1813 | This is shown in <link linkend="cupsomatic-dia"> the cupsomatic/foomatic Processing Versus Native CUPS
|
---|
1814 | illustration</link>.
|
---|
1815 | </para>
|
---|
1816 |
|
---|
1817 | <figure id="cupsomatic-dia">
|
---|
1818 | <title>cupsomatic/foomatic Processing Versus Native CUPS.</title>
|
---|
1819 | <imagefile>10small</imagefile>
|
---|
1820 | </figure>
|
---|
1821 |
|
---|
1822 | <para>
|
---|
1823 | One other method is the <parameter>cupsomatic/foomatic-rip</parameter>
|
---|
1824 | way. Note that <parameter>cupsomatic</parameter> is <emphasis>not</emphasis> made by the CUPS
|
---|
1825 | developers. It is an independent contribution to printing development,
|
---|
1826 | made by people from Linuxprinting.org.<footnote><para>See also <ulink
|
---|
1827 | noescape="1" url="http://www.cups.org/cups-help.html">http://www.cups.org/cups-help.html</ulink></para></footnote>
|
---|
1828 | <parameter>cupsomatic</parameter> is no longer developed, maintained, or supported. It now been
|
---|
1829 | replaced by <parameter>foomatic-rip</parameter>. <parameter>foomatic-rip</parameter> is a complete rewrite
|
---|
1830 | of the old <parameter>cupsomatic</parameter> idea, but very much improved and generalized to
|
---|
1831 | other (non-CUPS) spoolers. An upgrade to <parameter>foomatic-rip</parameter> is strongly
|
---|
1832 | advised, especially if you are upgrading to a recent version of CUPS,
|
---|
1833 | too.
|
---|
1834 | </para>
|
---|
1835 |
|
---|
1836 | <para>
|
---|
1837 | <indexterm><primary>cupsomatic</primary></indexterm>
|
---|
1838 | <indexterm><primary>foomatic</primary></indexterm>
|
---|
1839 | Like the old <parameter>cupsomatic</parameter> method, the <parameter>foomatic-rip</parameter> (new) method
|
---|
1840 | from Linuxprinting.org uses the traditional Ghostscript print file processing, doing everything in a single
|
---|
1841 | step. It therefore relies on all the other devices built into Ghostscript. The quality is as good (or bad) as
|
---|
1842 | Ghostscript rendering is in other spoolers. The advantage is that this method supports many printer models not
|
---|
1843 | supported (yet) by the more modern CUPS method.
|
---|
1844 | </para>
|
---|
1845 |
|
---|
1846 | <para>
|
---|
1847 | Of course, you can use both methods side by side on one system (and even for one printer, if you set up
|
---|
1848 | different queues) and find out which works best for you.
|
---|
1849 | </para>
|
---|
1850 |
|
---|
1851 | <para>
|
---|
1852 | <indexterm><primary>cupsomatic</primary></indexterm>
|
---|
1853 | <indexterm><primary>pstoraster</primary></indexterm>
|
---|
1854 | <indexterm><primary>rastertosomething</primary></indexterm>
|
---|
1855 | <indexterm><primary>rasterization</primary></indexterm>
|
---|
1856 | <indexterm><primary>Foomatic/cupsomatic</primary></indexterm>
|
---|
1857 | <indexterm><primary>rendering</primary></indexterm>
|
---|
1858 | <parameter>cupsomatic</parameter> kidnaps the print file after the
|
---|
1859 | <parameter>application/vnd.cups-postscript</parameter> stage and deviates it through the CUPS-external,
|
---|
1860 | systemwide Ghostscript installation. Therefore, the print file bypasses the <parameter>pstoraster</parameter>
|
---|
1861 | filter (and also bypasses the CUPS raster drivers <parameter>rastertosomething</parameter>). After Ghostscript
|
---|
1862 | finished its rasterization, <parameter>cupsomatic</parameter> hands the rendered file directly to the CUPS
|
---|
1863 | backend. <link linkend="cupsomatic-dia">cupsomatic/foomatic Processing Versus Native
|
---|
1864 | CUPS</link>, illustrates the difference between native CUPS rendering and the
|
---|
1865 | <parameter>Foomatic/cupsomatic</parameter> method.
|
---|
1866 | </para>
|
---|
1867 | </sect2>
|
---|
1868 |
|
---|
1869 | <sect2>
|
---|
1870 | <title>Examples for Filtering Chains</title>
|
---|
1871 |
|
---|
1872 | <para>
|
---|
1873 | Here are a few examples of commonly occurring filtering chains to
|
---|
1874 | illustrate the workings of CUPS.
|
---|
1875 | </para>
|
---|
1876 |
|
---|
1877 | <para>
|
---|
1878 | <indexterm><primary>HP JetDirect</primary></indexterm>
|
---|
1879 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
1880 | <indexterm><primary>two-up</primary></indexterm>
|
---|
1881 | <indexterm><primary>duplex</primary></indexterm>
|
---|
1882 | Assume you want to print a PDF file to an HP JetDirect-connected
|
---|
1883 | PostScript printer, but you want to print pages 3-5, 7, and 11-13
|
---|
1884 | only, and you want to print them <quote>two-up</quote> and <quote>duplex</quote>:
|
---|
1885 | </para>
|
---|
1886 |
|
---|
1887 | <itemizedlist>
|
---|
1888 | <listitem><para>Your print options (page selection as required, two-up,
|
---|
1889 | duplex) are passed to CUPS on the command line.</para></listitem>
|
---|
1890 |
|
---|
1891 | <listitem><para>The (complete) PDF file is sent to CUPS and autotyped as
|
---|
1892 | <parameter>application/pdf</parameter>.</para></listitem>
|
---|
1893 |
|
---|
1894 | <listitem><para>The file therefore must first pass the
|
---|
1895 | <parameter>pdftops</parameter> prefilter, which produces PostScript
|
---|
1896 | MIME type <parameter>application/postscript</parameter> (a preview here
|
---|
1897 | would still show all pages of the original PDF).</para></listitem>
|
---|
1898 |
|
---|
1899 | <listitem><para>The file then passes the <parameter>pstops</parameter>
|
---|
1900 | filter that applies the command line options: it selects pages
|
---|
1901 | 2-5, 7, and 11-13, creates the imposed layout <quote>two pages on one sheet</quote>, and
|
---|
1902 | inserts the correct <quote>duplex</quote> command (as defined in the printer's
|
---|
1903 | PPD) into the new PostScript file; the file is now of PostScript MIME
|
---|
1904 | type
|
---|
1905 | <parameter>application/vnd.cups-postscript</parameter>.</para></listitem>
|
---|
1906 |
|
---|
1907 | <listitem><para>The file goes to the <parameter>socket</parameter>
|
---|
1908 | backend, which transfers the job to the printers.</para></listitem>
|
---|
1909 | </itemizedlist>
|
---|
1910 |
|
---|
1911 | <para>
|
---|
1912 | The resulting filter chain, therefore, is as shown in <link linkend="pdftosocket">the PDF to socket chain
|
---|
1913 | illustration</link>.
|
---|
1914 | </para>
|
---|
1915 |
|
---|
1916 | <indexterm><primary>pdftosocket</primary></indexterm>
|
---|
1917 | <figure id="pdftosocket">
|
---|
1918 | <title>PDF to Socket Chain.</title>
|
---|
1919 | <imagefile>pdftosocket</imagefile>
|
---|
1920 | </figure>
|
---|
1921 |
|
---|
1922 | <para>
|
---|
1923 | <indexterm><primary>USB</primary></indexterm>
|
---|
1924 | <indexterm><primary>Epson Stylus</primary></indexterm>
|
---|
1925 | <indexterm><primary>stphoto2.ppd</primary></indexterm>
|
---|
1926 | Assume you want to print the same filter to an USB-connected Epson Stylus Photo Printer installed with the CUPS
|
---|
1927 | <filename>stphoto2.ppd</filename>. The first few filtering stages are nearly the same:
|
---|
1928 | </para>
|
---|
1929 |
|
---|
1930 | <itemizedlist>
|
---|
1931 | <listitem><para>
|
---|
1932 | Your print options (page selection as required, two-up,
|
---|
1933 | duplex) are passed to CUPS on the command line.
|
---|
1934 | </para></listitem>
|
---|
1935 |
|
---|
1936 | <listitem><para>
|
---|
1937 | The (complete) PDF file is sent to CUPS and autotyped as
|
---|
1938 | <parameter>application/pdf</parameter>.
|
---|
1939 | </para></listitem>
|
---|
1940 |
|
---|
1941 | <listitem><para>
|
---|
1942 | <indexterm><primary>pdftops</primary></indexterm>
|
---|
1943 | <indexterm><primary>PDF</primary></indexterm>
|
---|
1944 | The file must first pass the <parameter>pdftops</parameter> prefilter, which produces PostScript
|
---|
1945 | MIME type <parameter>application/postscript</parameter> (a preview here would still show all
|
---|
1946 | pages of the original PDF).
|
---|
1947 | </para></listitem>
|
---|
1948 |
|
---|
1949 | <listitem><para>
|
---|
1950 | <indexterm><primary>pstops</primary></indexterm>
|
---|
1951 | <indexterm><primary>duplex printing</primary></indexterm>
|
---|
1952 | The file then passes the <quote>pstops</quote> filter that applies
|
---|
1953 | the command line options: it selects the pages 2-5, 7, and 11-13,
|
---|
1954 | creates the imposed layout <quote>two pages on one sheet,</quote> and inserts the
|
---|
1955 | correct <quote>duplex</quote> command (oops &smbmdash; this printer and PPD
|
---|
1956 | do not support duplex printing at all, so this option will
|
---|
1957 | be ignored) into the new PostScript file; the file is now of PostScript
|
---|
1958 | MIME type <parameter>application/vnd.cups-postscript</parameter>.
|
---|
1959 | </para></listitem>
|
---|
1960 |
|
---|
1961 | <listitem><para>
|
---|
1962 | The file then passes the <parameter>pstoraster</parameter> stage and becomes MIME type
|
---|
1963 | <parameter>application/cups-raster</parameter>.
|
---|
1964 | </para></listitem>
|
---|
1965 |
|
---|
1966 | <listitem><para>
|
---|
1967 | <indexterm><primary>rastertoepson</primary></indexterm>
|
---|
1968 | Finally, the <parameter>rastertoepson</parameter> filter
|
---|
1969 | does its work (as indicated in the printer's PPD), creating the
|
---|
1970 | printer-specific raster data and embedding any user-selected
|
---|
1971 | print options into the print data stream.
|
---|
1972 | </para></listitem>
|
---|
1973 |
|
---|
1974 | <listitem><para>
|
---|
1975 | The file goes to the <parameter>usb</parameter> backend, which transfers the job to the printers.
|
---|
1976 | </para></listitem>
|
---|
1977 | </itemizedlist>
|
---|
1978 |
|
---|
1979 | <para>
|
---|
1980 | The resulting filter chain therefore is as shown in <link linkend="pdftoepsonusb">the PDF to USB Chain
|
---|
1981 | illustration</link>.
|
---|
1982 | </para>
|
---|
1983 |
|
---|
1984 | <figure id="pdftoepsonusb">
|
---|
1985 | <title>PDF to USB Chain.</title>
|
---|
1986 | <imagefile>pdftoepsonusb</imagefile>
|
---|
1987 | </figure>
|
---|
1988 | </sect2>
|
---|
1989 |
|
---|
1990 | <sect2>
|
---|
1991 | <title>Sources of CUPS Drivers/PPDs</title>
|
---|
1992 |
|
---|
1993 | <para>
|
---|
1994 | On the Internet you can now find many thousands of CUPS-PPD files
|
---|
1995 | (with their companion filters), in many national languages
|
---|
1996 | supporting more than 1,000 non-PostScript models.
|
---|
1997 | </para>
|
---|
1998 |
|
---|
1999 | <itemizedlist>
|
---|
2000 | <indexterm><primary>ESP</primary><secondary>Print Pro</secondary></indexterm>
|
---|
2001 | <indexterm><primary>PrintPro</primary><see>ESP Print Pro</see></indexterm>
|
---|
2002 | <listitem><para>
|
---|
2003 | <ulink url="http://www.easysw.com/printpro/">ESP PrintPro</ulink>
|
---|
2004 | (commercial, non-free) is packaged with more than 3,000 PPDs, ready for
|
---|
2005 | successful use <quote>out of the box</quote> on Linux, Mac OS X, IBM-AIX,
|
---|
2006 | HP-UX, Sun-Solaris, SGI-IRIX, Compaq Tru64, Digital UNIX, and
|
---|
2007 | other commercial Unices (it is written by the CUPS developers
|
---|
2008 | themselves and its sales help finance the further development of
|
---|
2009 | CUPS, as they feed their creators).
|
---|
2010 | </para></listitem>
|
---|
2011 |
|
---|
2012 | <listitem><para>
|
---|
2013 | The <ulink url="http://gimp-print.sourceforge.net/">Gutenprint Project</ulink>
|
---|
2014 | (GPL, free software) provides around 140 PPDs (supporting nearly 400 printers, many driven
|
---|
2015 | to photo quality output), to be used alongside the Gutenprint CUPS filters.
|
---|
2016 | </para></listitem>
|
---|
2017 |
|
---|
2018 | <listitem><para>
|
---|
2019 | <ulink url="http://www.turboprint.de/english.html/">TurboPrint </ulink> (shareware, non-free) supports
|
---|
2020 | roughly the same number of printers in excellent quality.
|
---|
2021 | </para></listitem>
|
---|
2022 |
|
---|
2023 | <listitem><para>
|
---|
2024 | <ulink url="http://www-124.ibm.com/developerworks/oss/linux/projects/omni/">OMNI </ulink>
|
---|
2025 | (LPGL, free) is a package made by IBM, now containing support for more
|
---|
2026 | than 400 printers, stemming from the inheritance of IBM OS/2 know-how
|
---|
2027 | ported over to Linux (CUPS support is in a beta stage at present).
|
---|
2028 | </para></listitem>
|
---|
2029 |
|
---|
2030 | <listitem><para>
|
---|
2031 | <ulink url="http://hpinkjet.sourceforge.net/">HPIJS </ulink> (BSD-style licenses, free)
|
---|
2032 | supports approximately 150 of HP's own printers and also provides
|
---|
2033 | excellent print quality now (currently available only via the Foomatic path).
|
---|
2034 | </para></listitem>
|
---|
2035 |
|
---|
2036 | <listitem><para>
|
---|
2037 | <ulink url="http://www.linuxprinting.org/">Foomatic/cupsomatic </ulink>
|
---|
2038 | (LPGL, free) from Linuxprinting.org provide PPDs for practically every Ghostscript
|
---|
2039 | filter known to the world (including Omni, Gutenprint, and HPIJS).
|
---|
2040 | </para></listitem>
|
---|
2041 | </itemizedlist>
|
---|
2042 |
|
---|
2043 | </sect2>
|
---|
2044 |
|
---|
2045 | <sect2>
|
---|
2046 | <title>Printing with Interface Scripts</title>
|
---|
2047 |
|
---|
2048 | <para>
|
---|
2049 | <indexterm><primary>PCL</primary></indexterm>
|
---|
2050 | <indexterm><primary>lpadmin</primary></indexterm>
|
---|
2051 | CUPS also supports the use of <quote>interface scripts</quote> as known from
|
---|
2052 | System V AT&T printing systems. These are often used for PCL
|
---|
2053 | printers, from applications that generate PCL print jobs. Interface
|
---|
2054 | scripts are specific to printer models. They have a role similar to
|
---|
2055 | PPDs for PostScript printers. Interface scripts may inject the Escape
|
---|
2056 | sequences as required into the print data stream if the user, for example, selects
|
---|
2057 | a certain paper tray, or changes paper orientation, or uses A3
|
---|
2058 | paper. Interface scripts are practically unknown in the Linux
|
---|
2059 | realm. On HP-UX platforms they are more often used. You can use any
|
---|
2060 | working interface script on CUPS too. Just install the printer with
|
---|
2061 | the <command>-i</command> option:
|
---|
2062 | <screen>
|
---|
2063 | &rootprompt;<userinput>lpadmin -p pclprinter -v socket://11.12.13.14:9100 \
|
---|
2064 | -i /path/to/interface-script</userinput>
|
---|
2065 | </screen></para>
|
---|
2066 |
|
---|
2067 | <para>
|
---|
2068 | Interface scripts might be the <quote>unknown animal</quote> to many. However,
|
---|
2069 | with CUPS they provide the easiest way to plug in your own custom-written filtering
|
---|
2070 | script or program into one specific print queue (some information about the traditional
|
---|
2071 | use of interface scripts is found at
|
---|
2072 | <ulink noescape="1" url="http://playground.sun.com/printing/documentation/interface.html">
|
---|
2073 | http://playground.sun.com/printing/documentation/interface.html</ulink>).
|
---|
2074 | </para>
|
---|
2075 | </sect2>
|
---|
2076 | </sect1>
|
---|
2077 |
|
---|
2078 | <sect1>
|
---|
2079 | <title>Network Printing (Purely Windows)</title>
|
---|
2080 |
|
---|
2081 | <para>
|
---|
2082 | Network printing covers a lot of ground. To understand what exactly
|
---|
2083 | goes on with Samba when it is printing on behalf of its Windows
|
---|
2084 | clients, let's first look at a <quote>purely Windows</quote> setup: Windows clients
|
---|
2085 | with a Windows NT print server.
|
---|
2086 | </para>
|
---|
2087 |
|
---|
2088 | <sect2>
|
---|
2089 | <title>From Windows Clients to an NT Print Server</title>
|
---|
2090 |
|
---|
2091 | <para>
|
---|
2092 | Windows clients printing to an NT-based print server have two
|
---|
2093 | options. They may:
|
---|
2094 | <indexterm><primary>GDI</primary></indexterm>
|
---|
2095 | <indexterm><primary>EMF</primary></indexterm>
|
---|
2096 | </para>
|
---|
2097 |
|
---|
2098 |
|
---|
2099 | <itemizedlist>
|
---|
2100 | <listitem><para>Execute the driver locally and render the GDI output
|
---|
2101 | (EMF) into the printer-specific format on their own.
|
---|
2102 | </para></listitem>
|
---|
2103 |
|
---|
2104 | <listitem><para>Send the GDI output (EMF) to the server, where the
|
---|
2105 | driver is executed to render the printer-specific output.
|
---|
2106 | </para></listitem>
|
---|
2107 | </itemizedlist>
|
---|
2108 |
|
---|
2109 | <para>
|
---|
2110 | Both print paths are shown in the flowcharts in <link linkend="small11">
|
---|
2111 | Print Driver Execution on the Client</link>, and
|
---|
2112 | <link linkend="small12">Print Driver Execution on the Server</link>.
|
---|
2113 | </para>
|
---|
2114 | </sect2>
|
---|
2115 |
|
---|
2116 | <sect2>
|
---|
2117 | <title>Driver Execution on the Client</title>
|
---|
2118 |
|
---|
2119 | <para>
|
---|
2120 | In the first case, the print server must spool the file as raw, meaning it shouldn't touch the job file and try
|
---|
2121 | to convert it in any way. This is what a traditional UNIX-based print server can do too, and at a better
|
---|
2122 | performance and more reliably than an NT print server. This is what most Samba administrators probably are
|
---|
2123 | familiar with. One advantage of this setup is that this <quote>spooling-only</quote> print server may be used
|
---|
2124 | even if no driver(s) for UNIX is available. It is sufficient to have the Windows client drivers available and
|
---|
2125 | installed on the clients. This is illustrated in <link linkend="small11">the Print Driver Execution on the
|
---|
2126 | Client diagram</link>.
|
---|
2127 | </para>
|
---|
2128 |
|
---|
2129 | <figure id="small11">
|
---|
2130 | <title>Print Driver Execution on the Client.</title>
|
---|
2131 | <imagefile>11small</imagefile>
|
---|
2132 | </figure>
|
---|
2133 |
|
---|
2134 | </sect2>
|
---|
2135 |
|
---|
2136 | <sect2>
|
---|
2137 | <title>Driver Execution on the Server</title>
|
---|
2138 |
|
---|
2139 |
|
---|
2140 | <para>
|
---|
2141 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
2142 | <indexterm><primary>PCL</primary></indexterm>
|
---|
2143 | <indexterm><primary>ESC/P</primary></indexterm>
|
---|
2144 | <indexterm><primary>EMF</primary></indexterm>
|
---|
2145 | <indexterm><primary>GDI</primary></indexterm>
|
---|
2146 | The other path executes the printer driver on the server. The client transfers print files in EMF format to
|
---|
2147 | the server. The server uses the PostScript, PCL, ESC/P, or other driver to convert the EMF file into the
|
---|
2148 | printer-specific language. It is not possible for UNIX to do the same. Currently, there is no program or
|
---|
2149 | method to convert a Windows client's GDI output on a UNIX server into something a printer could understand.
|
---|
2150 | This is illustrated in <link linkend="small12">the Print Driver Execution on the Server diagram</link>.
|
---|
2151 | </para>
|
---|
2152 |
|
---|
2153 | <figure id="small12">
|
---|
2154 | <title>Print Driver Execution on the Server.</title>
|
---|
2155 | <imagefile>12small</imagefile>
|
---|
2156 | </figure>
|
---|
2157 |
|
---|
2158 | <para>
|
---|
2159 | However, something similar is possible with CUPS, so read on.
|
---|
2160 | </para>
|
---|
2161 | </sect2>
|
---|
2162 | </sect1>
|
---|
2163 |
|
---|
2164 | <sect1>
|
---|
2165 | <title>Network Printing (Windows Clients and UNIX/Samba Print
|
---|
2166 | Servers)</title>
|
---|
2167 |
|
---|
2168 | <para>
|
---|
2169 | Since UNIX print servers <emphasis>cannot</emphasis> execute the Win32
|
---|
2170 | program code on their platform, the picture is somewhat
|
---|
2171 | different. However, this does not limit your options all that
|
---|
2172 | much. On the contrary, you may have a way here to implement printing
|
---|
2173 | features that are not possible otherwise.
|
---|
2174 | </para>
|
---|
2175 |
|
---|
2176 | <sect2>
|
---|
2177 | <title>From Windows Clients to a CUPS/Samba Print Server</title>
|
---|
2178 |
|
---|
2179 | <para>
|
---|
2180 | Here is a simple recipe showing how you can take advantage of CUPS's
|
---|
2181 | powerful features for the benefit of your Windows network printing
|
---|
2182 | clients:
|
---|
2183 | </para>
|
---|
2184 |
|
---|
2185 | <itemizedlist>
|
---|
2186 | <listitem><para>Let the Windows clients send PostScript to the CUPS
|
---|
2187 | server.</para></listitem>
|
---|
2188 |
|
---|
2189 | <listitem><para>Let the CUPS server render the PostScript into device-specific raster format.</para></listitem>
|
---|
2190 | </itemizedlist>
|
---|
2191 |
|
---|
2192 | <para>
|
---|
2193 | This requires the clients to use a PostScript driver (even if the
|
---|
2194 | printer is a non-PostScript model. It also requires that you have a
|
---|
2195 | driver on the CUPS server.
|
---|
2196 | </para>
|
---|
2197 |
|
---|
2198 | <para>
|
---|
2199 | First, to enable CUPS-based printing through Samba, the following options should be set in your &smb.conf;
|
---|
2200 | file <parameter>[global]</parameter> section:
|
---|
2201 | </para>
|
---|
2202 |
|
---|
2203 | <smbconfblock>
|
---|
2204 | <smbconfoption name="printing">cups</smbconfoption>
|
---|
2205 | <smbconfoption name="printcap">cups</smbconfoption>
|
---|
2206 | </smbconfblock>
|
---|
2207 |
|
---|
2208 | <para>
|
---|
2209 | When these parameters are specified, all manually set print directives (like <smbconfoption name="print
|
---|
2210 | command"/> or <smbconfoption name="lppause command"/>) in &smb.conf; (as well as in Samba itself) will be
|
---|
2211 | ignored. Instead, Samba will directly interface with CUPS through its application program interface (API), as
|
---|
2212 | long as Samba has been compiled with CUPS library (libcups) support. If Samba has not been compiled with CUPS
|
---|
2213 | support, and if no other print commands are set up, then printing will use the <emphasis>System V</emphasis>
|
---|
2214 | AT&T command set, with the -oraw option automatically passing through (if you want your own defined print
|
---|
2215 | commands to work with a Samba server that has CUPS support compiled in, simply use <smbconfoption
|
---|
2216 | name="classicalprinting">sysv</smbconfoption>). This is illustrated in <link linkend="f13small">the Printing via
|
---|
2217 | CUPS/Samba Server diagram</link>.
|
---|
2218 | </para>
|
---|
2219 |
|
---|
2220 | <figure id="f13small">
|
---|
2221 | <title>Printing via CUPS/Samba Server.</title>
|
---|
2222 | <imagefile>13small</imagefile>
|
---|
2223 | </figure>
|
---|
2224 | </sect2>
|
---|
2225 |
|
---|
2226 | <sect2>
|
---|
2227 | <title>Samba Receiving Job-Files and Passing Them to CUPS</title>
|
---|
2228 |
|
---|
2229 | <para>
|
---|
2230 | Samba <emphasis>must</emphasis> use its own spool directory (it is set by a line similar to <smbconfoption
|
---|
2231 | name="path">/var/spool/samba</smbconfoption>, in the <smbconfsection name="[printers]"/> or <smbconfsection
|
---|
2232 | name="[printername]"/> section of &smb.conf;). Samba receives the job in its own spool space and passes it
|
---|
2233 | into the spool directory of CUPS (the CUPS spool directory is set by the <parameter>RequestRoot</parameter>
|
---|
2234 | directive in a line that defaults to <parameter>RequestRoot /var/spool/cups</parameter>). CUPS checks the
|
---|
2235 | access rights of its spool directory and resets it to healthy values with every restart. We have seen quite a
|
---|
2236 | few people who used a common spooling space for Samba and CUPS, and struggled for weeks with this
|
---|
2237 | <quote>problem.</quote>
|
---|
2238 | </para>
|
---|
2239 |
|
---|
2240 | <para>
|
---|
2241 | A Windows user authenticates only to Samba (by whatever means is
|
---|
2242 | configured). If Samba runs on the same host as CUPS, you only need to
|
---|
2243 | allow <quote>localhost</quote> to print. If it runs on different machines, you
|
---|
2244 | need to make sure the Samba host gets access to printing on CUPS.
|
---|
2245 | </para>
|
---|
2246 | </sect2>
|
---|
2247 | </sect1>
|
---|
2248 |
|
---|
2249 | <sect1>
|
---|
2250 | <title>Network PostScript RIP</title>
|
---|
2251 |
|
---|
2252 | <para>
|
---|
2253 | This section discusses the use of CUPS filters on the server &smbmdash; configuration where
|
---|
2254 | clients make use of a PostScript driver with CUPS-PPDs.
|
---|
2255 | </para>
|
---|
2256 |
|
---|
2257 |
|
---|
2258 | <para>
|
---|
2259 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
2260 | <indexterm><primary>PCL</primary></indexterm>
|
---|
2261 | <indexterm><primary>PJL</primary></indexterm>
|
---|
2262 | PPDs can control all print device options. They are usually provided by the manufacturer &smbmdash; if you own
|
---|
2263 | a PostScript printer, that is. PPD files are always a component of PostScript printer drivers on MS Windows or
|
---|
2264 | Apple Mac OS systems. They are ASCII files containing user-selectable print options, mapped to appropriate
|
---|
2265 | PostScript, PCL, or PJL commands for the target printer. Printer driver GUI dialogs translate these options
|
---|
2266 | <quote>on the fly</quote> into buttons and drop-down lists for the user to select.
|
---|
2267 | </para>
|
---|
2268 |
|
---|
2269 | <para>
|
---|
2270 | CUPS can load, without any conversions, the PPD file from any Windows (NT is recommended) PostScript driver
|
---|
2271 | and handle the options. There is a Web browser interface to the print options (select <ulink noescape="1"
|
---|
2272 | url="http://localhost:631/printers/">http://localhost:631/printers/</ulink> and click on one
|
---|
2273 | <guibutton>Configure Printer</guibutton> button to see it) or a command line interface (see <command>man
|
---|
2274 | lpoptions</command> or see if you have <command>lphelp</command> on your system). There are also some
|
---|
2275 | different GUI front-ends on Linux/UNIX, which can present PPD options to users. PPD options are normally meant
|
---|
2276 | to be evaluated by the PostScript RIP on the real PostScript printer.
|
---|
2277 | </para>
|
---|
2278 |
|
---|
2279 | <sect2>
|
---|
2280 | <title>PPDs for Non-PS Printers on UNIX</title>
|
---|
2281 |
|
---|
2282 |
|
---|
2283 | <para>
|
---|
2284 | <indexterm><primary>PPD</primary></indexterm>
|
---|
2285 | CUPS does not limit itself to <quote>real</quote> PostScript printers in its use of PPDs. The CUPS developers
|
---|
2286 | have extended the scope of the PPD concept to also describe available device and driver options for
|
---|
2287 | non-PostScript printers through CUPS-PPDs.
|
---|
2288 | </para>
|
---|
2289 |
|
---|
2290 | <para>
|
---|
2291 | This is logical, because CUPS includes a fully featured PostScript interpreter (RIP). This RIP is based on
|
---|
2292 | Ghostscript. It can process all received PostScript (and additionally many other file formats) from clients.
|
---|
2293 | All CUPS-PPDs geared to non-PostScript printers contain an additional line, starting with the keyword
|
---|
2294 | <parameter>*cupsFilter</parameter>. This line tells the CUPS print system which printer-specific filter to use
|
---|
2295 | for the interpretation of the supplied PostScript. Thus CUPS lets all its printers appear as PostScript
|
---|
2296 | devices to its clients, because it can act as a PostScript RIP for those printers, processing the received
|
---|
2297 | PostScript code into a proper raster print format.
|
---|
2298 | </para>
|
---|
2299 | </sect2>
|
---|
2300 |
|
---|
2301 | <sect2>
|
---|
2302 | <title>PPDs for Non-PS Printers on Windows</title>
|
---|
2303 |
|
---|
2304 | <para>
|
---|
2305 | <indexterm><primary>PPD</primary></indexterm>
|
---|
2306 | CUPS-PPDs can also be used on Windows clients, on top of a <quote>core</quote> PostScript driver (now
|
---|
2307 | recommended is the CUPS PostScript Driver for Windows NT/200x/XP; you can also use the Adobe one, with
|
---|
2308 | limitations). This feature enables CUPS to do a few tricks no other spooler can do:
|
---|
2309 | </para>
|
---|
2310 |
|
---|
2311 | <itemizedlist>
|
---|
2312 | <listitem><para>
|
---|
2313 | Act as a networked PostScript RIP handling print files from all client platforms in a uniform way.
|
---|
2314 | </para></listitem>
|
---|
2315 |
|
---|
2316 | <listitem><para>
|
---|
2317 | Act as a central accounting and billing server, since all files are passed through the pstops filter and are therefore
|
---|
2318 | logged in the CUPS <filename>page_log</filename> file. <emphasis>Note:</emphasis> this cannot happen with
|
---|
2319 | <quote>raw</quote> print jobs, which always remain unfiltered per definition.
|
---|
2320 | </para></listitem>
|
---|
2321 |
|
---|
2322 | <listitem><para>
|
---|
2323 | Enable clients to consolidate on a single PostScript driver, even for many different target printers.
|
---|
2324 | </para></listitem>
|
---|
2325 | </itemizedlist>
|
---|
2326 |
|
---|
2327 | <para>
|
---|
2328 | Using CUPS PPDs on Windows clients enables them to control all print job settings just as a UNIX client can do.
|
---|
2329 | </para>
|
---|
2330 | </sect2>
|
---|
2331 | </sect1>
|
---|
2332 |
|
---|
2333 | <sect1>
|
---|
2334 | <title>Windows Terminal Servers (WTS) as CUPS Clients</title>
|
---|
2335 |
|
---|
2336 | <para>
|
---|
2337 | This setup may be of special interest to people experiencing major problems in WTS environments. WTS often
|
---|
2338 | need a multitude of non-PostScript drivers installed to run their clients' variety of different printer
|
---|
2339 | models. This often imposes the price of much increased instability.
|
---|
2340 | </para>
|
---|
2341 |
|
---|
2342 | <sect2>
|
---|
2343 | <title>Printer Drivers Running in <quote>Kernel Mode</quote> Cause Many
|
---|
2344 | Problems</title>
|
---|
2345 |
|
---|
2346 | <para>
|
---|
2347 | Windows NT printer drivers, which run in <quote>kernel mode</quote>, introduce a high risk for the stability
|
---|
2348 | of the system if the driver is not really stable and well-tested. And there are a lot of bad drivers out
|
---|
2349 | there! Especially notorious is the example of the PCL printer driver that had an additional sound module
|
---|
2350 | running to notify users via soundcard of their finished jobs. Do I need to say that this one was also reliably
|
---|
2351 | causing <quote>blue screens of death</quote> on a regular basis?
|
---|
2352 | </para>
|
---|
2353 |
|
---|
2354 | <para>
|
---|
2355 | PostScript drivers are generally well-tested. They are not known to cause any problems, even though they also
|
---|
2356 | run in kernel mode. This might be because until now there have been only two different PostScript drivers: the
|
---|
2357 | one from Adobe and the one from Microsoft. Both are well-tested and are as stable as you can imagine on
|
---|
2358 | Windows. The CUPS driver is derived from the Microsoft one.
|
---|
2359 | </para>
|
---|
2360 | </sect2>
|
---|
2361 |
|
---|
2362 | <sect2>
|
---|
2363 | <title>Workarounds Impose Heavy Limitations</title>
|
---|
2364 |
|
---|
2365 | <para>
|
---|
2366 | In an attempt to work around problems, site administrators have resorted to restricting the
|
---|
2367 | allowed drivers installed on their WTS to one generic PCL and one PostScript driver. This, however, restricts
|
---|
2368 | the number of printer options available for clients to use. Often they can't get out more than simplex
|
---|
2369 | prints from one standard paper tray, while their devices could do much better if driven by a different driver!
|
---|
2370 | </para>
|
---|
2371 | </sect2>
|
---|
2372 |
|
---|
2373 | <sect2>
|
---|
2374 | <title>CUPS: A <quote>Magical Stone</quote>?</title>
|
---|
2375 |
|
---|
2376 | <para>
|
---|
2377 | <indexterm><primary>PPD</primary></indexterm>
|
---|
2378 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
2379 | Using a PostScript driver, enabled with a CUPS-PPD, seems to be a very elegant way to overcome all these
|
---|
2380 | shortcomings. There are, depending on the version of Windows OS you use, up to three different PostScript
|
---|
2381 | drivers now available: Adobe, Microsoft, and CUPS PostScript drivers. None of them is known to cause major
|
---|
2382 | stability problems on WTS (even if used with many different PPDs). The clients will be able to (again) choose
|
---|
2383 | paper trays, duplex printing, and other settings. However, there is a certain price for this too: a CUPS
|
---|
2384 | server acting as a PostScript RIP for its clients requires more CPU and RAM than when just acting as a
|
---|
2385 | <quote>raw spooling</quote> device. Plus, this setup is not yet widely tested, although the first feedbacks
|
---|
2386 | look very promising.
|
---|
2387 | </para>
|
---|
2388 | </sect2>
|
---|
2389 |
|
---|
2390 | <sect2>
|
---|
2391 | <title>PostScript Drivers with No Major Problems, Even in Kernel
|
---|
2392 | Mode</title>
|
---|
2393 |
|
---|
2394 | <para>
|
---|
2395 | <indexterm><primary>DDK</primary></indexterm>
|
---|
2396 | <indexterm><primary>W32X86</primary></indexterm>
|
---|
2397 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
2398 | <indexterm><primary>Visual Studio</primary></indexterm>
|
---|
2399 | <indexterm><primary>Microsoft driver</primary></indexterm>
|
---|
2400 | <indexterm><primary>Adobe</primary></indexterm>
|
---|
2401 | More recent printer drivers on W200x and XP no longer run in kernel mode (unlike Windows NT). However, both
|
---|
2402 | operating systems can still use the NT drivers, running in kernel mode (you can roughly tell which is which as
|
---|
2403 | the drivers in subdirectory <quote>2</quote> of <quote>W32X86</quote> are <quote>old</quote> ones). As was
|
---|
2404 | said before, the Adobe as well as the Microsoft PostScript drivers are not known to cause any stability
|
---|
2405 | problems. The CUPS driver is derived from the Microsoft one. There is a simple reason for this: the MS DDK
|
---|
2406 | (Device Development Kit) for Windows NT (which used to be available at no cost to licensees of Visual Studio)
|
---|
2407 | includes the source code of the Microsoft driver, and licensees of Visual Studio are allowed to use and modify
|
---|
2408 | it for their own driver development efforts. This is what the CUPS people have done. The license does not
|
---|
2409 | allow them to publish the whole of the source code. However, they have released the <quote>diff</quote> under
|
---|
2410 | the GPL, and if you are the owner of an <quote>MS DDK for Windows NT,</quote> you can check the driver
|
---|
2411 | yourself.
|
---|
2412 | </para>
|
---|
2413 | </sect2>
|
---|
2414 | </sect1>
|
---|
2415 |
|
---|
2416 | <sect1>
|
---|
2417 | <title>Configuring CUPS for Driver Download</title>
|
---|
2418 |
|
---|
2419 | <para>
|
---|
2420 | As we have said before, all previously known methods to prepare client printer drivers on the Samba server for
|
---|
2421 | download and Point'n'Print convenience of Windows workstations are working with CUPS, too. These methods were
|
---|
2422 | described in <link linkend="classicalprinting">Classical Printing</link>. In reality, this is a pure Samba
|
---|
2423 | business and relates only to the Samba-Windows client relationship.
|
---|
2424 | </para>
|
---|
2425 |
|
---|
2426 | <sect2>
|
---|
2427 | <title><emphasis>cupsaddsmb</emphasis>: The Unknown Utility</title>
|
---|
2428 |
|
---|
2429 |
|
---|
2430 | <para>
|
---|
2431 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
2432 | The <parameter>cupsaddsmb</parameter> utility (shipped with all current CUPS versions) is an alternative
|
---|
2433 | method to transfer printer drivers into the Samba <smbconfsection name="[print$]"/> share. Remember, this
|
---|
2434 | share is where clients expect drivers deposited and set up for download and installation. It makes the sharing
|
---|
2435 | of any (or all) installed CUPS printers quite easy. <command>cupsaddsmb</command> can use the Adobe PostScript
|
---|
2436 | driver as well as the newly developed CUPS PostScript driver for Windows NT/200x/XP.
|
---|
2437 | <parameter>cupsaddsmb</parameter> does <emphasis>not</emphasis> work with arbitrary vendor printer drivers,
|
---|
2438 | but only with the <emphasis>exact</emphasis> driver files that are named in its man page.
|
---|
2439 | </para>
|
---|
2440 |
|
---|
2441 | <para>
|
---|
2442 | The CUPS printer driver is available from the CUPS download site. Its package name is
|
---|
2443 | <filename>cups-samba-[version].tar.gz</filename>. It is preferred over the Adobe drivers because it has a
|
---|
2444 | number of advantages:
|
---|
2445 | </para>
|
---|
2446 |
|
---|
2447 | <itemizedlist>
|
---|
2448 | <listitem><para>It supports a much more accurate page accounting.</para></listitem>
|
---|
2449 |
|
---|
2450 | <listitem><para>It supports banner pages and page labels on all printers.</para></listitem>
|
---|
2451 |
|
---|
2452 | <listitem><para>It supports the setting of a number of job IPP attributes
|
---|
2453 | (such as job priority, page label, and job billing).</para></listitem>
|
---|
2454 | </itemizedlist>
|
---|
2455 |
|
---|
2456 | <para>
|
---|
2457 | However, currently only Windows NT, 2000, and XP are supported by the
|
---|
2458 | CUPS drivers. You will also need to get the respective part of the Adobe driver
|
---|
2459 | if you need to support Windows 95, 98, and Me clients.
|
---|
2460 | </para>
|
---|
2461 | </sect2>
|
---|
2462 |
|
---|
2463 | <sect2>
|
---|
2464 | <title>Prepare Your &smb.conf; for <command>cupsaddsmb</command></title>
|
---|
2465 |
|
---|
2466 | <para>
|
---|
2467 | Prior to running <command>cupsaddsmb</command>, you need the settings in
|
---|
2468 | &smb.conf; as shown in <link linkend="cupsadd-ex">the &smb.conf; for cupsaddsmb Usage</link>.
|
---|
2469 | </para>
|
---|
2470 |
|
---|
2471 | <example id="cupsadd-ex">
|
---|
2472 | <title>smb.conf for cupsaddsmb Usage</title>
|
---|
2473 | <smbconfblock>
|
---|
2474 | <smbconfsection name="[global]"/>
|
---|
2475 | <smbconfoption name="load printers">yes</smbconfoption>
|
---|
2476 | <smbconfoption name="printing">cups</smbconfoption>
|
---|
2477 | <smbconfoption name="printcap name">cups</smbconfoption>
|
---|
2478 |
|
---|
2479 | <smbconfsection name="[printers]"/>
|
---|
2480 | <smbconfoption name="comment">All Printers</smbconfoption>
|
---|
2481 | <smbconfoption name="path">/var/spool/samba</smbconfoption>
|
---|
2482 | <smbconfoption name="browseable">no</smbconfoption>
|
---|
2483 | <smbconfcomment>setting depends on your requirements</smbconfcomment>
|
---|
2484 | <smbconfoption name="guest ok">yes</smbconfoption>
|
---|
2485 | <smbconfoption name="writable">no</smbconfoption>
|
---|
2486 | <smbconfoption name="printable">yes</smbconfoption>
|
---|
2487 | <smbconfoption name="printer admin">root</smbconfoption>
|
---|
2488 | <smbconfsection name="[print$]"/>
|
---|
2489 | <smbconfoption name="comment">Printer Drivers</smbconfoption>
|
---|
2490 | <smbconfoption name="path">/etc/samba/drivers</smbconfoption>
|
---|
2491 | <smbconfoption name="browseable">yes</smbconfoption>
|
---|
2492 | <smbconfoption name="guest ok">no</smbconfoption>
|
---|
2493 | <smbconfoption name="read only">yes</smbconfoption>
|
---|
2494 | <smbconfoption name="write list">root, @smbprintadm</smbconfoption>
|
---|
2495 | </smbconfblock>
|
---|
2496 | </example>
|
---|
2497 | </sect2>
|
---|
2498 |
|
---|
2499 | <sect2>
|
---|
2500 | <title>CUPS <quote>PostScript Driver for Windows NT/200x/XP</quote></title>
|
---|
2501 |
|
---|
2502 | <para>
|
---|
2503 | <indexterm><primary>PostScript</primary></indexterm>
|
---|
2504 | CUPS users may get the exact same package from <ulink noescape="1"
|
---|
2505 | url="http://www.cups.org/software.html">http://www.cups.org/software.html</ulink>. It is a separate package
|
---|
2506 | from the CUPS-based software files, tagged as CUPS 1.1.x Windows NT/200x/XP Printer Driver for Samba (tar.gz,
|
---|
2507 | 192k). The filename to download is <filename>cups-samba-1.1.x.tar.gz</filename>. Upon untar and unzipping, it
|
---|
2508 | will reveal these files:
|
---|
2509 | <screen>
|
---|
2510 | &rootprompt;<userinput>tar xvzf cups-samba-1.1.19.tar.gz</userinput>
|
---|
2511 | cups-samba.install
|
---|
2512 | cups-samba.license
|
---|
2513 | cups-samba.readme
|
---|
2514 | cups-samba.remove
|
---|
2515 | cups-samba.ss
|
---|
2516 | </screen></para>
|
---|
2517 |
|
---|
2518 | <para>
|
---|
2519 | <indexterm><primary>ESP</primary><secondary>meta packager</secondary></indexterm>
|
---|
2520 | <indexterm><primary>EPM</primary><see>ESP meta packager</see></indexterm>
|
---|
2521 | These have been packaged with the ESP meta-packager software EPM. The <filename>*.install</filename> and
|
---|
2522 | <filename>*.remove</filename> files are simple shell scripts, which untar the <filename>*.ss</filename> (the
|
---|
2523 | <filename>*.ss</filename> is nothing else but a tar archive, which can be untarred by <quote>tar</quote> too).
|
---|
2524 | Then it puts the content into <filename>/usr/share/cups/drivers/</filename>. This content includes three
|
---|
2525 | files:
|
---|
2526 | <screen>
|
---|
2527 | &rootprompt;<userinput>tar tv cups-samba.ss</userinput>
|
---|
2528 | cupsdrvr.dll
|
---|
2529 | cupsui.dll
|
---|
2530 | cups.hlp
|
---|
2531 | </screen></para>
|
---|
2532 |
|
---|
2533 | <para>
|
---|
2534 | The <parameter>cups-samba.install</parameter> shell scripts are easy to
|
---|
2535 | handle:
|
---|
2536 | <screen>
|
---|
2537 | &rootprompt;<userinput>./cups-samba.install</userinput>
|
---|
2538 | [....]
|
---|
2539 | Installing software...
|
---|
2540 | Updating file permissions...
|
---|
2541 | Running post-install commands...
|
---|
2542 | Installation is complete.
|
---|
2543 | </screen></para>
|
---|
2544 |
|
---|
2545 | <para>
|
---|
2546 | The script should automatically put the driver files into the
|
---|
2547 | <filename>/usr/share/cups/drivers/</filename> directory:
|
---|
2548 | <screen>
|
---|
2549 | &rootprompt;<userinput>cp /usr/share/drivers/cups.hlp /usr/share/cups/drivers/</userinput>
|
---|
2550 | </screen></para>
|
---|
2551 |
|
---|
2552 | <warning><para>
|
---|
2553 | Due to a bug, one recent CUPS release puts the <filename>cups.hlp</filename> driver file
|
---|
2554 | into<filename>/usr/share/drivers/</filename> instead of <filename>/usr/share/cups/drivers/</filename>. To work
|
---|
2555 | around this, copy/move the file (after running the <command>./cups-samba.install</command> script) manually to
|
---|
2556 | the correct place.
|
---|
2557 | </para></warning>
|
---|
2558 |
|
---|
2559 | <para>
|
---|
2560 | <indexterm><primary>DDK</primary></indexterm>
|
---|
2561 | This new CUPS PostScript driver is currently binary only, but free of charge. No complete source code is
|
---|
2562 | provided (yet). The reason is that it has been developed with the help of the Microsoft DDK and compiled with
|
---|
2563 | Microsoft Visual Studio 6. Driver developers are not allowed to distribute the whole of the source code as
|
---|
2564 | free software. However, CUPS developers released the <quote>diff</quote> in source code under the GPL, so
|
---|
2565 | anybody with a license for Visual Studio and a DDK will be able to compile for himself or herself.
|
---|
2566 | </para>
|
---|
2567 | </sect2>
|
---|
2568 |
|
---|
2569 | <sect2>
|
---|
2570 | <title>Recognizing Different Driver Files</title>
|
---|
2571 |
|
---|
2572 | <para>
|
---|
2573 | The CUPS drivers do not support the older Windows 95/98/Me, but only the Windows NT/2000/XP client.
|
---|
2574 | </para>
|
---|
2575 |
|
---|
2576 | <para>Windows NT, 2000, and XP are supported by:</para>
|
---|
2577 |
|
---|
2578 | <itemizedlist>
|
---|
2579 | <listitem><para>cups.hlp</para></listitem>
|
---|
2580 | <listitem><para>cupsdrvr.dll</para></listitem>
|
---|
2581 | <listitem><para>cupsui.dll</para></listitem>
|
---|
2582 | </itemizedlist>
|
---|
2583 |
|
---|
2584 | <para>
|
---|
2585 | Adobe drivers are available for the older Windows 95/98/Me as well as
|
---|
2586 | for Windows NT/2000/XP clients. The set of files is different from the
|
---|
2587 | different platforms.
|
---|
2588 | </para>
|
---|
2589 |
|
---|
2590 | <para>Windows 95, 98, and ME are supported by:</para>
|
---|
2591 |
|
---|
2592 | <itemizedlist>
|
---|
2593 | <listitem><para>ADFONTS.MFM</para></listitem>
|
---|
2594 | <listitem><para>ADOBEPS4.DRV</para></listitem>
|
---|
2595 | <listitem><para>ADOBEPS4.HLP</para></listitem>
|
---|
2596 | <listitem><para>DEFPRTR2.PPD</para></listitem>
|
---|
2597 | <listitem><para>ICONLIB.DLL</para></listitem>
|
---|
2598 | <listitem><para>PSMON.DLL</para></listitem>
|
---|
2599 | </itemizedlist>
|
---|
2600 |
|
---|
2601 | <para>Windows NT, 2000, and XP are supported by:</para>
|
---|
2602 |
|
---|
2603 | <itemizedlist>
|
---|
2604 | <listitem><para>ADOBEPS5.DLL</para></listitem>
|
---|
2605 | <listitem><para>ADOBEPSU.DLL</para></listitem>
|
---|
2606 | <listitem><para>ADOBEPSU.HLP</para></listitem>
|
---|
2607 | </itemizedlist>
|
---|
2608 |
|
---|
2609 | <note><para>
|
---|
2610 | <indexterm><primary>Adobe driver files</primary></indexterm>
|
---|
2611 | If both the Adobe driver files and the CUPS driver files for the support of Windows NT/200x/XP are presently
|
---|
2612 | installed on the server, the Adobe files will be ignored and the CUPS files will be used. If you prefer
|
---|
2613 | &smbmdash; for whatever reason &smbmdash; to use Adobe-only drivers, move away the three CUPS driver files.
|
---|
2614 | The Windows 9x/Me clients use the Adobe drivers in any case.
|
---|
2615 | </para></note>
|
---|
2616 | </sect2>
|
---|
2617 |
|
---|
2618 | <sect2>
|
---|
2619 | <title>Acquiring the Adobe Driver Files</title>
|
---|
2620 |
|
---|
2621 | <para>
|
---|
2622 | Acquiring the Adobe driver files seems to be unexpectedly difficult for many users. They are not available on
|
---|
2623 | the Adobe Web site as single files, and the self-extracting and/or self-installing Windows-.exe is not easy to
|
---|
2624 | locate either. You probably need to use the included native installer and run the installation process on one
|
---|
2625 | client once. This will install the drivers (and one generic PostScript printer) locally on the client. When
|
---|
2626 | they are installed, share the generic PostScript printer. After this, the client's <smbconfsection
|
---|
2627 | name="[print$]"/> share holds the Adobe files, which you can get with smbclient from the CUPS host.
|
---|
2628 | </para>
|
---|
2629 | </sect2>
|
---|
2630 |
|
---|
2631 | <sect2>
|
---|
2632 | <title>ESP Print Pro PostScript Driver for Windows NT/200x/XP</title>
|
---|
2633 |
|
---|
2634 | <para>
|
---|
2635 | <indexterm><primary>ESP</primary><secondary>Print Pro</secondary></indexterm>
|
---|
2636 | Users of the ESP Print Pro software are able to install the ESP print drivers package as an alternative to the
|
---|
2637 | Adobe PostScript drivers. To do so, retrieve the driver files from the normal download area of the ESP Print
|
---|
2638 | Pro software at <ulink noescape="1" url="http://www.easysw.com/software.html">Easy Software</ulink> web site.
|
---|
2639 | You need to locate the link labeled <quote>SAMBA</quote> among the <guilabel>Download Printer Drivers for ESP
|
---|
2640 | Print Pro 4.x</guilabel> area and download the package. Once installed, you can prepare any driver by simply
|
---|
2641 | highlighting the printer in the Printer Manager GUI and selecting <guilabel>Export Driver...</guilabel> from
|
---|
2642 | the menu. Of course, you need to have prepared Samba beforehand to handle the driver files; that is, set up
|
---|
2643 | the <smbconfsection name="[print$]"/> share, and so on. The ESP Print Pro package includes the CUPS driver
|
---|
2644 | files as well as a (licensed) set of Adobe drivers for the Windows 95/98/Me client family.
|
---|
2645 | </para>
|
---|
2646 | </sect2>
|
---|
2647 |
|
---|
2648 | <sect2>
|
---|
2649 | <title>Caveats to Be Considered</title>
|
---|
2650 |
|
---|
2651 |
|
---|
2652 | <para>
|
---|
2653 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
2654 | <indexterm><primary>cups.hlp</primary></indexterm>
|
---|
2655 | <indexterm><primary>WIN40</primary></indexterm>
|
---|
2656 | <indexterm><primary>W32X86</primary></indexterm>
|
---|
2657 | Once you have run the install script (and possibly manually moved the <filename>cups.hlp</filename> file to
|
---|
2658 | <filename>/usr/share/cups/drivers/</filename>), the driver is ready to be put into Samba's <smbconfsection
|
---|
2659 | name="[print$]"/> share (which often maps to <filename>/etc/samba/drivers/</filename> and contains a
|
---|
2660 | subdirectory tree with <emphasis>WIN40</emphasis> and <emphasis>W32X86</emphasis> branches). You do this by
|
---|
2661 | running <command>cupsaddsmb</command> (see also <command>man cupsaddsmb</command> for CUPS since release
|
---|
2662 | 1.1.16).
|
---|
2663 | </para>
|
---|
2664 |
|
---|
2665 | <tip><para>
|
---|
2666 | <indexterm><primary>Single Sign-On</primary></indexterm>
|
---|
2667 | <indexterm><primary>Domain Controller</primary></indexterm>
|
---|
2668 | You may need to put root into the smbpasswd file by running <command>smbpasswd</command>; this is especially
|
---|
2669 | important if you should run this whole procedure for the first time and are not working in an environment
|
---|
2670 | where everything is configured for <emphasis>single sign-on</emphasis> to a Windows Domain Controller.
|
---|
2671 | </para></tip>
|
---|
2672 |
|
---|
2673 | <para>
|
---|
2674 | Once the driver files are in the <smbconfsection name="[print$]"/> share and are initialized, they are ready
|
---|
2675 | to be downloaded and installed by the Windows NT/200x/XP clients.
|
---|
2676 | </para>
|
---|
2677 |
|
---|
2678 | <note><para>
|
---|
2679 | Win 9x/Me clients will not work with the CUPS PostScript driver. For these you still need to use the
|
---|
2680 | <filename>ADOBE*.*</filename> drivers, as previously stated.
|
---|
2681 | </para></note>
|
---|
2682 |
|
---|
2683 | <note>
|
---|
2684 | <para>
|
---|
2685 | It is not harmful if you still have the <filename>ADOBE*.*</filename> driver files from previous installations
|
---|
2686 | in the <filename>/usr/share/cups/drivers/</filename> directory. The new <command>cupsaddsmb</command> (from
|
---|
2687 | 1.1.16) will automatically prefer its own drivers if it finds both.
|
---|
2688 | </para></note>
|
---|
2689 |
|
---|
2690 | <note><para>
|
---|
2691 | <indexterm><primary>"Printers" folder</primary></indexterm>
|
---|
2692 | <indexterm><primary>Adobe PostScript</primary></indexterm>
|
---|
2693 | Should your Windows clients have had the old <filename>ADOBE*.*</filename> files for the Adobe PostScript
|
---|
2694 | driver installed, the download and installation of the new CUPS PostScript driver for Windows NT/200x/XP will
|
---|
2695 | fail at first. You need to wipe the old driver from the clients first. It is not enough to
|
---|
2696 | <quote>delete</quote> the printer, because the driver files will still be kept by the clients and re-used if
|
---|
2697 | you try to re-install the printer. To really get rid of the Adobe driver files on the clients, open the
|
---|
2698 | <guilabel>Printers</guilabel> folder (possibly via <guilabel>Start -> Settings -> Control Panel ->
|
---|
2699 | Printers</guilabel>), right-click on the folder background, and select <guimenuitem>Server
|
---|
2700 | Properties</guimenuitem>. When the new dialog opens, select the <guilabel>Drivers</guilabel> tab. On the list
|
---|
2701 | select the driver you want to delete and click the <guilabel>Delete</guilabel> button. This will only work if
|
---|
2702 | there is not one single printer left that uses that particular driver. You need to <quote>delete</quote> all
|
---|
2703 | printers using this driver in the <guilabel>Printers</guilabel> folder first. You will need Administrator
|
---|
2704 | privileges to do this.
|
---|
2705 | </para></note>
|
---|
2706 |
|
---|
2707 | <note><para>
|
---|
2708 | <indexterm><primary>rpcclient</primary><secondary>setdriver</secondary></indexterm>
|
---|
2709 | <indexterm><primary>CUPS PostScript</primary></indexterm>
|
---|
2710 | Once you have successfully downloaded the CUPS PostScript driver to a client, you can easily switch all
|
---|
2711 | printers to this one by proceeding as described in <link linkend="classicalprinting">Classical Printing
|
---|
2712 | Support</link>. Either change a driver for an existing printer by running the <guilabel>Printer
|
---|
2713 | Properties</guilabel> dialog, or use <command>rpcclient</command> with the <command>setdriver</command>
|
---|
2714 | subcommand.
|
---|
2715 | </para></note>
|
---|
2716 | </sect2>
|
---|
2717 |
|
---|
2718 | <sect2>
|
---|
2719 | <title>Windows CUPS PostScript Driver Versus Adobe Driver</title>
|
---|
2720 |
|
---|
2721 | <para>
|
---|
2722 | Are you interested in a comparison between the CUPS and the Adobe PostScript drivers? For our purposes, these
|
---|
2723 | are the most important items that weigh in favor of CUPS:
|
---|
2724 | </para>
|
---|
2725 |
|
---|
2726 | <itemizedlist>
|
---|
2727 | <listitem><para>No hassle with the Adobe EULA.</para></listitem>
|
---|
2728 |
|
---|
2729 | <listitem><para>No hassle with the question, <quote>Where do I
|
---|
2730 | get the ADOBE*.* driver files?</quote></para></listitem>
|
---|
2731 |
|
---|
2732 | <listitem><para>
|
---|
2733 | <indexterm><primary>PJL</primary></indexterm>
|
---|
2734 | The Adobe drivers (on request of the printer PPD associated with them) often put a PJL header in front of the
|
---|
2735 | main PostScript part of the print file. Thus, the print file starts with <parameter><1B
|
---|
2736 | >%-12345X</parameter> or <parameter><escape>%-12345X</parameter> instead of
|
---|
2737 | <parameter>%!PS</parameter>. This leads to the CUPS daemon autotyping the incoming file as a print-ready file,
|
---|
2738 | not initiating a pass through the <parameter>pstops</parameter> filter (to speak more technically, it is not
|
---|
2739 | regarded as the generic MIME-type <indexterm><primary>application/postscript</primary></indexterm>
|
---|
2740 | <parameter>application/postscript</parameter>, but as the more special MIME type
|
---|
2741 | <indexterm><primary>application/cups.vnd-postscript</primary></indexterm>
|
---|
2742 | <parameter>application/cups.vnd-postscript</parameter>), which therefore also leads to the page accounting in
|
---|
2743 | <parameter>/var/log/cups/page_log</parameter> not receiving the exact number of pages; instead the dummy page
|
---|
2744 | number of <quote>1</quote> is logged in a standard setup).
|
---|
2745 | </para></listitem>
|
---|
2746 |
|
---|
2747 | <listitem><para>The Adobe driver has more options to misconfigure the
|
---|
2748 | <indexterm><primary>Adobe driver</primary></indexterm>
|
---|
2749 | PostScript generated by it (like setting it inadvertently to
|
---|
2750 | <guilabel>Optimize for Speed</guilabel> instead of
|
---|
2751 | <guilabel>Optimize for Portability</guilabel>, which
|
---|
2752 | could lead to CUPS being unable to process it).</para></listitem>
|
---|
2753 |
|
---|
2754 | <listitem><para>The CUPS PostScript driver output sent by Windows
|
---|
2755 | <indexterm><primary>CUPS PostScript driver</primary></indexterm>
|
---|
2756 | clients to the CUPS server is guaranteed to autotype
|
---|
2757 | as the generic MIME type <parameter>application/postscript</parameter>,
|
---|
2758 | thus passing through the CUPS <parameter>pstops</parameter> filter and logging the
|
---|
2759 | correct number of pages in the <filename>page_log</filename> for
|
---|
2760 | accounting and quota purposes.</para></listitem>
|
---|
2761 |
|
---|
2762 | <listitem><para>
|
---|
2763 | <indexterm><primary>banner pages</primary></indexterm>
|
---|
2764 | The CUPS PostScript driver supports the sending of additional standard (IPP) print options by Windows
|
---|
2765 | NT/200x/XP clients. Such additional print options are naming the CUPS standard <emphasis>banner
|
---|
2766 | pages</emphasis> (or the custom ones, should they be installed at the time of driver download), using the CUPS
|
---|
2767 | page-label option, setting a job priority, and setting the scheduled time of printing (with the option to
|
---|
2768 | support additional useful IPP job attributes in the future).
|
---|
2769 | </para></listitem>
|
---|
2770 |
|
---|
2771 | <listitem><para>The CUPS PostScript driver supports the inclusion of
|
---|
2772 | the new <parameter>*cupsJobTicket</parameter> comments at the
|
---|
2773 | beginning of the PostScript file (which could be used in the future
|
---|
2774 | for all sorts of beneficial extensions on the CUPS side, but which will
|
---|
2775 | not disturb any other applications because they will regard it as a comment
|
---|
2776 | and simply ignore it).</para></listitem>
|
---|
2777 |
|
---|
2778 | <listitem><para>The CUPS PostScript driver will be the heart of the
|
---|
2779 | fully fledged CUPS IPP client for Windows NT/200x/XP to be released soon
|
---|
2780 | (probably alongside the first beta release for CUPS 1.2).</para></listitem>
|
---|
2781 | </itemizedlist>
|
---|
2782 |
|
---|
2783 | </sect2>
|
---|
2784 |
|
---|
2785 | <sect2>
|
---|
2786 | <title>Run cupsaddsmb (Quiet Mode)</title>
|
---|
2787 |
|
---|
2788 |
|
---|
2789 | <para>
|
---|
2790 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
2791 | <indexterm><primary>point 'n' print</primary></indexterm>
|
---|
2792 | The <command>cupsaddsmb</command> command copies the needed files into your <smbconfsection name="[print$]"/>
|
---|
2793 | share. Additionally, the PPD associated with this printer is copied from <filename>/etc/cups/ppd/</filename>
|
---|
2794 | to <smbconfsection name="[print$]"/>. There the files wait for convenient Windows client installations via
|
---|
2795 | Point'n'Print. Before we can run the command successfully, we need to be sure that we can authenticate toward
|
---|
2796 | Samba. If you have a small network, you are probably using user-level security (<smbconfoption
|
---|
2797 | name="security">user</smbconfoption>).
|
---|
2798 | </para>
|
---|
2799 |
|
---|
2800 | <para>
|
---|
2801 | Here is an example of a successfully run <command>cupsaddsmb</command> command:
|
---|
2802 | <indexterm><primary>banner pages</primary></indexterm>
|
---|
2803 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
2804 | <screen>
|
---|
2805 | &rootprompt;<userinput>cupsaddsmb -U root infotec_IS2027</userinput>
|
---|
2806 | Password for root required to access localhost via Samba: <userinput>['secret']</userinput>
|
---|
2807 | </screen></para>
|
---|
2808 |
|
---|
2809 | <para>
|
---|
2810 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
2811 | To share <emphasis>all</emphasis> printers and drivers, use the
|
---|
2812 | <option>-a</option> parameter instead of a printer name. Since
|
---|
2813 | <command>cupsaddsmb</command> <quote>exports</quote> the printer drivers to Samba, it should be
|
---|
2814 | obvious that it only works for queues with a CUPS driver associated.
|
---|
2815 | </para>
|
---|
2816 | </sect2>
|
---|
2817 |
|
---|
2818 | <sect2>
|
---|
2819 | <title>Run cupsaddsmb with Verbose Output</title>
|
---|
2820 |
|
---|
2821 |
|
---|
2822 | <para>
|
---|
2823 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
2824 | Probably you want to see what's going on. Use the
|
---|
2825 | <option>-v</option> parameter to get a more verbose output. The
|
---|
2826 | output below was edited for better readability: all <quote>\</quote> at the end of
|
---|
2827 | a line indicate that I inserted an artificial line break plus some
|
---|
2828 | indentation here:
|
---|
2829 | <indexterm><primary>rpcclient</primary><secondary>adddriver</secondary></indexterm>
|
---|
2830 | <indexterm><primary>rpcclient</primary><secondary>setdriver</secondary></indexterm>
|
---|
2831 | <screen>
|
---|
2832 | &rootprompt;<userinput>cupsaddsmb -U root -v infotec_2105</userinput>
|
---|
2833 | Password for root required to access localhost via &example.server.samba;:
|
---|
2834 | Running command: smbclient //localhost/print\$ -N -U'root%secret' \
|
---|
2835 | -c 'mkdir W32X86; \
|
---|
2836 | put /var/spool/cups/tmp/3e98bf2d333b5 W32X86/infotec_2105.ppd; \
|
---|
2837 | put /usr/share/cups/drivers/cupsdrvr.dll W32X86/cupsdrvr.dll; \
|
---|
2838 | put /usr/share/cups/drivers/cupsui.dll W32X86/cupsui.dll; \
|
---|
2839 | put /usr/share/cups/drivers/cups.hlp W32X86/cups.hlp'
|
---|
2840 | added interface ip=10.160.51.60 bcast=10.160.51.255 nmask=255.255.252.0
|
---|
2841 | Domain=[CUPS-PRINT] OS=[UNIX] Server=[Samba 2.2.7a]
|
---|
2842 | NT_STATUS_OBJECT_NAME_COLLISION making remote directory \W32X86
|
---|
2843 | putting file /var/spool/cups/tmp/3e98bf2d333b5 as \W32X86/infotec_2105.ppd
|
---|
2844 | putting file /usr/share/cups/drivers/cupsdrvr.dll as \W32X86/cupsdrvr.dll
|
---|
2845 | putting file /usr/share/cups/drivers/cupsui.dll as \W32X86/cupsui.dll
|
---|
2846 | putting file /usr/share/cups/drivers/cups.hlp as \W32X86/cups.hlp
|
---|
2847 |
|
---|
2848 | Running command: rpcclient localhost -N -U'root%secret'
|
---|
2849 | -c 'adddriver "Windows NT x86" \
|
---|
2850 | "infotec_2105:cupsdrvr.dll:infotec_2105.ppd:cupsui.dll:cups.hlp:NULL: \
|
---|
2851 | RAW:NULL"'
|
---|
2852 | cmd = adddriver "Windows NT x86" \
|
---|
2853 | "infotec_2105:cupsdrvr.dll:infotec_2105.ppd:cupsui.dll:cups.hlp:NULL: \
|
---|
2854 | RAW:NULL"
|
---|
2855 | Printer Driver infotec_2105 successfully installed.
|
---|
2856 |
|
---|
2857 | Running command: smbclient //localhost/print\$ -N -U'root%secret' \
|
---|
2858 | -c 'mkdir WIN40; \
|
---|
2859 | put /var/spool/cups/tmp/3e98bf2d333b5 WIN40/infotec_2105.PPD; \
|
---|
2860 | put /usr/share/cups/drivers/ADFONTS.MFM WIN40/ADFONTS.MFM; \
|
---|
2861 | put /usr/share/cups/drivers/ADOBEPS4.DRV WIN40/ADOBEPS4.DRV; \
|
---|
2862 | put /usr/share/cups/drivers/ADOBEPS4.HLP WIN40/ADOBEPS4.HLP; \
|
---|
2863 | put /usr/share/cups/drivers/DEFPRTR2.PPD WIN40/DEFPRTR2.PPD; \
|
---|
2864 | put /usr/share/cups/drivers/ICONLIB.DLL WIN40/ICONLIB.DLL; \
|
---|
2865 | put /usr/share/cups/drivers/PSMON.DLL WIN40/PSMON.DLL;'
|
---|
2866 | added interface ip=10.160.51.60 bcast=10.160.51.255 nmask=255.255.252.0
|
---|
2867 | Domain=[CUPS-PRINT] OS=[UNIX] Server=[Samba 2.2.7a]
|
---|
2868 | NT_STATUS_OBJECT_NAME_COLLISION making remote directory \WIN40
|
---|
2869 | putting file /var/spool/cups/tmp/3e98bf2d333b5 as \WIN40/infotec_2105.PPD
|
---|
2870 | putting file /usr/share/cups/drivers/ADFONTS.MFM as \WIN40/ADFONTS.MFM
|
---|
2871 | putting file /usr/share/cups/drivers/ADOBEPS4.DRV as \WIN40/ADOBEPS4.DRV
|
---|
2872 | putting file /usr/share/cups/drivers/ADOBEPS4.HLP as \WIN40/ADOBEPS4.HLP
|
---|
2873 | putting file /usr/share/cups/drivers/DEFPRTR2.PPD as \WIN40/DEFPRTR2.PPD
|
---|
2874 | putting file /usr/share/cups/drivers/ICONLIB.DLL as \WIN40/ICONLIB.DLL
|
---|
2875 | putting file /usr/share/cups/drivers/PSMON.DLL as \WIN40/PSMON.DLL
|
---|
2876 |
|
---|
2877 | Running command: rpcclient localhost -N -U'root%secret' \
|
---|
2878 | -c 'adddriver "Windows 4.0" \
|
---|
2879 | "infotec_2105:ADOBEPS4.DRV:infotec_2105.PPD:NULL:ADOBEPS4.HLP: \
|
---|
2880 | PSMON.DLL:RAW:ADOBEPS4.DRV,infotec_2105.PPD,ADOBEPS4.HLP,PSMON.DLL, \
|
---|
2881 | ADFONTS.MFM,DEFPRTR2.PPD,ICONLIB.DLL"'
|
---|
2882 | cmd = adddriver "Windows 4.0" "infotec_2105:ADOBEPS4.DRV:\
|
---|
2883 | infotec_2105.PPD:NULL:ADOBEPS4.HLP:PSMON.DLL:RAW:ADOBEPS4.DRV,\
|
---|
2884 | infotec_2105.PPD,ADOBEPS4.HLP,PSMON.DLL,ADFONTS.MFM,DEFPRTR2.PPD,\
|
---|
2885 | ICONLIB.DLL"
|
---|
2886 | Printer Driver infotec_2105 successfully installed.
|
---|
2887 |
|
---|
2888 | Running command: rpcclient localhost -N -U'root%secret' \
|
---|
2889 | -c 'setdriver infotec_2105 infotec_2105'
|
---|
2890 | cmd = setdriver infotec_2105 infotec_2105
|
---|
2891 | Successfully set infotec_2105 to driver infotec_2105.
|
---|
2892 | </screen></para>
|
---|
2893 |
|
---|
2894 | <warning><para>
|
---|
2895 | You will see the root password for the Samba account printed on screen.
|
---|
2896 | </para></warning>
|
---|
2897 |
|
---|
2898 | <para>
|
---|
2899 | If you look closely, you'll discover your root password was transferred unencrypted over the wire, so beware!
|
---|
2900 | Also, if you look further, you may discover error messages like NT_STATUS_OBJECT_NAME_COLLISION in the output.
|
---|
2901 | This will occur when the directories WIN40 and W32X86 already existed in the <smbconfsection name="[print$]"/>
|
---|
2902 | driver download share (from a previous driver installation). These are harmless warning messages.
|
---|
2903 | </para>
|
---|
2904 | </sect2>
|
---|
2905 |
|
---|
2906 | <sect2>
|
---|
2907 | <title>Understanding cupsaddsmb</title>
|
---|
2908 |
|
---|
2909 | <para>
|
---|
2910 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
2911 | What has happened? What did <command>cupsaddsmb</command> do? There are five stages of the procedure:
|
---|
2912 | </para>
|
---|
2913 |
|
---|
2914 | <orderedlist>
|
---|
2915 | <listitem><para>
|
---|
2916 | <indexterm><primary>IPP</primary></indexterm>
|
---|
2917 | Call the CUPS server via IPP and request the driver files and the PPD file for the named printer.</para></listitem>
|
---|
2918 |
|
---|
2919 | <listitem><para>Store the files temporarily in the local TEMPDIR (as defined in <filename>cupsd.conf</filename>).</para></listitem>
|
---|
2920 |
|
---|
2921 | <listitem><para>Connect via smbclient to the Samba server's <smbconfsection name="[print$]"/> share and put the files into the
|
---|
2922 | share's WIN40 (for Windows 9x/Me) and W32X86 (for Windows NT/200x/XP) subdirectories.</para></listitem>
|
---|
2923 |
|
---|
2924 | <listitem><para>
|
---|
2925 | <indexterm><primary>rpcclient</primary><secondary>adddriver</secondary></indexterm>
|
---|
2926 | Connect via rpcclient to the Samba server and execute the <command>adddriver</command> command with the correct parameters.
|
---|
2927 | </para></listitem>
|
---|
2928 |
|
---|
2929 | <listitem><para>
|
---|
2930 | <indexterm><primary>rpcclient</primary><secondary>setdriver</secondary></indexterm>
|
---|
2931 | Connect via rpcclient to the Samba server a second time and execute the <command>setdriver</command> command.</para></listitem>
|
---|
2932 | </orderedlist>
|
---|
2933 |
|
---|
2934 | <note>
|
---|
2935 | <para>
|
---|
2936 | You can run the <command>cupsaddsmb</command> utility with parameters to specify one remote host as Samba host
|
---|
2937 | and a second remote host as CUPS host. Especially if you want to get a deeper understanding, it is a good idea
|
---|
2938 | to try it and see more clearly what is going on (though in real life most people will have their CUPS and
|
---|
2939 | Samba servers run on the same host):
|
---|
2940 | <screen>
|
---|
2941 | &rootprompt;<userinput>cupsaddsmb -H sambaserver -h cupsserver -v printer</userinput>
|
---|
2942 | </screen>
|
---|
2943 | </para></note>
|
---|
2944 |
|
---|
2945 | </sect2>
|
---|
2946 |
|
---|
2947 | <sect2>
|
---|
2948 | <title>How to Recognize If cupsaddsmb Completed Successfully</title>
|
---|
2949 |
|
---|
2950 | <para>
|
---|
2951 | You <emphasis>must</emphasis> always check if the utility completed
|
---|
2952 | successfully in all fields. You need at minimum these three messages
|
---|
2953 | among the output:
|
---|
2954 | </para>
|
---|
2955 |
|
---|
2956 | <orderedlist>
|
---|
2957 | <listitem><para><emphasis>Printer Driver infotec_2105 successfully
|
---|
2958 | installed.</emphasis> # (for the W32X86 == Windows NT/200x/XP
|
---|
2959 | architecture).</para></listitem>
|
---|
2960 |
|
---|
2961 | <listitem><para><emphasis>Printer Driver infotec_2105 successfully
|
---|
2962 | installed.</emphasis> # (for the WIN40 == Windows 9x/Me
|
---|
2963 | architecture).</para></listitem>
|
---|
2964 |
|
---|
2965 | <listitem><para><emphasis>Successfully set [printerXPZ] to driver
|
---|
2966 | [printerXYZ].</emphasis></para></listitem>
|
---|
2967 | </orderedlist>
|
---|
2968 |
|
---|
2969 | <para>
|
---|
2970 | These messages are probably not easily recognized in the general
|
---|
2971 | output. If you run <command>cupsaddsmb</command> with the <option>-a</option>
|
---|
2972 | parameter (which tries to prepare <emphasis>all</emphasis> active CUPS
|
---|
2973 | printer drivers for download), you might miss if individual printer
|
---|
2974 | drivers had problems installing properly. A redirection of the
|
---|
2975 | output will help you analyze the results in retrospective.
|
---|
2976 | </para>
|
---|
2977 |
|
---|
2978 | <para>
|
---|
2979 | If you get:
|
---|
2980 | <screen>
|
---|
2981 | SetPrinter call failed!
|
---|
2982 | result was WERR_ACCESS_DENIED
|
---|
2983 | </screen>
|
---|
2984 | it means that you might have set <smbconfoption name="use client driver">yes</smbconfoption> for this printer.
|
---|
2985 | Setting it to <quote>no</quote> will solve the problem. Refer to the &smb.conf; man page for explanation of
|
---|
2986 | the <parameter>use client driver</parameter>.
|
---|
2987 | </para>
|
---|
2988 |
|
---|
2989 | <note><para>
|
---|
2990 | It is impossible to see any diagnostic output if you do not run <command>cupsaddsmb</command> in verbose mode.
|
---|
2991 | Therefore, we strongly recommend against use of the default quiet mode. It will hide any problems from you that
|
---|
2992 | might occur.
|
---|
2993 | </para></note>
|
---|
2994 | </sect2>
|
---|
2995 |
|
---|
2996 | <sect2>
|
---|
2997 | <title>cupsaddsmb with a Samba PDC</title>
|
---|
2998 |
|
---|
2999 | <para>
|
---|
3000 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
3001 | <indexterm><primary>PDC</primary></indexterm>
|
---|
3002 | Can't get the standard <command>cupsaddsmb</command> command to run on a Samba PDC? Are you asked for the
|
---|
3003 | password credential again and again, and the command just will not take off at all? Try one of these
|
---|
3004 | variations:
|
---|
3005 | </para>
|
---|
3006 |
|
---|
3007 | <para><screen>
|
---|
3008 | &rootprompt;<userinput>cupsaddsmb -U &example.workgroup;\\root -v printername</userinput>
|
---|
3009 | &rootprompt;<userinput>cupsaddsmb -H &example.pdc.samba; -U &example.workgroup;\\root -v printername</userinput>
|
---|
3010 | &rootprompt;<userinput>cupsaddsmb -H &example.pdc.samba; -U &example.workgroup;\\root -h cups-server -v printername</userinput>
|
---|
3011 | </screen></para>
|
---|
3012 |
|
---|
3013 | <para>
|
---|
3014 | (Note the two backslashes: the first one is required to <quote>escape</quote> the second one).
|
---|
3015 | </para>
|
---|
3016 | </sect2>
|
---|
3017 |
|
---|
3018 | <sect2>
|
---|
3019 | <title>cupsaddsmb Flowchart</title>
|
---|
3020 |
|
---|
3021 | <para>
|
---|
3022 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
3023 | <indexterm><primary>raw print</primary></indexterm>
|
---|
3024 | <link linkend="small14">The cupsaddsmb Flowchart</link> shows a chart about the procedures, command flows, and
|
---|
3025 | data flows of the <command>cupaddsmb</command> command. Note again: cupsaddsmb is
|
---|
3026 | not intended to, and does not work with, raw print queues!
|
---|
3027 | </para>
|
---|
3028 |
|
---|
3029 | <figure id="small14">
|
---|
3030 | <title>cupsaddsmb Flowchart.</title>
|
---|
3031 | <imagefile>14small</imagefile></figure>
|
---|
3032 | </sect2>
|
---|
3033 |
|
---|
3034 | <sect2>
|
---|
3035 | <title>Installing the PostScript Driver on a Client</title>
|
---|
3036 |
|
---|
3037 | <para>
|
---|
3038 | <indexterm><primary>point'n'print</primary></indexterm>
|
---|
3039 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
3040 | After <command>cupsaddsmb</command> is completed, your driver is prepared for the clients to use. Here are the
|
---|
3041 | steps you must perform to download and install it via Point'n'Print. From a Windows client, browse to the
|
---|
3042 | CUPS/Samba server:
|
---|
3043 | </para>
|
---|
3044 |
|
---|
3045 | <itemizedlist>
|
---|
3046 |
|
---|
3047 | <listitem><para>
|
---|
3048 | <indexterm><primary>"Printers" folder</primary></indexterm>
|
---|
3049 | Open the <guilabel>Printers</guilabel> share of Samba in Network Neighborhood.</para></listitem>
|
---|
3050 |
|
---|
3051 | <listitem><para>Right-click on the printer in question.</para></listitem>
|
---|
3052 |
|
---|
3053 | <listitem><para>From the opening context menu select
|
---|
3054 | <guimenuitem>Install...</guimenuitem> or
|
---|
3055 | <guimenuitem>Connect...</guimenuitem> (depending on the Windows version you use).</para></listitem>
|
---|
3056 | </itemizedlist>
|
---|
3057 |
|
---|
3058 | <para>
|
---|
3059 | After a few seconds, there should be a new printer in your client's <emphasis>local</emphasis>
|
---|
3060 | <guilabel>Printers</guilabel> folder. On Windows XP it will follow a naming convention of
|
---|
3061 | <emphasis>PrinterName on SambaServer</emphasis>. (In my current case it is infotec_2105 on kde-bitshop). If
|
---|
3062 | you want to test it and send your first job from an application like Microsoft Word,
|
---|
3063 | the new printer appears in a
|
---|
3064 | <filename>\\SambaServer\PrinterName</filename> entry in the drop-down list of available printers.
|
---|
3065 | </para>
|
---|
3066 |
|
---|
3067 | <para>
|
---|
3068 | <indexterm><primary>PPD</primary></indexterm>
|
---|
3069 | <indexterm><primary>Adobe PostScript driver</primary></indexterm>
|
---|
3070 | <indexterm><primary>net use lpt1:</primary></indexterm>
|
---|
3071 | <command>cupsaddsmb</command> will only reliably work with CUPS version 1.1.15 or higher and with Samba
|
---|
3072 | version 2.2.4, or later. If it does not work, or if the automatic printer driver download to the clients does
|
---|
3073 | not succeed, you can still manually install the CUPS printer PPD on top of the Adobe PostScript driver on
|
---|
3074 | clients. Then point the client's printer queue to the Samba printer share for a UNC type of connection:
|
---|
3075 | <screen>
|
---|
3076 | &dosprompt;<userinput>net use lpt1: \\sambaserver\printershare /user:ntadmin</userinput>
|
---|
3077 | </screen>
|
---|
3078 | should you desire to use the CUPS networked PostScript RIP functions. (Note that user <quote>ntadmin</quote>
|
---|
3079 | needs to be a valid Samba user with the required privileges to access the printershare.) This sets up the
|
---|
3080 | printer connection in the traditional LanMan way (not using MS-RPC).
|
---|
3081 | </para>
|
---|
3082 | </sect2>
|
---|
3083 |
|
---|
3084 | <sect2 id="cups-avoidps1">
|
---|
3085 | <title>Avoiding Critical PostScript Driver Settings on the Client</title>
|
---|
3086 |
|
---|
3087 | <para>
|
---|
3088 | Printing works, but there are still problems. Most jobs print well, some do not print at all. Some jobs have
|
---|
3089 | problems with fonts, which do not look very good. Some jobs print fast and some are dead-slow. Many of these
|
---|
3090 | problems can be greatly reduced or even completely eliminated if you follow a few guidelines. Remember, if
|
---|
3091 | your print device is not PostScript-enabled, you are treating your Ghostscript installation on your CUPS host
|
---|
3092 | with the output your client driver settings produce. Treat it well:
|
---|
3093 | </para>
|
---|
3094 |
|
---|
3095 | <itemizedlist>
|
---|
3096 | <listitem><para>
|
---|
3097 | Avoid the PostScript Output Option: Optimize for Speed setting. Use the Optimize for Portability instead
|
---|
3098 | (Adobe PostScript driver).</para></listitem>
|
---|
3099 |
|
---|
3100 | <listitem><para>
|
---|
3101 | Don't use the Page Independence: NO setting. Instead, use Page Independence: YES (CUPS PostScript Driver).
|
---|
3102 | </para></listitem>
|
---|
3103 |
|
---|
3104 | <listitem><para>
|
---|
3105 | Recommended is the True Type Font Downloading Option: Native True Type over Automatic and Outline;
|
---|
3106 | you should by all means avoid Bitmap (Adobe PostScript Driver).</para></listitem>
|
---|
3107 |
|
---|
3108 | <listitem><para>
|
---|
3109 | Choose True Type Font: Download as Softfont into Printer over the default Replace by Device
|
---|
3110 | Font (for exotic fonts, you may need to change it back to get a printout at all; Adobe).</para></listitem>
|
---|
3111 |
|
---|
3112 | <listitem><para>
|
---|
3113 | Sometimes you can choose PostScript Language Level: in case of problems try 2
|
---|
3114 | instead of 3 (the latest ESP Ghostscript package handles Level 3 PostScript very well; Adobe).
|
---|
3115 | </para></listitem>
|
---|
3116 |
|
---|
3117 | <listitem><para>
|
---|
3118 | Say Yes to PostScript Error Handler (Adobe).</para></listitem>
|
---|
3119 | </itemizedlist>
|
---|
3120 |
|
---|
3121 | </sect2>
|
---|
3122 | </sect1>
|
---|
3123 |
|
---|
3124 | <sect1>
|
---|
3125 | <title>Installing PostScript Driver Files Manually Using rpcclient</title>
|
---|
3126 |
|
---|
3127 | <para>
|
---|
3128 | Of course, you can run all the commands that are embedded into the
|
---|
3129 | cupsaddsmb convenience utility yourself, one by one, and upload
|
---|
3130 | and prepare the driver files for future client downloads.
|
---|
3131 | </para>
|
---|
3132 |
|
---|
3133 | <orderedlist>
|
---|
3134 | <listitem><para>Prepare Samba (a CUPS print queue with the name of the
|
---|
3135 | printer should be there. We are providing the driver now).</para></listitem>
|
---|
3136 |
|
---|
3137 | <listitem><para>Copy all files to <smbconfsection name="[print$]"/>.</para></listitem>
|
---|
3138 |
|
---|
3139 | <listitem><para>
|
---|
3140 | <indexterm><primary>rpcclient</primary><secondary>adddriver</secondary></indexterm>
|
---|
3141 | Run <command>rpcclient adddriver</command>
|
---|
3142 | (for each client architecture you want to support).</para></listitem>
|
---|
3143 |
|
---|
3144 | <listitem><para>
|
---|
3145 | <indexterm><primary>rpcclient</primary><secondary>setdriver</secondary></indexterm>
|
---|
3146 | Run <command>rpcclient setdriver.</command></para></listitem>
|
---|
3147 | </orderedlist>
|
---|
3148 |
|
---|
3149 | <para>
|
---|
3150 | <indexterm><primary>rpcclient</primary><secondary>enumports</secondary></indexterm>
|
---|
3151 | <indexterm><primary>rpcclient</primary><secondary>enumprinters</secondary></indexterm>
|
---|
3152 | <indexterm><primary>rpcclient</primary><secondary>enumdrivers</secondary></indexterm>
|
---|
3153 | <indexterm><primary>rpcclient</primary><secondary>setdriver</secondary></indexterm>
|
---|
3154 | <indexterm><primary>rpcclient</primary><secondary>adddriver</secondary></indexterm>
|
---|
3155 | We are going to do this now. First, read the man page on <parameter>rpcclient</parameter> to get a first idea.
|
---|
3156 | Look at all the printing-related subcommands: <command>enumprinters</command>, <command>enumdrivers</command>,
|
---|
3157 | <command>enumports</command>, <command>adddriver</command>, and <command>setdriver</command> are among the
|
---|
3158 | most interesting ones. <parameter>rpcclient</parameter> implements an important part of the MS-RPC protocol.
|
---|
3159 | You can use it to query (and command) a Windows NT (or 200x/XP) PC, too. MS-RPC is used by Windows clients,
|
---|
3160 | among other things, to benefit from the Point'n'Print features. Samba can now mimic this as well.
|
---|
3161 | </para>
|
---|
3162 |
|
---|
3163 | <sect2>
|
---|
3164 | <title>A Check of the rpcclient man Page</title>
|
---|
3165 |
|
---|
3166 | <para>
|
---|
3167 | First let's check the <parameter>rpcclient</parameter> man page. Here are two relevant passages:
|
---|
3168 | </para>
|
---|
3169 |
|
---|
3170 | <para>
|
---|
3171 | <indexterm><primary>adddriver</primary></indexterm>
|
---|
3172 | <indexterm><primary>AddPrinterDriver()</primary></indexterm>
|
---|
3173 | <indexterm><primary>getdriverdir</primary></indexterm>
|
---|
3174 | <command>adddriver <arch> <config></command> Execute an <command>AddPrinterDriver()</command> RPC
|
---|
3175 | to install the printer driver information on the server. The driver files should already exist in the
|
---|
3176 | directory returned by <command>getdriverdir</command>. Possible values for <parameter>arch</parameter> are the
|
---|
3177 | same as those for the <command>getdriverdir</command> command. The <parameter>config</parameter> parameter is
|
---|
3178 | defined as follows:
|
---|
3179 | <screen>
|
---|
3180 | Long Printer Name:\
|
---|
3181 | Driver File Name:\
|
---|
3182 | Data File Name:\
|
---|
3183 | Config File Name:\
|
---|
3184 | Help File Name:\
|
---|
3185 | Language Monitor Name:\
|
---|
3186 | Default Data Type:\
|
---|
3187 | Comma Separated list of Files
|
---|
3188 | </screen></para>
|
---|
3189 |
|
---|
3190 | <para>
|
---|
3191 | Any empty fields should be entered as the string <quote>NULL</quote>.
|
---|
3192 | </para>
|
---|
3193 |
|
---|
3194 | <para>
|
---|
3195 | Samba does not need to support the concept of print monitors, since these only apply to local printers whose
|
---|
3196 | drivers can use a bidirectional link for communication. This field should be <quote>NULL</quote>. On a remote
|
---|
3197 | NT print server, the print monitor for a driver must already be installed before adding the driver or else the
|
---|
3198 | RPC will fail.
|
---|
3199 | </para>
|
---|
3200 |
|
---|
3201 | <para>
|
---|
3202 | <indexterm><primary>setdriver</primary></indexterm>
|
---|
3203 | <indexterm><primary>SetPrinter()</primary></indexterm>
|
---|
3204 | <command>setdriver <printername> <drivername></command> Execute a <command>SetPrinter()</command>
|
---|
3205 | command to update the printer driver associated with an installed printer. The printer driver must already be
|
---|
3206 | correctly installed on the print server.
|
---|
3207 | </para>
|
---|
3208 |
|
---|
3209 | <para>
|
---|
3210 | <indexterm><primary>enumprinters</primary></indexterm>
|
---|
3211 | <indexterm><primary>enumdrivers</primary></indexterm>
|
---|
3212 | See also the <command>enumprinters</command> and <command>enumdrivers</command> commands to
|
---|
3213 | obtain a list of installed printers and drivers.
|
---|
3214 | </para>
|
---|
3215 |
|
---|
3216 | </sect2>
|
---|
3217 |
|
---|
3218 | <sect2>
|
---|
3219 | <title>Understanding the rpcclient man Page</title>
|
---|
3220 |
|
---|
3221 | <para>
|
---|
3222 | <indexterm><primary>rpcclient</primary><secondary>adddriver</secondary></indexterm>
|
---|
3223 | The <emphasis>exact</emphasis> format isn't made too clear by the man page, since you have to deal with some
|
---|
3224 | parameters containing spaces. Here is a better description for it. We have line-broken the command and
|
---|
3225 | indicated the breaks with <quote>\</quote>. Usually you would type the command in one line without the line
|
---|
3226 | breaks:
|
---|
3227 | <screen>
|
---|
3228 | adddriver "Architecture" \
|
---|
3229 | "LongPrinterName:DriverFile:DataFile:ConfigFile:HelpFile:\
|
---|
3230 | LanguageMonitorFile:DataType:ListOfFiles,Comma-separated"
|
---|
3231 | </screen></para>
|
---|
3232 |
|
---|
3233 | <para>
|
---|
3234 | What the man pages denote as a simple <parameter><config></parameter> keyword in reality consists of
|
---|
3235 | eight colon-separated fields. The last field may take multiple (in some very insane cases, even 20 different
|
---|
3236 | additional) files. This might sound confusing at first. What the man pages call the
|
---|
3237 | <quote>LongPrinterName</quote> in reality should be called the <quote>Driver Name</quote>. You can name it
|
---|
3238 | anything you want, as long as you use this name later in the <command>rpcclient ... setdriver</command>
|
---|
3239 | command. For practical reasons, many name the driver the same as the printer.
|
---|
3240 | </para>
|
---|
3241 |
|
---|
3242 | <para>
|
---|
3243 | It isn't simple at all. I hear you asking: <quote>How do I know which files are Driver File</quote>,
|
---|
3244 | <quote>Data File</quote>, <quote>Config File</quote>, <quote>Help File</quote> and <quote>Language Monitor
|
---|
3245 | File in each case?</quote> For an answer, you may want to have a look at how a Windows NT box with a shared
|
---|
3246 | printer presents the files to us. Remember that this whole procedure has to be developed by the Samba Team by
|
---|
3247 | listening to the traffic caused by Windows computers on the wire. We may as well turn to a Windows box now and
|
---|
3248 | access it from a UNIX workstation. We will query it with <command>rpcclient</command> to see what it tells us
|
---|
3249 | and try to understand the man page more clearly.
|
---|
3250 | </para>
|
---|
3251 | </sect2>
|
---|
3252 |
|
---|
3253 | <sect2>
|
---|
3254 | <title>Producing an Example by Querying a Windows Box</title>
|
---|
3255 |
|
---|
3256 | <para>
|
---|
3257 | <indexterm><primary>rpcclient</primary><secondary>getdriver</secondary></indexterm>
|
---|
3258 | <indexterm><primary>rpcclient</primary><secondary>getprinter</secondary></indexterm>
|
---|
3259 | We could run <command>rpcclient</command> with a <command>getdriver</command> or a
|
---|
3260 | <command>getprinter</command> subcommand (in level 3 verbosity) against it. Just sit down at a UNIX or Linux
|
---|
3261 | workstation with the Samba utilities installed, then type the following command:
|
---|
3262 | <screen>
|
---|
3263 | &rootprompt;<userinput>rpcclient -U'user%secret' NT-SERVER -c 'getdriver printername 3'</userinput>
|
---|
3264 | </screen></para>
|
---|
3265 |
|
---|
3266 | <para>
|
---|
3267 | From the result it should become clear which is which. Here is an example from my installation:
|
---|
3268 | <indexterm><primary>rpcclient</primary><secondary>getdriver</secondary></indexterm>
|
---|
3269 | <screen>
|
---|
3270 | &rootprompt;<userinput>rpcclient -U'Danka%xxxx' W200xSERVER \
|
---|
3271 | -c'getdriver "DANKA InfoStream Virtual Printer" 3'</userinput>
|
---|
3272 | cmd = getdriver "DANKA InfoStream Virtual Printer" 3
|
---|
3273 |
|
---|
3274 | [Windows NT x86]
|
---|
3275 | Printer Driver Info 3:
|
---|
3276 | Version: [2]
|
---|
3277 | Driver Name: [DANKA InfoStream]
|
---|
3278 | Architecture: [Windows NT x86]
|
---|
3279 | Driver Path: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\PSCRIPT.DLL]
|
---|
3280 | Datafile: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\INFOSTRM.PPD]
|
---|
3281 | Configfile: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\PSCRPTUI.DLL]
|
---|
3282 | Helpfile: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\PSCRIPT.HLP]
|
---|
3283 |
|
---|
3284 | Dependentfiles: []
|
---|
3285 | Dependentfiles: []
|
---|
3286 | Dependentfiles: []
|
---|
3287 | Dependentfiles: []
|
---|
3288 | Dependentfiles: []
|
---|
3289 | Dependentfiles: []
|
---|
3290 | Dependentfiles: []
|
---|
3291 |
|
---|
3292 | Monitorname: []
|
---|
3293 | Defaultdatatype: []
|
---|
3294 | </screen></para>
|
---|
3295 |
|
---|
3296 | <para>
|
---|
3297 | Some printer drivers list additional files under the label <parameter>Dependentfiles</parameter>, and these
|
---|
3298 | would go into the last field <parameter>ListOfFiles,Comma-separated</parameter>. For the CUPS PostScript
|
---|
3299 | drivers, we do not need any (nor would we for the Adobe PostScript driver); therefore, the field will get a
|
---|
3300 | <quote>NULL</quote> entry.
|
---|
3301 | </para>
|
---|
3302 | </sect2>
|
---|
3303 |
|
---|
3304 | <sect2>
|
---|
3305 | <title>Requirements for adddriver and setdriver to Succeed</title>
|
---|
3306 |
|
---|
3307 | <para>
|
---|
3308 | <indexterm><primary>rpcclient</primary><secondary>adddriver</secondary></indexterm>
|
---|
3309 | <indexterm><primary>cupsaddsmb</primary></indexterm>
|
---|
3310 | <indexterm><primary>setdriver</primary></indexterm>
|
---|
3311 | From the man page (and from the quoted output of <command>cupsaddsmb</command> above) it becomes clear that
|
---|
3312 | you need to have certain conditions in order to make the manual uploading and initializing of the driver files
|
---|
3313 | succeed. The two <command>rpcclient</command> subcommands (<command>adddriver</command> and
|
---|
3314 | <command>setdriver</command>) need to encounter the following preconditions to complete successfully:
|
---|
3315 | </para>
|
---|
3316 |
|
---|
3317 | <itemizedlist>
|
---|
3318 | <listitem><para>You are connected as <smbconfoption name="printer admin"/> or root (this is
|
---|
3319 | <emphasis>not</emphasis> the <quote>Printer Operators</quote> group in NT, but the <emphasis>printer
|
---|
3320 | admin</emphasis> group as defined in the <smbconfsection name="[global]"/> section of &smb.conf;).
|
---|
3321 | </para></listitem>
|
---|
3322 |
|
---|
3323 | <listitem><para>Copy all required driver files to <filename>\\SAMBA\print$\w32x86</filename> and
|
---|
3324 | <filename>\\SAMBA\print$\win40</filename> as appropriate. They will end up in the <quote>0</quote> respective
|
---|
3325 | <quote>2</quote> subdirectories later. For now, <emphasis>do not</emphasis> put them there; they'll be
|
---|
3326 | automatically used by the <command>adddriver</command> subcommand. (If you use <command>smbclient</command> to
|
---|
3327 | put the driver files into the share, note that you need to escape the <quote>$</quote>: <command>smbclient
|
---|
3328 | //sambaserver/print\$ -U root.</command>)</para></listitem>
|
---|
3329 |
|
---|
3330 | <listitem><para>The user you're connecting as must be able to write to
|
---|
3331 | the <smbconfsection name="[print$]"/> share and create
|
---|
3332 | subdirectories.</para></listitem>
|
---|
3333 |
|
---|
3334 | <listitem><para>The printer you are going to set up for the Windows
|
---|
3335 | clients needs to be installed in CUPS already.</para></listitem>
|
---|
3336 |
|
---|
3337 | <listitem><para>
|
---|
3338 | <indexterm><primary>rpcclient</primary><secondary>setdriver</secondary></indexterm>
|
---|
3339 | <indexterm><primary>rpcclient</primary><secondary>enumprinters</secondary></indexterm>
|
---|
3340 | The CUPS printer must be known to Samba; otherwise the <command>setdriver</command> subcommand fails with an
|
---|
3341 | NT_STATUS_UNSUCCESSFUL error. To check if the printer is known by Samba, you may use the
|
---|
3342 | <command>enumprinters</command> subcommand to <command>rpcclient</command>. A long-standing bug prevented a
|
---|
3343 | proper update of the printer list until every smbd process had received a SIGHUP or was restarted. Remember
|
---|
3344 | this in case you've created the CUPS printer just recently and encounter problems: try restarting Samba.
|
---|
3345 | </para></listitem>
|
---|
3346 | </itemizedlist>
|
---|
3347 | </sect2>
|
---|
3348 |
|
---|
3349 | <sect2>
|
---|
3350 | <title>Manual Driver Installation in 15 Steps</title>
|
---|
3351 |
|
---|
3352 | <para>
|
---|
3353 | We are going to install a printer driver now by manually executing all
|
---|
3354 | required commands. Because this may seem a rather complicated process at
|
---|
3355 | first, we go through the procedure step by step, explaining every
|
---|
3356 | single action item as it comes up.
|
---|
3357 | </para>
|
---|
3358 |
|
---|
3359 | <procedure>
|
---|
3360 | <title>Manual Driver Installation</title>
|
---|
3361 |
|
---|
3362 | <step>
|
---|
3363 | <title>Install the printer on CUPS.</title>
|
---|
3364 |
|
---|
3365 | <para><screen>
|
---|
3366 | &rootprompt;<userinput>lpadmin -p mysmbtstprn -v socket://10.160.51.131:9100 -E \
|
---|
3367 | -P canonIR85.ppd</userinput>
|
---|
3368 | </screen></para>
|
---|
3369 |
|
---|
3370 | <para>
|
---|
3371 | This installs a printer with the name <parameter>mysmbtstprn</parameter>
|
---|
3372 | to the CUPS system. The printer is accessed via a socket
|
---|
3373 | (a.k.a. JetDirect or Direct TCP/IP) connection. You need to be root
|
---|
3374 | for this step.
|
---|
3375 | </para>
|
---|
3376 | </step>
|
---|
3377 |
|
---|
3378 | <step>
|
---|
3379 | <title>(Optional.) Check if the printer is recognized by Samba.</title>
|
---|
3380 |
|
---|
3381 | <para>
|
---|
3382 | <indexterm><primary>rpcclient</primary><secondary>enumprinters</secondary></indexterm>
|
---|
3383 | <screen>
|
---|
3384 | &rootprompt;<userinput>rpcclient -Uroot%xxxx -c 'enumprinters' localhost \
|
---|
3385 | | grep -C2 mysmbtstprn</userinput>
|
---|
3386 | flags:[0x800000]
|
---|
3387 | name:[\\kde-bitshop\mysmbtstprn]
|
---|
3388 | description:[\\kde-bitshop\mysmbtstprn,,mysmbtstprn]
|
---|
3389 | comment:[mysmbtstprn]
|
---|
3390 | </screen>
|
---|
3391 | </para>
|
---|
3392 |
|
---|
3393 | <para>
|
---|
3394 | This should show the printer in the list. If not, stop and restart the Samba daemon (smbd) or send a HUP signal:
|
---|
3395 | <screen>
|
---|
3396 | &rootprompt;<userinput>kill -HUP `pidof smbd`</userinput>
|
---|
3397 | </screen>
|
---|
3398 | Check again. Troubleshoot and repeat until successful. Note the <quote>empty</quote> field between the two
|
---|
3399 | commas in the <quote>description</quote> line. The driver name would appear here if there was one already. You
|
---|
3400 | need to know root's Samba password (as set by the <command>smbpasswd</command> command) for this step and most
|
---|
3401 | of the following steps. Alternatively, you can authenticate as one of the users from the <quote>write
|
---|
3402 | list</quote> as defined in &smb.conf; for <smbconfsection name="[print$]"/>.
|
---|
3403 | </para>
|
---|
3404 | </step>
|
---|
3405 |
|
---|
3406 | <step>
|
---|
3407 | <title>(Optional.) Check if Samba knows a driver for the printer.</title>
|
---|
3408 |
|
---|
3409 | <para>
|
---|
3410 | <indexterm><primary>rpcclient</primary><secondary>getprinter</secondary></indexterm>
|
---|
3411 | <indexterm><primary>rpcclient</primary><secondary>getdriver</secondary></indexterm>
|
---|
3412 | <screen>
|
---|
3413 | &rootprompt;<userinput>rpcclient -Uroot%xxxx -c 'getprinter mysmbtstprn 2'\
|
---|
3414 | localhost | grep driver </userinput>
|
---|
3415 |
|
---|
3416 | drivername:[]
|
---|
3417 |
|
---|
3418 | &rootprompt;<userinput>rpcclient -Uroot%xxxx -c 'getprinter mysmbtstprn 2' \
|
---|
3419 | localhost | grep -C4 driv</userinput>
|
---|
3420 |
|
---|
3421 | servername:[\\kde-bitshop]
|
---|
3422 | printername:[\\kde-bitshop\mysmbtstprn]
|
---|
3423 | sharename:[mysmbtstprn]
|
---|
3424 | portname:[Samba Printer Port]
|
---|
3425 | drivername:[]
|
---|
3426 | comment:[mysmbtstprn]
|
---|
3427 | location:[]
|
---|
3428 | sepfile:[]
|
---|
3429 | printprocessor:[winprint]
|
---|
3430 |
|
---|
3431 | &rootprompt;<userinput>rpcclient -U root%xxxx -c 'getdriver mysmbtstprn' localhost</userinput>
|
---|
3432 | result was WERR_UNKNOWN_PRINTER_DRIVER
|
---|
3433 | </screen></para>
|
---|
3434 |
|
---|
3435 | <para>
|
---|
3436 | None of the three commands shown above should show a driver.
|
---|
3437 | This step was done for the purpose of demonstrating this condition. An
|
---|
3438 | attempt to connect to the printer at this stage will prompt a
|
---|
3439 | message along the lines of, <quote>The server does not have the required printer
|
---|
3440 | driver installed.</quote>
|
---|
3441 | </para>
|
---|
3442 | </step>
|
---|
3443 |
|
---|
3444 | <step>
|
---|
3445 | <title>Put all required driver files into Samba's
|
---|
3446 | [print$].</title>
|
---|
3447 |
|
---|
3448 | <para><screen>
|
---|
3449 | &rootprompt;<userinput>smbclient //localhost/print\$ -U 'root%xxxx' \
|
---|
3450 | -c 'cd W32X86; \
|
---|
3451 | put /etc/cups/ppd/mysmbtstprn.ppd mysmbtstprn.PPD; \
|
---|
3452 | put /usr/share/cups/drivers/cupsui.dll cupsui.dll; \
|
---|
3453 | put /usr/share/cups/drivers/cupsdrvr.dll cupsdrvr.dll; \
|
---|
3454 | put /usr/share/cups/drivers/cups.hlp cups.hlp'</userinput>
|
---|
3455 | </screen></para>
|
---|
3456 |
|
---|
3457 | <para>
|
---|
3458 | (This command should be entered in one long single line. Line breaks and the line ends indicated by
|
---|
3459 | <quote>\</quote> have been inserted for readability reasons.) This step is <emphasis>required</emphasis> for
|
---|
3460 | the next one to succeed. It makes the driver files physically present in the <smbconfsection name="[print$]"/>
|
---|
3461 | share. However, clients would still not be able to install them, because Samba does not yet treat them as
|
---|
3462 | driver files. A client asking for the driver would still be presented with a <quote>not installed here</quote>
|
---|
3463 | message.
|
---|
3464 | </para>
|
---|
3465 | </step>
|
---|
3466 |
|
---|
3467 | <step>
|
---|
3468 | <title>Verify where the driver files are now.</title>
|
---|
3469 |
|
---|
3470 | <para><screen>
|
---|
3471 | &rootprompt;<userinput>ls -l /etc/samba/drivers/W32X86/</userinput>
|
---|
3472 | total 669
|
---|
3473 | drwxr-sr-x 2 root ntadmin 532 May 25 23:08 2
|
---|
3474 | drwxr-sr-x 2 root ntadmin 670 May 16 03:15 3
|
---|
3475 | -rwxr--r-- 1 root ntadmin 14234 May 25 23:21 cups.hlp
|
---|
3476 | -rwxr--r-- 1 root ntadmin 278380 May 25 23:21 cupsdrvr.dll
|
---|
3477 | -rwxr--r-- 1 root ntadmin 215848 May 25 23:21 cupsui.dll
|
---|
3478 | -rwxr--r-- 1 root ntadmin 169458 May 25 23:21 mysmbtstprn.PPD
|
---|
3479 | </screen></para>
|
---|
3480 |
|
---|
3481 | <para>
|
---|
3482 | The driver files now are in the W32X86 architecture <quote>root</quote> of
|
---|
3483 | <smbconfsection name="[print$]"/>.
|
---|
3484 | </para>
|
---|
3485 | </step>
|
---|
3486 |
|
---|
3487 | <step>
|
---|
3488 | <title>Tell Samba that these are driver files (<command>adddriver</command>).</title>
|
---|
3489 |
|
---|
3490 | <para>
|
---|
3491 | <indexterm><primary>rpcclient</primary><secondary>adddriver</secondary></indexterm>
|
---|
3492 | <screen>
|
---|
3493 | &rootprompt;<userinput>rpcclient -Uroot%xxxx -c 'adddriver "Windows NT x86" \
|
---|
3494 | "mydrivername:cupsdrvr.dll:mysmbtstprn.PPD: \
|
---|
3495 | cupsui.dll:cups.hlp:NULL:RAW:NULL"' \
|
---|
3496 | localhost</userinput>
|
---|
3497 | Printer Driver mydrivername successfully installed.
|
---|
3498 | </screen></para>
|
---|
3499 |
|
---|
3500 | <para>
|
---|
3501 | You cannot repeat this step if it fails. It could fail even as a result of a simple typo. It will most likely
|
---|
3502 | have moved a part of the driver files into the <quote>2</quote> subdirectory. If this step fails, you need to
|
---|
3503 | go back to the fourth step and repeat it before you can try this one again. In this step, you need to choose a
|
---|
3504 | name for your driver. It is normally a good idea to use the same name as is used for the printer name;
|
---|
3505 | however, in big installations you may use this driver for a number of printers that obviously have different
|
---|
3506 | names, so the name of the driver is not fixed.
|
---|
3507 | </para>
|
---|
3508 | </step>
|
---|
3509 |
|
---|
3510 | <step>
|
---|
3511 | <title>Verify where the driver files are now.</title>
|
---|
3512 |
|
---|
3513 | <para><screen>
|
---|
3514 | &rootprompt;<userinput>ls -l /etc/samba/drivers/W32X86/</userinput>
|
---|
3515 | total 1
|
---|
3516 | drwxr-sr-x 2 root ntadmin 532 May 25 23:22 2
|
---|
3517 | drwxr-sr-x 2 root ntadmin 670 May 16 03:15 3
|
---|
3518 |
|
---|
3519 | &rootprompt;<userinput>ls -l /etc/samba/drivers/W32X86/2</userinput>
|
---|
3520 | total 5039
|
---|
3521 | [....]
|
---|
3522 | -rwxr--r-- 1 root ntadmin 14234 May 25 23:21 cups.hlp
|
---|
3523 | -rwxr--r-- 1 root ntadmin 278380 May 13 13:53 cupsdrvr.dll
|
---|
3524 | -rwxr--r-- 1 root ntadmin 215848 May 13 13:53 cupsui.dll
|
---|
3525 | -rwxr--r-- 1 root ntadmin 169458 May 25 23:21 mysmbtstprn.PPD
|
---|
3526 | </screen></para>
|
---|
3527 |
|
---|
3528 | <para>
|
---|
3529 | Notice how step 6 also moved the driver files to the appropriate
|
---|
3530 | subdirectory. Compare this with the situation after step 5.
|
---|
3531 | </para>
|
---|
3532 | </step>
|
---|
3533 |
|
---|
3534 | <step>
|
---|
3535 | <title>(Optional.) Verify if Samba now recognizes the driver.</title>
|
---|
3536 |
|
---|
3537 | <para>
|
---|
3538 | <indexterm><primary>rpcclient</primary><secondary>enumdrivers</secondary></indexterm>
|
---|
3539 | <screen>
|
---|
3540 | &rootprompt;<userinput>rpcclient -Uroot%xxxx -c 'enumdrivers 3' \
|
---|
3541 | localhost | grep -B2 -A5 mydrivername</userinput>
|
---|
3542 | Printer Driver Info 3:
|
---|
3543 | Version: [2]
|
---|
3544 | Driver Name: [mydrivername]
|
---|
3545 | Architecture: [Windows NT x86]
|
---|
3546 | Driver Path: [\\kde-bitshop\print$\W32X86\2\cupsdrvr.dll]
|
---|
3547 | Datafile: [\\kde-bitshop\print$\W32X86\2\mysmbtstprn.PPD]
|
---|
3548 | Configfile: [\\kde-bitshop\print$\W32X86\2\cupsui.dll]
|
---|
3549 | Helpfile: [\\kde-bitshop\print$\W32X86\2\cups.hlp]
|
---|
3550 | </screen></para>
|
---|
3551 |
|
---|
3552 | <para>
|
---|
3553 | Remember, this command greps for the name you chose for the
|
---|
3554 | driver in step 6. This command must succeed before you can proceed.
|
---|
3555 | </para>
|
---|
3556 | </step>
|
---|
3557 |
|
---|
3558 | <step>
|
---|
3559 | <title>Tell Samba which printer should use these driver files (<command>setdriver</command>).</title>
|
---|
3560 |
|
---|
3561 | <para>
|
---|
3562 | <indexterm><primary>rpcclient</primary><secondary>setdriver</secondary></indexterm>
|
---|
3563 | <screen>
|
---|
3564 | &rootprompt;<userinput>rpcclient -Uroot%xxxx -c 'setdriver mysmbtstprn mydrivername' \
|
---|
3565 | localhost</userinput>
|
---|
3566 | Successfully set mysmbtstprn to driver mydrivername
|
---|
3567 | </screen></para>
|
---|
3568 |
|
---|
3569 | <para>
|
---|
3570 | Since you can bind any printer name (print queue) to any driver, this is a convenient way to set up many
|
---|
3571 | queues that use the same driver. You do not need to repeat all the previous steps for the setdriver command to
|
---|
3572 | succeed. The only preconditions are that <command>enumdrivers</command> must find the driver and
|
---|
3573 | <command>enumprinters</command> must find the printer.
|
---|
3574 | </para>
|
---|
3575 | </step>
|
---|
3576 |
|
---|
3577 | <step>
|
---|
3578 | <title>(Optional) Verify if Samba has recognized this association.</title>
|
---|
3579 |
|
---|
3580 | <para>
|
---|
3581 | <indexterm><primary>rpcclient</primary><secondary>getprinter</secondary></indexterm>
|
---|
3582 | <indexterm><primary>rpcclient</primary><secondary>getdriver</secondary></indexterm>
|
---|
3583 | <indexterm><primary>rpcclient</primary><secondary>enumprinters</secondary></indexterm>
|
---|
3584 | <screen>
|
---|
3585 | &rootprompt;<userinput>rpcclient -Uroot%xxxx -c 'getprinter mysmbtstprn 2' localhost \
|
---|
3586 | | grep driver</userinput>
|
---|
3587 | drivername:[mydrivername]
|
---|
3588 |
|
---|
3589 | &rootprompt;<userinput>rpcclient -Uroot%xxxx -c 'getprinter mysmbtstprn 2' localhost \
|
---|
3590 | | grep -C4 driv</userinput>
|
---|
3591 | servername:[\\kde-bitshop]
|
---|
3592 | printername:[\\kde-bitshop\mysmbtstprn]
|
---|
3593 | sharename:[mysmbtstprn]
|
---|
3594 | portname:[Done]
|
---|
3595 | drivername:[mydrivername]
|
---|
3596 | comment:[mysmbtstprn]
|
---|
3597 | location:[]
|
---|
3598 | sepfile:[]
|
---|
3599 | printprocessor:[winprint]
|
---|
3600 |
|
---|
3601 | &rootprompt;<userinput>rpcclient -U root%xxxx -c 'getdriver mysmbtstprn' localhost</userinput>
|
---|
3602 | [Windows NT x86]
|
---|
3603 | Printer Driver Info 3:
|
---|
3604 | Version: [2]
|
---|
3605 | Driver Name: [mydrivername]
|
---|
3606 | Architecture: [Windows NT x86]
|
---|
3607 | Driver Path: [\\kde-bitshop\print$\W32X86\2\cupsdrvr.dll]
|
---|
3608 | Datafile: [\\kde-bitshop\print$\W32X86\2\mysmbtstprn.PPD]
|
---|
3609 | Configfile: [\\kde-bitshop\print$\W32X86\2\cupsui.dll]
|
---|
3610 | Helpfile: [\\kde-bitshop\print$\W32X86\2\cups.hlp]
|
---|
3611 | Monitorname: []
|
---|
3612 | Defaultdatatype: [RAW]
|
---|
3613 | Monitorname: []
|
---|
3614 | Defaultdatatype: [RAW]
|
---|
3615 |
|
---|
3616 | &rootprompt;<userinput>rpcclient -Uroot%xxxx -c 'enumprinters' localhost \
|
---|
3617 | | grep mysmbtstprn</userinput>
|
---|
3618 | name:[\\kde-bitshop\mysmbtstprn]
|
---|
3619 | description:[\\kde-bitshop\mysmbtstprn,mydrivername,mysmbtstprn]
|
---|
3620 | comment:[mysmbtstprn]
|
---|
3621 |
|
---|
3622 | </screen></para>
|
---|
3623 |
|
---|
3624 | <para>
|
---|
3625 | <indexterm><primary>rpcclient</primary><secondary>enumprinters</secondary></indexterm>
|
---|
3626 | Compare these results with the ones from steps 2 and 3. Every one of these commands show the driver is installed. Even
|
---|
3627 | the <command>enumprinters</command> command now lists the driver
|
---|
3628 | on the <quote>description</quote> line.
|
---|
3629 | </para>
|
---|
3630 | </step>
|
---|
3631 |
|
---|
3632 | <step>
|
---|
3633 | <title>(Optional.) Tickle the driver into a correct
|
---|
3634 | device mode.</title>
|
---|
3635 |
|
---|
3636 | <para>
|
---|
3637 | <indexterm><primary>"Printers" folder</primary></indexterm>
|
---|
3638 | You certainly know how to install the driver on the client. In case
|
---|
3639 | you are not particularly familiar with Windows, here is a short
|
---|
3640 | recipe: Browse the Network Neighborhood, go to the Samba server, and look
|
---|
3641 | for the shares. You should see all shared Samba printers.
|
---|
3642 | Double-click on the one in question. The driver should get
|
---|
3643 | installed and the network connection set up. Another way is to
|
---|
3644 | open the <guilabel>Printers (and Faxes)</guilabel> folder, right-click on the printer in
|
---|
3645 | question, and select <guilabel>Connect</guilabel> or <guilabel>Install</guilabel>. As a result, a new printer
|
---|
3646 | should appear in your client's local <guilabel>Printers (and Faxes)</guilabel>
|
---|
3647 | folder, named something like <guilabel>printersharename on Sambahostname</guilabel>.
|
---|
3648 | </para>
|
---|
3649 |
|
---|
3650 | <para>
|
---|
3651 | It is important that you execute this step as a Samba printer admin
|
---|
3652 | (as defined in &smb.conf;). Here is another method
|
---|
3653 | to do this on Windows XP. It uses a command line, which you may type
|
---|
3654 | into the <quote>DOS box</quote> (type root's smbpassword when prompted):
|
---|
3655 | </para>
|
---|
3656 |
|
---|
3657 | <para><screen>
|
---|
3658 | &dosprompt;<userinput>runas /netonly /user:root "rundll32 printui.dll,PrintUIEntry \
|
---|
3659 | /in /n \\sambaserver\mysmbtstprn"</userinput>
|
---|
3660 | </screen></para>
|
---|
3661 |
|
---|
3662 | <para>
|
---|
3663 | Change any printer setting once (like changing <emphasis><guilabel>portrait</guilabel> to
|
---|
3664 | <guilabel>landscape</guilabel></emphasis>), click on <guibutton>Apply</guibutton>, and change the setting back.
|
---|
3665 | </para>
|
---|
3666 | </step>
|
---|
3667 |
|
---|
3668 | <step>
|
---|
3669 | <title>Install the printer on a client (Point'n'Print).</title>
|
---|
3670 |
|
---|
3671 | <para>
|
---|
3672 | <indexterm significance="preferred"><primary>point 'n' print</primary></indexterm>
|
---|
3673 | <screen>
|
---|
3674 | &dosprompt;<userinput>rundll32 printui.dll,PrintUIEntry /in /n "\\sambaserver\mysmbtstprn"</userinput>
|
---|
3675 | </screen>
|
---|
3676 | If it does not work, it could be a permissions problem with the <smbconfsection name="[print$]"/> share.
|
---|
3677 | </para>
|
---|
3678 | </step>
|
---|
3679 |
|
---|
3680 | <step>
|
---|
3681 | <title>(Optional) Print a test page.</title>
|
---|
3682 |
|
---|
3683 | <indexterm><primary>rundll32</primary></indexterm>
|
---|
3684 | <para><screen>
|
---|
3685 | &dosprompt;<userinput>rundll32 printui.dll,PrintUIEntry /p /n "\\sambaserver\mysmbtstprn"</userinput>
|
---|
3686 | </screen></para>
|
---|
3687 |
|
---|
3688 | <para>
|
---|
3689 | Then hit [TAB] five times, [ENTER] twice, [TAB] once, and [ENTER] again, and march to the printer.
|
---|
3690 | </para>
|
---|
3691 | </step>
|
---|
3692 |
|
---|
3693 | <step>
|
---|
3694 | <title>(Recommended.) Study the test page.</title>
|
---|
3695 |
|
---|
3696 | <para>
|
---|
3697 | Hmmm. Just kidding! By now you know everything about printer installations and you do not need to read a word.
|
---|
3698 | Just put it in a frame and bolt it to the wall with the heading "MY FIRST RPCCLIENT-INSTALLED PRINTER"
|
---|
3699 | &smbmdash; why not just throw it away!
|
---|
3700 | </para>
|
---|
3701 | </step>
|
---|
3702 |
|
---|
3703 | <step>
|
---|
3704 | <title>(Obligatory.) Enjoy. Jump. Celebrate your success.</title>
|
---|
3705 |
|
---|
3706 | <para><screen>
|
---|
3707 | &rootprompt;<userinput>echo "Cheeeeerioooooo! Success..." >> /var/log/samba/log.smbd</userinput>
|
---|
3708 | </screen></para>
|
---|
3709 | </step>
|
---|
3710 | </procedure>
|
---|
3711 | </sect2>
|
---|
3712 |
|
---|
3713 | <sect2>
|
---|
3714 | <title>Troubleshooting Revisited</title>
|
---|
3715 |
|
---|
3716 | <para>
|
---|
3717 | <indexterm><primary>adddriver</primary></indexterm>
|
---|
3718 | The setdriver command will fail if in Samba's mind the queue is not
|
---|
3719 | already there. A successful installation displays the promising message that the:
|
---|
3720 | <screen>
|
---|
3721 | Printer Driver ABC successfully installed.
|
---|
3722 | </screen>
|
---|
3723 | following the <command>adddriver</command> parts of the procedure. But you may also see
|
---|
3724 | a disappointing message like this one:
|
---|
3725 | <computeroutput>
|
---|
3726 | result was NT_STATUS_UNSUCCESSFUL
|
---|
3727 | </computeroutput></para>
|
---|
3728 |
|
---|
3729 | <para>
|
---|
3730 | <indexterm><primary>lpstat</primary></indexterm>
|
---|
3731 | <indexterm><primary>rpcclient</primary></indexterm>
|
---|
3732 | It is not good enough that you can see the queue in CUPS, using the <command>lpstat -p ir85wm</command>
|
---|
3733 | command. A bug in most recent versions of Samba prevents the proper update of the queue list. The recognition
|
---|
3734 | of newly installed CUPS printers fails unless you restart Samba or send a HUP to all smbd processes. To verify
|
---|
3735 | if this is the reason why Samba does not execute the <command>setdriver</command> command successfully, check
|
---|
3736 | if Samba <quote>sees</quote> the printer:
|
---|
3737 | <indexterm><primary>rpcclient</primary><secondary>enumprinters</secondary></indexterm>
|
---|
3738 | <screen>
|
---|
3739 | &rootprompt;<userinput>rpcclient transmeta -N -U'root%xxxx' -c 'enumprinters 0'|grep ir85wm</userinput>
|
---|
3740 | printername:[ir85wm]
|
---|
3741 | </screen></para>
|
---|
3742 |
|
---|
3743 | <para>
|
---|
3744 | An alternate command could be this:
|
---|
3745 | <indexterm><primary>rpcclient</primary><secondary>getprinter</secondary></indexterm>
|
---|
3746 | <screen>
|
---|
3747 | &rootprompt;<userinput>rpcclient transmeta -N -U'root%secret' -c 'getprinter ir85wm' </userinput>
|
---|
3748 | cmd = getprinter ir85wm
|
---|
3749 | flags:[0x800000]
|
---|
3750 | name:[\\transmeta\ir85wm]
|
---|
3751 | description:[\\transmeta\ir85wm,ir85wm,DPD]
|
---|
3752 | comment:[CUPS PostScript-Treiber for Windows NT/200x/XP]
|
---|
3753 | </screen></para>
|
---|
3754 |
|
---|
3755 | <para>
|
---|
3756 | By the way, you can use these commands, plus a few more, of course, to install drivers on remote Windows NT print servers too!
|
---|
3757 | </para>
|
---|
3758 | </sect2>
|
---|
3759 | </sect1>
|
---|
3760 |
|
---|
3761 | <sect1>
|
---|
3762 | <title>The Printing <filename>*.tdb</filename> Files</title>
|
---|
3763 |
|
---|
3764 | <para>
|
---|
3765 | <indexterm><primary>TDB</primary></indexterm>
|
---|
3766 | <indexterm><primary>connections.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3767 | <indexterm><primary>printing.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3768 | <indexterm><primary>share_info.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3769 | <indexterm><primary>ntdrivers.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3770 | <indexterm><primary>unexpected.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3771 | <indexterm><primary>brlock.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3772 | <indexterm><primary>locking.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3773 | <indexterm><primary>ntforms.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3774 | <indexterm><primary>messages.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3775 | <indexterm><primary>ntprinters.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3776 | <indexterm><primary>sessionid.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3777 | <indexterm><primary>secrets.tdb</primary><seealso>TDB</seealso></indexterm>
|
---|
3778 | Some mystery is associated with the series of files with a tdb suffix appearing in every Samba installation.
|
---|
3779 | They are <filename>connections.tdb</filename>, <filename>printing.tdb</filename>,
|
---|
3780 | <filename>share_info.tdb</filename>, <filename>ntdrivers.tdb</filename>, <filename>unexpected.tdb</filename>,
|
---|
3781 | <filename>brlock.tdb</filename>, <filename>locking.tdb</filename>, <filename>ntforms.tdb</filename>,
|
---|
3782 | <filename>messages.tdb</filename> , <filename>ntprinters.tdb</filename>, <filename>sessionid.tdb</filename>,
|
---|
3783 | and <filename>secrets.tdb</filename>. What is their purpose?
|
---|
3784 | </para>
|
---|
3785 |
|
---|
3786 | <sect2>
|
---|
3787 | <title>Trivial Database Files</title>
|
---|
3788 |
|
---|
3789 | <para>
|
---|
3790 | <indexterm><primary>TDB</primary></indexterm>
|
---|
3791 | A Windows NT (print) server keeps track of all information needed to serve its duty toward its clients by
|
---|
3792 | storing entries in the Windows registry. Client queries are answered by reading from the registry,
|
---|
3793 | Administrator or user configuration settings that are saved by writing into the registry. Samba and UNIX
|
---|
3794 | obviously do not have such a Registry. Samba instead keeps track of all client-related information in a series
|
---|
3795 | of <filename>*.tdb</filename> files. (TDB stands for trivial data base). These are often located in
|
---|
3796 | <filename>/var/lib/samba/</filename> or <filename>/var/lock/samba/</filename>. The printing-related files are
|
---|
3797 | <filename>ntprinters.tdb</filename>, <filename>printing.tdb</filename>,<filename>ntforms.tdb</filename>, and
|
---|
3798 | <filename>ntdrivers.tdb</filename>.
|
---|
3799 | </para>
|
---|
3800 | </sect2>
|
---|
3801 |
|
---|
3802 | <sect2>
|
---|
3803 | <title>Binary Format</title>
|
---|
3804 |
|
---|
3805 | <para>
|
---|
3806 | <filename>*.tdb</filename> files are not human readable. They are written in a binary format. <quote>Why not
|
---|
3807 | ASCII?</quote>, you may ask. <quote>After all, ASCII configuration files are a good and proven tradition on
|
---|
3808 | UNIX.</quote> The reason for this design decision by the Samba Team is mainly performance. Samba needs to be
|
---|
3809 | fast; it runs a separate <command>smbd</command> process for each client connection, in some environments many
|
---|
3810 | thousands of them. Some of these <command>smbds</command> might need to write-access the same
|
---|
3811 | <filename>*.tdb</filename> file <emphasis>at the same time</emphasis>. The file format of Samba's
|
---|
3812 | <filename>*.tdb</filename> files allows for this provision. Many smbd processes may write to the same
|
---|
3813 | <filename>*.tdb</filename> file at the same time. This wouldn't be possible with pure ASCII files.
|
---|
3814 | </para>
|
---|
3815 | </sect2>
|
---|
3816 |
|
---|
3817 | <sect2>
|
---|
3818 | <title>Losing <filename>*.tdb</filename> Files</title>
|
---|
3819 |
|
---|
3820 | <para>
|
---|
3821 | It is very important that all <filename>*.tdb</filename> files remain consistent over all write and read
|
---|
3822 | accesses. However, it may happen that these files <emphasis>do</emphasis> get corrupted. (A <command>kill -9
|
---|
3823 | `pidof smbd'</command> while a write access is in progress could do the damage, as could a power interruption,
|
---|
3824 | etc.). In cases of trouble, a deletion of the old printing-related <filename>*.tdb</filename> files may be the
|
---|
3825 | only option. After that, you need to re-create all print-related setups unless you have made a backup of the
|
---|
3826 | <filename>*.tdb</filename> files in time.
|
---|
3827 | </para>
|
---|
3828 | </sect2>
|
---|
3829 |
|
---|
3830 | <sect2>
|
---|
3831 | <title>Using <command>tdbbackup</command></title>
|
---|
3832 |
|
---|
3833 | <para>
|
---|
3834 | <indexterm><primary>TDB</primary><secondary>backing up</secondary><see>tdbbackup</see></indexterm>
|
---|
3835 | <indexterm><primary>tdbbackup</primary></indexterm>
|
---|
3836 | Samba ships with a little utility that helps the root user of your system to backup your
|
---|
3837 | <filename>*.tdb</filename> files. If you run it with no argument, it prints a usage message:
|
---|
3838 | <screen>
|
---|
3839 | &rootprompt;<userinput>tdbbackup</userinput>
|
---|
3840 | Usage: tdbbackup [options] <fname...>
|
---|
3841 |
|
---|
3842 | Version:3.0a
|
---|
3843 | -h this help message
|
---|
3844 | -s suffix set the backup suffix
|
---|
3845 | -v verify mode (restore if corrupt)
|
---|
3846 | </screen></para>
|
---|
3847 |
|
---|
3848 | <para>
|
---|
3849 | Here is how I backed up my <filename>printing.tdb</filename> file:
|
---|
3850 | </para>
|
---|
3851 |
|
---|
3852 | <para><screen>
|
---|
3853 | &rootprompt;<userinput>ls</userinput>
|
---|
3854 | . browse.dat locking.tdb ntdrivers.tdb printing.tdb
|
---|
3855 | .. share_info.tdb connections.tdb messages.tdb ntforms.tdb
|
---|
3856 | printing.tdbkp unexpected.tdb brlock.tdb gmon.out namelist.debug
|
---|
3857 | ntprinters.tdb sessionid.tdb
|
---|
3858 |
|
---|
3859 | &rootprompt;<userinput>tdbbackup -s .bak printing.tdb</userinput>
|
---|
3860 | printing.tdb : 135 records
|
---|
3861 |
|
---|
3862 | &rootprompt;<userinput>ls -l printing.tdb*</userinput>
|
---|
3863 | -rw------- 1 root root 40960 May 2 03:44 printing.tdb
|
---|
3864 | -rw------- 1 root root 40960 May 2 03:44 printing.tdb.bak
|
---|
3865 |
|
---|
3866 | </screen></para>
|
---|
3867 | </sect2>
|
---|
3868 | </sect1>
|
---|
3869 |
|
---|
3870 | <sect1>
|
---|
3871 | <title>CUPS Print Drivers from Linuxprinting.org</title>
|
---|
3872 |
|
---|
3873 | <para>
|
---|
3874 | <indexterm><primary>Linuxprinting.org</primary></indexterm>
|
---|
3875 | CUPS ships with good support for HP LaserJet-type printers. You can install the generic driver as follows:
|
---|
3876 | <indexterm><primary>lpadmin</primary></indexterm>
|
---|
3877 | <screen>
|
---|
3878 | &rootprompt;<userinput>lpadmin -p laserjet4plus -v parallel:/dev/lp0 -E -m laserjet.ppd</userinput>
|
---|
3879 | </screen></para>
|
---|
3880 |
|
---|
3881 | <para>
|
---|
3882 | The <option>-m</option> switch will retrieve the <filename>laserjet.ppd</filename> from the standard
|
---|
3883 | repository for not-yet-installed PPDs, which CUPS typically stores in
|
---|
3884 | <filename>/usr/share/cups/model</filename>. Alternatively, you may use <option>-P /path/to/your.ppd</option>.
|
---|
3885 | </para>
|
---|
3886 |
|
---|
3887 | <para>
|
---|
3888 | The generic <filename>laserjet.ppd,</filename> however, does not support every special option for every
|
---|
3889 | LaserJet-compatible model. It constitutes a sort of <quote>least common denominator</quote> of all the models.
|
---|
3890 | If for some reason you must pay for the commercially available ESP Print Pro drivers, your first move should
|
---|
3891 | be to consult the database on the <ulink noescape="1"
|
---|
3892 | url="http://www.linuxprinting.org/printer_list.cgi">Linuxprinting</ulink> Web site. Linuxprinting.org has
|
---|
3893 | excellent recommendations about which driver is best used for each printer. Its database is kept current by
|
---|
3894 | the tireless work of Till Kamppeter from Mandrakesoft, who is also the principal author of the
|
---|
3895 | <command>foomatic-rip</command> utility.
|
---|
3896 | </para>
|
---|
3897 |
|
---|
3898 | <note><para>
|
---|
3899 | <indexterm><primary>foomatic-rip</primary></indexterm>
|
---|
3900 | <indexterm><primary>cupsomatic</primary></indexterm>
|
---|
3901 | <indexterm><primary>Adobe PPD</primary></indexterm>
|
---|
3902 | The former <command>cupsomatic</command> concept is now being replaced by the new successor, a much more
|
---|
3903 | powerful <command>foomatic-rip</command>. <command>cupsomatic</command> is no longer maintained. Here is the
|
---|
3904 | new URL to the <ulink noescape="1" url="http://www.linuxprinting.org/driver_list.cgi">Foomatic-3.0</ulink>
|
---|
3905 | database. If you upgrade to <command>foomatic-rip</command>, remember to also upgrade to the new-style PPDs
|
---|
3906 | for your Foomatic-driven printers. foomatic-rip will not work with PPDs generated for the old
|
---|
3907 | <command>cupsomatic</command>. The new-style PPDs are 100% compliant with the Adobe PPD specification. They
|
---|
3908 | are also intended to be used by Samba and the cupsaddsmb utility, to provide the driver files for the Windows
|
---|
3909 | clients!
|
---|
3910 | </para></note>
|
---|
3911 |
|
---|
3912 | <sect2>
|
---|
3913 | <title>foomatic-rip and Foomatic Explained</title>
|
---|
3914 |
|
---|
3915 |
|
---|
3916 | <para>
|
---|
3917 | <indexterm significance="preferred"><primary>foomatic</primary></indexterm>
|
---|
3918 | <indexterm significance="preferred"><primary>foomatic-rip</primary></indexterm>
|
---|
3919 | Nowadays, most Linux distributions rely on the utilities from the <ulink
|
---|
3920 | url="http://www.linuxprinting.org/">Linuxprinting.org</ulink> to create their printing-related software
|
---|
3921 | (which, by the way, works on all UNIXes and on Mac OS X and Darwin, too). The utilities from this sire have a
|
---|
3922 | very end-user-friendly interface that allows for an easy update of drivers and PPDs for all supported models,
|
---|
3923 | all spoolers, all operating systems, and all package formats (because there is none). Its history goes back a
|
---|
3924 | few years.
|
---|
3925 | </para>
|
---|
3926 |
|
---|
3927 | <para>
|
---|
3928 | Recently, Foomatic has achieved the astonishing milestone of <ulink
|
---|
3929 | url="http://www.linuxprinting.org/printer_list.cgi?make=Anyone">1,000 listed</ulink> printer models.
|
---|
3930 | Linuxprinting.org keeps all the important facts about printer drivers, supported models, and which options are
|
---|
3931 | available for the various driver/printer combinations in its <ulink
|
---|
3932 | url="http://www.linuxprinting.org/foomatic.html">Foomatic</ulink> database. Currently there are <ulink
|
---|
3933 | url="http://www.linuxprinting.org/driver_list.cgi">245 drivers</ulink> in the database. Many drivers support
|
---|
3934 | various models, and many models may be driven by different drivers &smbmdash; its your choice!
|
---|
3935 | </para>
|
---|
3936 |
|
---|
3937 | <sect3>
|
---|
3938 | <title>690 <quote>Perfect</quote> Printers</title>
|
---|
3939 |
|
---|
3940 | <para>
|
---|
3941 | <indexterm><primary>Windows PPD</primary></indexterm>
|
---|
3942 | At present, there are 690 devices dubbed as working perfectly: 181 are <emphasis>mostly</emphasis> perfect, 96
|
---|
3943 | are <emphasis>partially</emphasis> perfect, and 46 are paperweights. Keeping in mind that most of these are
|
---|
3944 | non-PostScript models (PostScript printers are automatically supported by CUPS to perfection by using their
|
---|
3945 | own manufacturer-provided Windows PPD), and that a multifunctional device never qualifies as working perfectly
|
---|
3946 | if it does not also scan and copy and fax under GNU/Linux &smbmdash; then this is a truly astonishing
|
---|
3947 | achievement! Three years ago the number was not more than 500, and Linux or UNIX printing at the time wasn't
|
---|
3948 | anywhere near the quality it is today.
|
---|
3949 | </para>
|
---|
3950 | </sect3>
|
---|
3951 |
|
---|
3952 | <sect3>
|
---|
3953 | <title>How the Printing HOWTO Started It All</title>
|
---|
3954 |
|
---|
3955 | <para>
|
---|
3956 | A few years ago <ulink url="http://www2.picante.com/">Grant Taylor</ulink> started it all. The
|
---|
3957 | roots of today's Linuxprinting.org are in the first <ulink
|
---|
3958 | url="http://www.linuxprinting.org/foomatic2.9/howto/">Linux Printing HOWTO</ulink> that he authored. As a
|
---|
3959 | side-project to this document, which served many Linux users and admins to guide their first steps in this
|
---|
3960 | complicated and delicate setup (to a scientist, printing is <quote>applying a structured deposition of
|
---|
3961 | distinct patterns of ink or toner particles on paper substrates</quote>), he started to build in a little
|
---|
3962 | Postgres database with information about the hardware and driver zoo that made up Linux printing of the time.
|
---|
3963 | This database became the core component of today's Foomatic collection of tools and data. In the meantime, it
|
---|
3964 | has moved to an XML representation of the data.
|
---|
3965 | </para>
|
---|
3966 | </sect3>
|
---|
3967 |
|
---|
3968 | <sect3>
|
---|
3969 | <title>Foomatic's Strange Name</title>
|
---|
3970 |
|
---|
3971 |
|
---|
3972 | <para>
|
---|
3973 | <indexterm><primary>foomatic</primary></indexterm>
|
---|
3974 | <quote>Why the funny name?</quote> you ask. When it really took off, around spring 2000, CUPS was far less
|
---|
3975 | popular than today, and most systems used LPD, LPRng, or even PDQ to print. CUPS shipped with a few generic
|
---|
3976 | drivers (good for a few hundred different printer models). These didn't support many device-specific options.
|
---|
3977 | CUPS also shipped with its own built-in rasterization filter (<parameter>pstoraster</parameter>, derived from
|
---|
3978 | Ghostscript). On the other hand, CUPS provided brilliant support for <emphasis>controlling</emphasis> all
|
---|
3979 | printer options through standardized and well-defined PPD files. Plus, CUPS was designed to be easily
|
---|
3980 | extensible.
|
---|
3981 | </para>
|
---|
3982 |
|
---|
3983 | <para>
|
---|
3984 | Taylor already had in his database a respectable compilation of facts about many more printers and the
|
---|
3985 | Ghostscript <quote>drivers</quote> they run with. His idea, to generate PPDs from the database information and
|
---|
3986 | use them to make standard Ghostscript filters work within CUPS, proved to work very well. It also killed
|
---|
3987 | several birds with one stone:
|
---|
3988 | </para>
|
---|
3989 |
|
---|
3990 | <itemizedlist>
|
---|
3991 | <listitem><para>It made all current and future Ghostscript filter
|
---|
3992 | developments available for CUPS.</para></listitem>
|
---|
3993 |
|
---|
3994 | <listitem><para>It made available a lot of additional printer models
|
---|
3995 | to CUPS users (because often the traditional Ghostscript way of
|
---|
3996 | printing was the only one available).</para></listitem>
|
---|
3997 |
|
---|
3998 | <listitem><para>It gave all the advanced CUPS options (Web interface,
|
---|
3999 | GUI driver configurations) to users wanting (or needing) to use
|
---|
4000 | Ghostscript filters.</para></listitem>
|
---|
4001 | </itemizedlist>
|
---|
4002 | </sect3>
|
---|
4003 |
|
---|
4004 | <sect3>
|
---|
4005 | <title>cupsomatic, pdqomatic, lpdomatic, directomatic</title>
|
---|
4006 |
|
---|
4007 | <para>
|
---|
4008 | <indexterm><primary>cupsomatic</primary></indexterm>
|
---|
4009 | <indexterm><primary>CUPS-PPD</primary></indexterm>
|
---|
4010 | <indexterm><primary>PPD</primary><secondary>CUPS</secondary><see>CUPS-PPD</see></indexterm>
|
---|
4011 | CUPS worked through a quickly hacked-up filter script named <ulink
|
---|
4012 | url="http://www.linuxprinting.org/download.cgi?filename=cupsomatic&show=0">cupsomatic</ulink>. cupsomatic
|
---|
4013 | ran the printfile through Ghostscript, constructing automatically the rather complicated command line needed.
|
---|
4014 | It just needed to be copied into the CUPS system to make it work. To configure the way cupsomatic controls the
|
---|
4015 | Ghostscript rendering process, it needs a CUPS-PPD. This PPD is generated directly from the contents of the
|
---|
4016 | database. For CUPS and the respective printer/filter combo, another Perl script named CUPS-O-Matic did the PPD
|
---|
4017 | generation. After that was working, Taylor implemented within a few days a similar thing for two other
|
---|
4018 | spoolers. Names chosen for the config-generator scripts were <ulink
|
---|
4019 | url="http://www.linuxprinting.org/download.cgi?filename=lpdomatic&show=0">PDQ-O-Matic</ulink> (for PDQ)
|
---|
4020 | and <ulink url="http://www.linuxprinting.org/download.cgi?filename=lpdomatic&show=0">LPD-O-Matic</ulink>
|
---|
4021 | (for &smbmdash; you guessed it &smbmdash; LPD); the configuration here didn't use PPDs but other
|
---|
4022 | spooler-specific files.
|
---|
4023 | </para>
|
---|
4024 |
|
---|
4025 | <para>
|
---|
4026 | From late summer of that year, <ulink url="http://www.linuxprinting.org/till/">Till Kamppeter</ulink> started
|
---|
4027 | to put work into the database. Kamppeter had been newly employed by <ulink
|
---|
4028 | url="http://www.mandrakesoft.com/">Mandrakesoft</ulink> to convert its printing system over to CUPS, after
|
---|
4029 | they had seen his <ulink url="http://www.fltk.org/">FLTK</ulink>-based <ulink
|
---|
4030 | url="http://cups.sourceforge.net/xpp/">XPP</ulink> (a GUI front-end to the CUPS lp-command). He added a huge
|
---|
4031 | amount of new information and new printers. He also developed the support for other spoolers, like <ulink
|
---|
4032 | url="http://ppr.sourceforge.net/">PPR</ulink> (via ppromatic), <ulink
|
---|
4033 | url="http://sourceforge.net/projects/lpr/">GNUlpr</ulink>, and <ulink
|
---|
4034 | url="http://www.lprng.org/">LPRng</ulink> (both via an extended lpdomatic) and spooler-less printing (<ulink
|
---|
4035 | url="http://www.linuxprinting.org/download.cgi?filename=directomatic&show=0">directomatic</ulink>).
|
---|
4036 | </para>
|
---|
4037 |
|
---|
4038 | <para>
|
---|
4039 | So, to answer your question, <quote>Foomatic</quote> is the general name for all the overlapping code and data
|
---|
4040 | behind the <quote>*omatic</quote> scripts. Foomatic, up to versions 2.0.x, required (ugly) Perl data
|
---|
4041 | structures attached to Linuxprinting.org PPDs for CUPS. It had a different <quote>*omatic</quote> script for
|
---|
4042 | every spooler, as well as different printer configuration files.
|
---|
4043 | </para>
|
---|
4044 | </sect3>
|
---|
4045 |
|
---|
4046 | <sect3>
|
---|
4047 | <title>The <emphasis>Grand Unification</emphasis> Achieved</title>
|
---|
4048 |
|
---|
4049 | <para>
|
---|
4050 | <indexterm><primary>foomatic-rip</primary></indexterm>
|
---|
4051 | This has all changed in Foomatic versions 2.9 (beta) and released as <quote>stable</quote> 3.0. It has now
|
---|
4052 | achieved the convergence of all *omatic scripts and is called the <ulink
|
---|
4053 | url="http://www.linuxprinting.org/foomatic2.9/download.cgi?filename=foomatic-rip&show=0">foomatic-rip</ulink>.
|
---|
4054 | This single script is the unification of the previously different spooler-specific *omatic scripts.
|
---|
4055 | foomatic-rip is used by all the different spoolers alike, and because it can read PPDs (both the original
|
---|
4056 | PostScript printer PPDs and the Linuxprinting.org-generated ones), all of a sudden all supported spoolers can
|
---|
4057 | have the power of PPDs at their disposal. Users only need to plug foomatic-rip into their system. For users
|
---|
4058 | there is improved media type and source support &smbmdash; paper sizes and trays are easier to configure.
|
---|
4059 | </para>
|
---|
4060 |
|
---|
4061 | <para>
|
---|
4062 | <indexterm><primary>PPDs</primary></indexterm>
|
---|
4063 | <indexterm><primary>Foomatic tutorial</primary></indexterm>
|
---|
4064 | <indexterm><primary>LinuxKongress2002</primary></indexterm>
|
---|
4065 | Also, the new generation of Linuxprinting.org PPDs no longer contains Perl data structures. If you are a
|
---|
4066 | distro maintainer and have used the previous version of Foomatic, you may want to give the new one a spin, but
|
---|
4067 | remember to generate a new-version set of PPDs via the new <ulink
|
---|
4068 | url="http://www.linuxprinting.org/download/foomatic/foomatic-db-engine-3.0.0beta1.tar.gz">foomatic-db-engine!</ulink>.
|
---|
4069 | Individual users just need to generate a single new PPD specific to their model by <ulink
|
---|
4070 | url="http://www.linuxprinting.org/kpfeifle/LinuxKongress2002/Tutorial/II.Foomatic-User/II.tutorial-handout-foomatic-user.html">following
|
---|
4071 | the steps</ulink> outlined in the Foomatic tutorial or in this chapter. This new development is truly amazing.
|
---|
4072 | </para>
|
---|
4073 |
|
---|
4074 | <para>
|
---|
4075 | <indexterm><primary>foomatic-rip</primary></indexterm>
|
---|
4076 | <indexterm><primary>Adobe</primary></indexterm>
|
---|
4077 | <indexterm><primary>printer drivers</primary></indexterm>
|
---|
4078 | foomatic-rip is a very clever wrapper around the need to run Ghostscript with a different syntax, options,
|
---|
4079 | device selections, and/or filters for each different printer or spooler. At the same time, it can read the PPD
|
---|
4080 | associated with a print queue and modify the print job according to the user selections. Together with this
|
---|
4081 | comes the 100% compliance of the new Foomatic PPDs with the Adobe spec. Some innovative features of the
|
---|
4082 | Foomatic concept may surprise users. It will support custom paper sizes for many printers and will support
|
---|
4083 | printing on media drawn from different paper trays within the same job (in both cases, even where there is no
|
---|
4084 | support for this from Windows-based vendor printer drivers).
|
---|
4085 | </para>
|
---|
4086 | </sect3>
|
---|
4087 |
|
---|
4088 | <sect3>
|
---|
4089 | <title>Driver Development Outside</title>
|
---|
4090 |
|
---|
4091 | <para>
|
---|
4092 | <indexterm><primary>Linuxprinting.org</primary></indexterm>
|
---|
4093 | Most driver development itself does not happen within Linuxprinting.org. Drivers are written by independent
|
---|
4094 | maintainers. Linuxprinting.org just pools all the information and stores it in its database. In addition, it
|
---|
4095 | also provides the Foomatic glue to integrate the many drivers into any modern (or legacy) printing system
|
---|
4096 | known to the world.
|
---|
4097 | </para>
|
---|
4098 |
|
---|
4099 | <para>
|
---|
4100 | Speaking of the different driver development groups, most of the work is currently done in three projects:
|
---|
4101 | </para>
|
---|
4102 |
|
---|
4103 | <itemizedlist>
|
---|
4104 | <listitem><para>
|
---|
4105 | <indexterm><primary>Omni</primary></indexterm>
|
---|
4106 | <ulink url="http://www-124.ibm.com/developerworks/oss/linux/projects/omni/">Omni</ulink>
|
---|
4107 | &smbmdash; a free software project by IBM that tries to convert its printer
|
---|
4108 | driver knowledge from good-ol' OS/2 times into a modern, modular,
|
---|
4109 | universal driver architecture for Linux/UNIX (still beta). This
|
---|
4110 | currently supports 437 models.</para></listitem>
|
---|
4111 |
|
---|
4112 | <listitem><para>
|
---|
4113 | <indexterm><primary>HPIJS</primary></indexterm>
|
---|
4114 | <ulink url="http://hpinkjet.sf.net/">HPIJS</ulink> &smbmdash;
|
---|
4115 | a free software project by HP to provide the support for its own
|
---|
4116 | range of models (very mature, printing in most cases is perfect and
|
---|
4117 | provides true photo quality). This currently supports 369
|
---|
4118 | models.</para></listitem>
|
---|
4119 |
|
---|
4120 | <listitem><para>
|
---|
4121 | <indexterm><primary>Gutenprint</primary></indexterm>
|
---|
4122 | <ulink url="http://gimp-print.sourceforge.net/">Gutenprint</ulink> &smbmdash; a free software
|
---|
4123 | effort, started by Michael Sweet (also lead developer for CUPS), now
|
---|
4124 | directed by Robert Krawitz, which has achieved an amazing level of
|
---|
4125 | photo print quality (many Epson users swear that its quality is
|
---|
4126 | better than the vendor drivers provided by Epson for the Microsoft
|
---|
4127 | platforms). This currently supports 522 models.</para></listitem>
|
---|
4128 | </itemizedlist>
|
---|
4129 | </sect3>
|
---|
4130 |
|
---|
4131 | <sect3>
|
---|
4132 | <title>Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</title>
|
---|
4133 |
|
---|
4134 | <para>
|
---|
4135 | Linuxprinting.org today is the one-stop shop to download printer drivers. Look for printer information and
|
---|
4136 | <ulink url="http://www.linuxprinting.org//kpfeifle/LinuxKongress2002/Tutorial/">tutorials</ulink> or solve
|
---|
4137 | printing problems in its popular <ulink url="http://www.linuxprinting.org/newsportal/">forums</ulink>. This
|
---|
4138 | forum is not just for GNU/Linux users, but admins of <ulink url="http://www.linuxprinting.org/macosx/">
|
---|
4139 | commercial UNIX systems</ulink> are also going there, and the relatively new
|
---|
4140 | <ulink url="http://www.linuxprinting.org/newsportal/thread.php3?name=linuxprinting.macosx.general">Mac OS X
|
---|
4141 | forum</ulink> has turned out to be one of the most frequented forums after only a few weeks.
|
---|
4142 | </para>
|
---|
4143 |
|
---|
4144 | <para>
|
---|
4145 | <indexterm><primary>Mandriva</primary></indexterm>
|
---|
4146 | <indexterm><primary>Mandrake</primary></indexterm>
|
---|
4147 | <indexterm><primary>Conectiva</primary></indexterm>
|
---|
4148 | Linuxprinting.org and the Foomatic driver wrappers around Ghostscript are now a standard tool-chain for
|
---|
4149 | printing on all the important distros. Most of them also have CUPS underneath. While in recent years most
|
---|
4150 | printer data had been added by Kamppeter, many additional contributions came from engineers with SuSE, Red
|
---|
4151 | Hat, Conectiva, Debian, and others. Vendor-neutrality is an important goal of the Foomatic project. Mandrake
|
---|
4152 | and Conectiva have merged and are now called Mandriva.
|
---|
4153 | </para>
|
---|
4154 |
|
---|
4155 | <note><para>
|
---|
4156 | Till Kamppeter from Mandrakesoft is doing an excellent job in his spare time to maintain Linuxprinting.org and
|
---|
4157 | Foomatic. So if you use it often, please send him a note showing your appreciation.
|
---|
4158 | </para></note>
|
---|
4159 | </sect3>
|
---|
4160 |
|
---|
4161 | <sect3>
|
---|
4162 | <title>Foomatic Database-Generated PPDs</title>
|
---|
4163 |
|
---|
4164 | <para>
|
---|
4165 | <indexterm><primary>Foomatic database</primary></indexterm>
|
---|
4166 | <indexterm><primary>XML-based datasets</primary></indexterm>
|
---|
4167 | <indexterm><primary>kprinter</primary></indexterm>
|
---|
4168 | <indexterm><primary>gtklp</primary></indexterm>
|
---|
4169 | <indexterm><primary>xpp</primary></indexterm>
|
---|
4170 | <indexterm><primary>HP Photosmart</primary></indexterm>
|
---|
4171 | <indexterm><primary>Epson Stylus inkjet</primary></indexterm>
|
---|
4172 | <indexterm><primary>non-PostScript printers</primary></indexterm>
|
---|
4173 | <indexterm><primary>raster</primary></indexterm>
|
---|
4174 | The Foomatic database is an amazing piece of ingenuity in itself. Not only does it keep the printer and driver
|
---|
4175 | information, but it is organized in a way that it can generate PPD files on the fly from its internal
|
---|
4176 | XML-based datasets. While these PPDs are modeled to the Adobe specification of PPDs, the
|
---|
4177 | Linuxprinting.org/Foomatic-PPDs do not normally drive PostScript printers. They are used to describe all the
|
---|
4178 | bells and whistles you could ring or blow on an Epson Stylus inkjet, or an HP Photosmart, or what-have-you.
|
---|
4179 | The main trick is one little additional line, not envisaged by the PPD specification, starting with the
|
---|
4180 | <parameter>*cupsFilter</parameter> keyword. It tells the CUPS daemon how to proceed with the PostScript print
|
---|
4181 | file (old-style Foomatic-PPDs named the cupsomatic filter script, while the new-style PPDs are now call
|
---|
4182 | foomatic-rip). This filter script calls Ghostscript on the host system (the recommended variant is ESP
|
---|
4183 | Ghostscript) to do the rendering work. foomatic-rip knows which filter or internal device setting it should
|
---|
4184 | ask from Ghostscript to convert the PostScript print job into a raster format ready for the target device.
|
---|
4185 | This usage of PPDs to describe the options of non-PostScript printers was the invention of the CUPS
|
---|
4186 | developers. The rest is easy. GUI tools (like KDE's marvelous <ulink
|
---|
4187 | url="http://printing.kde.org/overview/kprinter.phtml">kprinter</ulink> or the GNOME <ulink
|
---|
4188 | url="http://gtklp.sourceforge.net/">gtklp</ulink> xpp and the CUPS Web interface) read the PPD as well and use
|
---|
4189 | this information to present the available settings to the user as an intuitive menu selection.
|
---|
4190 | </para>
|
---|
4191 | </sect3>
|
---|
4192 | </sect2>
|
---|
4193 |
|
---|
4194 | <sect2>
|
---|
4195 | <title>foomatic-rip and Foomatic PPD Download and Installation</title>
|
---|
4196 |
|
---|
4197 | <para>
|
---|
4198 | Here are the steps to install a foomatic-rip-driven LaserJet 4 Plus-compatible
|
---|
4199 | printer in CUPS (note that recent distributions of SuSE, UnitedLinux and
|
---|
4200 | Mandrake may ship with a complete package of Foomatic-PPDs plus the
|
---|
4201 | <command>foomatic-rip</command> utility. Going directly to
|
---|
4202 | Linuxprinting.org ensures that you get the latest driver/PPD files).
|
---|
4203 | </para>
|
---|
4204 |
|
---|
4205 | <itemizedlist>
|
---|
4206 | <listitem><para>Open your browser at the Linuxprinting.org printer list <ulink url="http://www.linuxprinting.org/printer_list.cgi">page.</ulink>
|
---|
4207 | </para></listitem>
|
---|
4208 |
|
---|
4209 | <listitem><para>Check the complete list of printers in the
|
---|
4210 | <ulink url="http://www.linuxprinting.org/printer_list.cgi?make=Anyone">database.</ulink>.
|
---|
4211 | </para></listitem>
|
---|
4212 |
|
---|
4213 | <listitem><para>Select your model and click on the link.
|
---|
4214 | </para></listitem>
|
---|
4215 |
|
---|
4216 | <listitem><para>You'll arrive at a page listing all drivers working with this
|
---|
4217 | model (for all printers, there will always be <emphasis>one</emphasis>
|
---|
4218 | recommended driver. Try this one first).
|
---|
4219 | </para></listitem>
|
---|
4220 |
|
---|
4221 | <listitem><para>In our case (HP LaserJet 4 Plus), we'll arrive at the default driver for the
|
---|
4222 | <ulink url="http://www.linuxprinting.org/show_printer.cgi?recnum=HP-LaserJet_4_Plus">HP-LaserJet 4 Plus.</ulink>
|
---|
4223 | </para></listitem>
|
---|
4224 |
|
---|
4225 | <listitem><para>The recommended driver is ljet4.</para></listitem>
|
---|
4226 |
|
---|
4227 | <listitem><para>Several links are provided here. You should visit them all if you
|
---|
4228 | are not familiar with the Linuxprinting.org database.
|
---|
4229 | </para></listitem>
|
---|
4230 |
|
---|
4231 | <listitem><para>There is a link to the database page for the
|
---|
4232 | <ulink url="http://www.linuxprinting.org/show_driver.cgi?driver=ljet4">ljet4</ulink>.
|
---|
4233 | On the driver's page, you'll find important and detailed information
|
---|
4234 | about how to use that driver within the various available
|
---|
4235 | spoolers.</para></listitem>
|
---|
4236 |
|
---|
4237 | <listitem><para>Another link may lead you to the home page of the
|
---|
4238 | author of the driver.</para></listitem>
|
---|
4239 |
|
---|
4240 | <listitem><para>Important links are the ones that provide hints with
|
---|
4241 | setup instructions for <ulink noescape="1" url="http://www.linuxprinting.org/cups-doc.html">CUPS</ulink>;
|
---|
4242 | <ulink url="http://www.linuxprinting.org/pdq-doc.html">PDQ</ulink>;
|
---|
4243 | <ulink url="http://www.linuxprinting.org/lpd-doc.html">LPD, LPRng, and GNUlpr</ulink>);
|
---|
4244 | as well as <ulink url="http://www.linuxprinting.org/ppr-doc.html">PPR</ulink>
|
---|
4245 | or <quote>spoolerless</quote> <ulink url="http://www.linuxprinting.org/direct-doc.html">printing</ulink>.
|
---|
4246 | </para></listitem>
|
---|
4247 |
|
---|
4248 | <listitem><para>You can view the PPD in your browser through this link:
|
---|
4249 | <ulink noescape="1" url="http://www.linuxprinting.org/ppd-o-matic.cgi?driver=ljet4&printer=HP-LaserJet_4_Plus&show=1">http://www.linuxprinting.org/ppd-o-matic.cgi?driver=ljet4&printer=HP-LaserJet_4_Plus&show=1</ulink>
|
---|
4250 | </para></listitem> <listitem><para>Most importantly, you can also generate and download
|
---|
4251 | the <ulink url="http://www.linuxprinting.org/ppd-o-matic.cgi?driver=ljet4&printer=HP-LaserJet_4_Plus&show=0">PPD</ulink>.
|
---|
4252 | </para></listitem>
|
---|
4253 |
|
---|
4254 | <listitem><para>The PPD contains all the information needed to use our
|
---|
4255 | model and the driver; once installed, this works transparently
|
---|
4256 | for the user. Later you'll only need to choose resolution, paper size,
|
---|
4257 | and so on, from the Web-based menu, or from the print dialog GUI, or from
|
---|
4258 | the command line.</para></listitem>
|
---|
4259 |
|
---|
4260 | <listitem><para>If you ended up on the drivers
|
---|
4261 | <ulink url="http://www.linuxprinting.org/show_driver.cgi?driver=ljet4">page</ulink>,
|
---|
4262 | you can choose to use the <quote>PPD-O-Matic</quote> online PPD generator
|
---|
4263 | program.</para></listitem>
|
---|
4264 |
|
---|
4265 | <listitem><para>Select the exact model and check either <guilabel>Download</guilabel> or
|
---|
4266 | <guilabel>Display PPD file</guilabel> and click <guilabel>Generate PPD file</guilabel>.</para></listitem>
|
---|
4267 |
|
---|
4268 | <listitem><para>If you save the PPD file from the browser view, please
|
---|
4269 | do not use cut and paste (since it could possibly damage line endings
|
---|
4270 | and tabs, which makes the PPD likely to fail its duty), but use <guimenuitem>Save
|
---|
4271 | as...</guimenuitem> in your browser's menu. (It is best to use the <guilabel>Download</guilabel> option
|
---|
4272 | directly from the Web page.)</para></listitem>
|
---|
4273 |
|
---|
4274 | <listitem><para>Another interesting part on each driver page is
|
---|
4275 | the <guimenuitem>Show execution details</guimenuitem> button. If you
|
---|
4276 | select your printer model and click on that button,
|
---|
4277 | a complete Ghostscript command line will be displayed, enumerating all options
|
---|
4278 | available for that combination of driver and printer model. This is a great way to
|
---|
4279 | <quote>learn Ghostscript by doing</quote>. It is also an excellent cheat sheet
|
---|
4280 | for all experienced users who need to reconstruct a good command line
|
---|
4281 | for that darned printing script, but can't remember the exact
|
---|
4282 | syntax. </para></listitem>
|
---|
4283 |
|
---|
4284 | <listitem><para>Sometime during your visit to Linuxprinting.org, save
|
---|
4285 | the PPD to a suitable place on your hard disk, say
|
---|
4286 | <filename>/path/to/my-printer.ppd</filename> (if you prefer to install
|
---|
4287 | your printers with the help of the CUPS Web interface, save the PPD to
|
---|
4288 | the <filename>/usr/share/cups/model/</filename> path and restart
|
---|
4289 | cupsd).</para></listitem>
|
---|
4290 |
|
---|
4291 | <listitem><para>Then install the printer with a suitable command line,
|
---|
4292 | like this:
|
---|
4293 | </para>
|
---|
4294 |
|
---|
4295 | <para><screen>
|
---|
4296 | &rootprompt;<userinput>lpadmin -p laserjet4plus -v parallel:/dev/lp0 -E \
|
---|
4297 | -P path/to/my-printer.ppd</userinput>
|
---|
4298 | </screen></para></listitem>
|
---|
4299 |
|
---|
4300 | <listitem><para>For all the new-style <quote>Foomatic-PPDs</quote>
|
---|
4301 | from Linuxprinting.org, you also need a special CUPS filter named
|
---|
4302 | foomatic-rip.
|
---|
4303 | </para></listitem>
|
---|
4304 |
|
---|
4305 | <listitem><para>The foomatic-rip Perl script itself also makes some
|
---|
4306 | interesting <ulink url="http://www.linuxprinting.org/foomatic2.9/download.cgi?filename=foomatic-rip&show=1">reading</ulink>
|
---|
4307 | because it is well documented by Kamppeter's in-line comments (even
|
---|
4308 | non-Perl hackers will learn quite a bit about printing by reading
|
---|
4309 | it).</para></listitem>
|
---|
4310 |
|
---|
4311 | <listitem><para>Save foomatic-rip either directly in
|
---|
4312 | <filename>/usr/lib/cups/filter/foomatic-rip</filename> or somewhere in
|
---|
4313 | your $PATH (and remember to make it world-executable). Again,
|
---|
4314 | do not save by copy and paste but use the appropriate link or the
|
---|
4315 | <guimenuitem>Save as...</guimenuitem> menu item in your browser.</para></listitem>
|
---|
4316 |
|
---|
4317 | <listitem><para>If you save foomatic-rip in your $PATH, create a symlink:
|
---|
4318 | <screen>
|
---|
4319 | &rootprompt;<userinput>cd /usr/lib/cups/filter/ ; ln -s `which foomatic-rip'</userinput>
|
---|
4320 | </screen>
|
---|
4321 | </para>
|
---|
4322 |
|
---|
4323 | <para>
|
---|
4324 | CUPS will discover this new available filter at startup after restarting
|
---|
4325 | cupsd.</para></listitem>
|
---|
4326 | </itemizedlist>
|
---|
4327 |
|
---|
4328 | <para>
|
---|
4329 | Once you print to a print queue set up with the Foomatic PPD, CUPS will insert the appropriate commands and
|
---|
4330 | comments into the resulting PostScript job file. foomatic-rip is able to read and act upon these and uses some
|
---|
4331 | specially encoded Foomatic comments embedded in the job file. These in turn are used to construct
|
---|
4332 | (transparently for you, the user) the complicated Ghostscript command line telling the printer driver exactly
|
---|
4333 | how the resulting raster data should look and which printer commands to embed into the data stream. You need:
|
---|
4334 | </para>
|
---|
4335 |
|
---|
4336 | <itemizedlist>
|
---|
4337 | <listitem><para>A <quote>foomatic+something</quote> PPD &smbmdash; but this is not enough
|
---|
4338 | to print with CUPS (it is only <emphasis>one</emphasis> important
|
---|
4339 | component).</para></listitem>
|
---|
4340 |
|
---|
4341 | <listitem><para>The <parameter>foomatic-rip</parameter> filter script (Perl) in
|
---|
4342 | <filename>/usr/lib/cups/filters/</filename>.</para></listitem>
|
---|
4343 |
|
---|
4344 | <listitem><para>Perl to make foomatic-rip run.</para></listitem>
|
---|
4345 |
|
---|
4346 | <listitem><para>Ghostscript (because it is doing the main work,
|
---|
4347 | controlled by the PPD/foomatic-rip combo) to produce the raster data
|
---|
4348 | fit for your printer model's consumption.</para></listitem>
|
---|
4349 |
|
---|
4350 | <listitem><para>Ghostscript <emphasis>must</emphasis> (depending on
|
---|
4351 | the driver/model) contain support for a certain device representing
|
---|
4352 | the selected driver for your model (as shown by <command>gs -h</command>).</para></listitem>
|
---|
4353 |
|
---|
4354 | <listitem><para>foomatic-rip needs a new version of PPDs (PPD versions
|
---|
4355 | produced for cupsomatic do not work with foomatic-rip).</para></listitem>
|
---|
4356 | </itemizedlist>
|
---|
4357 | </sect2>
|
---|
4358 | </sect1>
|
---|
4359 |
|
---|
4360 | <sect1>
|
---|
4361 | <title>Page Accounting with CUPS</title>
|
---|
4362 |
|
---|
4363 |
|
---|
4364 | <para>
|
---|
4365 | <indexterm><primary>CUPS</primary><secondary>Page Accounting</secondary></indexterm>
|
---|
4366 | Often there are questions regarding print quotas where Samba users (that is, Windows clients) should not be
|
---|
4367 | able to print beyond a certain number of pages or data volume per day, week, or month. This feature is
|
---|
4368 | dependent on the real print subsystem you're using. Samba's part is always to receive the job files from the
|
---|
4369 | clients (filtered <emphasis>or</emphasis> unfiltered) and hand them over to this printing subsystem.
|
---|
4370 | </para>
|
---|
4371 |
|
---|
4372 | <para>
|
---|
4373 | Of course one could hack things with one's own scripts. But then there is CUPS. CUPS supports quotas that can
|
---|
4374 | be based on the size of jobs or on the number of pages or both, and can span any time period you want.
|
---|
4375 | </para>
|
---|
4376 |
|
---|
4377 | <sect2>
|
---|
4378 | <title>Setting Up Quotas</title>
|
---|
4379 |
|
---|
4380 | <para>
|
---|
4381 | <indexterm><primary>CUPS</primary><secondary>quotas</secondary></indexterm>
|
---|
4382 | This is an example command of how root would set a print quota in CUPS, assuming an existing printer named
|
---|
4383 | <quote>quotaprinter</quote>:
|
---|
4384 | <indexterm><primary>lpadmin</primary></indexterm>
|
---|
4385 | <screen>
|
---|
4386 | &rootprompt;<userinput>lpadmin -p quotaprinter -o job-quota-period=604800 \
|
---|
4387 | -o job-k-limit=1024 -o job-page-limit=100</userinput>
|
---|
4388 | </screen></para>
|
---|
4389 |
|
---|
4390 | <para>
|
---|
4391 | This would limit every single user to print no more than 100 pages or 1024 KB of
|
---|
4392 | data (whichever comes first) within the last 604,800 seconds ( = 1 week).
|
---|
4393 | </para>
|
---|
4394 | </sect2>
|
---|
4395 |
|
---|
4396 | <sect2>
|
---|
4397 | <title>Correct and Incorrect Accounting</title>
|
---|
4398 |
|
---|
4399 | <para>
|
---|
4400 | For CUPS to count correctly, the printfile needs to pass the CUPS pstops filter; otherwise it uses a dummy
|
---|
4401 | count of <quote>one</quote>. Some print files do not pass it (e.g., image files), but then those are mostly
|
---|
4402 | one-page jobs anyway. This also means that proprietary drivers for the target printer running on the client
|
---|
4403 | computers and CUPS/Samba, which then spool these files as <quote>raw</quote> (i.e., leaving them untouched,
|
---|
4404 | not filtering them), will be counted as one-pagers too!
|
---|
4405 | </para>
|
---|
4406 |
|
---|
4407 | <para>
|
---|
4408 | You need to send PostScript from the clients (i.e., run a PostScript driver there) to have the chance to get
|
---|
4409 | accounting done. If the printer is a non-PostScript model, you need to let CUPS do the job to convert the file
|
---|
4410 | to a print-ready format for the target printer. This is currently working for about a thousand different
|
---|
4411 | printer models. Linuxprinting.org has a driver <ulink url="http://www.linuxprinting.org/printer_list.cgi">list</ulink>.
|
---|
4412 | </para>
|
---|
4413 | </sect2>
|
---|
4414 |
|
---|
4415 | <sect2>
|
---|
4416 | <title>Adobe and CUPS PostScript Drivers for Windows Clients</title>
|
---|
4417 |
|
---|
4418 | <para>
|
---|
4419 | <indexterm><primary>Adobe PostScript</primary></indexterm>
|
---|
4420 | <indexterm><primary>pstops</primary></indexterm>
|
---|
4421 | <indexterm><primary>PPD</primary></indexterm>
|
---|
4422 | <indexterm><primary>pstoraster</primary></indexterm>
|
---|
4423 | <indexterm><primary>PJL-header</primary></indexterm>
|
---|
4424 | Before CUPS 1.1.16, your only option was to use the Adobe PostScript driver on the Windows clients. The output
|
---|
4425 | of this driver was not always passed through the <command>pstops</command> filter on the CUPS/Samba side, and
|
---|
4426 | therefore was not counted correctly (the reason is that it often, depending on the PPD being used, wrote a
|
---|
4427 | PJL-header in front of the real PostScript, which caused CUPS to skip <command>pstops</command> and go
|
---|
4428 | directly to the <command>pstoraster</command> stage).
|
---|
4429 | </para>
|
---|
4430 |
|
---|
4431 | <para>
|
---|
4432 | From CUPS 1.1.16 and later releases, you can use the CUPS PostScript driver for Windows NT/200x/XP
|
---|
4433 | clients (which is tagged in the download area of <filename>http://www.cups.org/</filename> as the
|
---|
4434 | <filename>cups-samba-1.1.16.tar.gz</filename> package). It does <emphasis>not</emphasis> work for Windows
|
---|
4435 | 9x/Me clients, but it guarantees:
|
---|
4436 | </para>
|
---|
4437 |
|
---|
4438 | <itemizedlist>
|
---|
4439 | <listitem><para> <indexterm><primary>PJL</primary></indexterm> To not write a PJL-header.</para></listitem>
|
---|
4440 |
|
---|
4441 | <listitem><para>To still read and support all PJL-options named in the
|
---|
4442 | driver PPD with its own means.</para></listitem>
|
---|
4443 |
|
---|
4444 | <listitem><para>That the file will pass through the <command>pstops</command> filter
|
---|
4445 | on the CUPS/Samba server.</para></listitem>
|
---|
4446 |
|
---|
4447 | <listitem><para>To page-count correctly the print file.</para></listitem>
|
---|
4448 | </itemizedlist>
|
---|
4449 |
|
---|
4450 | <para>
|
---|
4451 | You can read more about the setup of this combination in the man page for <command>cupsaddsmb</command> (which
|
---|
4452 | is only present with CUPS installed, and only current from CUPS 1.1.16).
|
---|
4453 | </para>
|
---|
4454 | </sect2>
|
---|
4455 |
|
---|
4456 | <sect2>
|
---|
4457 | <title>The page_log File Syntax</title>
|
---|
4458 |
|
---|
4459 | <para>
|
---|
4460 | <indexterm><primary>page_log</primary></indexterm>
|
---|
4461 | These are the items CUPS logs in the <filename>page_log</filename> for every page of a job:
|
---|
4462 | </para>
|
---|
4463 |
|
---|
4464 | <itemizedlist>
|
---|
4465 | <listitem><para>Printer name</para></listitem>
|
---|
4466 |
|
---|
4467 | <listitem><para>User name</para></listitem>
|
---|
4468 |
|
---|
4469 | <listitem><para>Job ID</para></listitem>
|
---|
4470 |
|
---|
4471 | <listitem><para>Time of printing</para></listitem>
|
---|
4472 |
|
---|
4473 | <listitem><para>Page number</para></listitem>
|
---|
4474 |
|
---|
4475 | <listitem><para>Number of copies</para></listitem>
|
---|
4476 |
|
---|
4477 | <listitem><para>A billing information string (optional)</para></listitem>
|
---|
4478 |
|
---|
4479 | <listitem><para>The host that sent the job (included since version 1.1.19)</para></listitem>
|
---|
4480 | </itemizedlist>
|
---|
4481 |
|
---|
4482 | <para>
|
---|
4483 | Here is an extract of my CUPS server's <filename>page_log</filename> file to illustrate the
|
---|
4484 | format and included items:
|
---|
4485 | </para>
|
---|
4486 |
|
---|
4487 | <para><screen>
|
---|
4488 | tec_IS2027 kurt 401 [22/Apr/2003:10:28:43 +0100] 1 3 #marketing 10.160.50.13
|
---|
4489 | tec_IS2027 kurt 401 [22/Apr/2003:10:28:43 +0100] 2 3 #marketing 10.160.50.13
|
---|
4490 | tec_IS2027 kurt 401 [22/Apr/2003:10:28:43 +0100] 3 3 #marketing 10.160.50.13
|
---|
4491 | tec_IS2027 kurt 401 [22/Apr/2003:10:28:43 +0100] 4 3 #marketing 10.160.50.13
|
---|
4492 | Dig9110 boss 402 [22/Apr/2003:10:33:22 +0100] 1 440 finance-dep 10.160.51.33
|
---|
4493 | </screen></para>
|
---|
4494 |
|
---|
4495 | <para>
|
---|
4496 | This was job ID <parameter>401</parameter>, printed on <parameter>tec_IS2027</parameter>
|
---|
4497 | by user <parameter>kurt</parameter>, a 64-page job printed in three copies, billed to
|
---|
4498 | <parameter>#marketing</parameter>, and sent from IP address <constant>10.160.50.13.</constant>
|
---|
4499 | The next job had ID <parameter>402</parameter>, was sent by user <parameter>boss</parameter>
|
---|
4500 | from IP address <constant>10.160.51.33</constant>, printed from one page 440 copies, and
|
---|
4501 | is set to be billed to <parameter>finance-dep</parameter>.
|
---|
4502 | </para>
|
---|
4503 | </sect2>
|
---|
4504 |
|
---|
4505 | <sect2>
|
---|
4506 | <title>Possible Shortcomings</title>
|
---|
4507 |
|
---|
4508 | <para>
|
---|
4509 | What flaws or shortcomings are there with this quota system?
|
---|
4510 | </para>
|
---|
4511 |
|
---|
4512 | <itemizedlist>
|
---|
4513 | <listitem><para>The ones named above (wrongly logged job in case of
|
---|
4514 | printer hardware failure, and so on).</para></listitem>
|
---|
4515 |
|
---|
4516 | <listitem><para>In reality, CUPS counts the job pages that are being
|
---|
4517 | processed in <emphasis>software</emphasis> (that is, going through the
|
---|
4518 | RIP) rather than the physical sheets successfully leaving the
|
---|
4519 | printing device. Thus, if there is a jam while printing the fifth sheet out
|
---|
4520 | of 1,000 and the job is aborted by the printer, the page count will
|
---|
4521 | still show the figure of 1,000 for that job.</para></listitem>
|
---|
4522 |
|
---|
4523 | <listitem><para>All quotas are the same for all users (no flexibility
|
---|
4524 | to give the boss a higher quota than the clerk) and no support for
|
---|
4525 | groups.</para></listitem>
|
---|
4526 |
|
---|
4527 | <listitem><para>No means to read out the current balance or the
|
---|
4528 | <quote>used-up</quote> number of current quota.</para></listitem>
|
---|
4529 |
|
---|
4530 | <listitem><para>A user having used up 99 sheets of a 100 quota will
|
---|
4531 | still be able to send and print a 1,000 sheet job.</para></listitem>
|
---|
4532 |
|
---|
4533 | <listitem><para>A user being denied a job because of a filled-up quota
|
---|
4534 | does not get a meaningful error message from CUPS other than
|
---|
4535 | <quote>client-error-not-possible</quote>.</para></listitem>
|
---|
4536 | </itemizedlist>
|
---|
4537 | </sect2>
|
---|
4538 |
|
---|
4539 | <sect2>
|
---|
4540 | <title>Future Developments</title>
|
---|
4541 |
|
---|
4542 | <para>
|
---|
4543 | This is the best system currently available, and there are huge
|
---|
4544 | improvements under development for CUPS 1.2:
|
---|
4545 | </para>
|
---|
4546 |
|
---|
4547 | <itemizedlist>
|
---|
4548 | <listitem><para>Page counting will go into the backends (these talk
|
---|
4549 | directly to the printer and will increase the count in sync with the
|
---|
4550 | actual printing process; thus, a jam at the fifth sheet will lead to a
|
---|
4551 | stop in the counting).</para></listitem>
|
---|
4552 |
|
---|
4553 | <listitem><para>Quotas will be handled more flexibly.</para></listitem>
|
---|
4554 |
|
---|
4555 | <listitem><para>Probably there will be support for users to inquire
|
---|
4556 | about their accounts in advance.</para></listitem>
|
---|
4557 |
|
---|
4558 | <listitem><para>Probably there will be support for some other tools
|
---|
4559 | around this topic.</para></listitem>
|
---|
4560 | </itemizedlist>
|
---|
4561 | </sect2>
|
---|
4562 |
|
---|
4563 | <sect2>
|
---|
4564 | <title>Other Accounting Tools</title>
|
---|
4565 |
|
---|
4566 | <para>
|
---|
4567 | Other accounting tools that can be used includes: PrintAnalyzer, pyKota, printbill, LogReport.
|
---|
4568 | For more information regarding these tools you can try a Google search.
|
---|
4569 | </para>
|
---|
4570 |
|
---|
4571 | </sect2>
|
---|
4572 | </sect1>
|
---|
4573 |
|
---|
4574 | <sect1>
|
---|
4575 | <title>Additional Material</title>
|
---|
4576 |
|
---|
4577 | <para>
|
---|
4578 | A printer queue with <emphasis>no</emphasis> PPD associated to it is a
|
---|
4579 | <quote>raw</quote> printer, and all files will go directly there as received by the
|
---|
4580 | spooler. The exceptions are file types <parameter>application/octet-stream</parameter>
|
---|
4581 | that need the pass-through feature enabled. <quote>Raw</quote> queues do not do any
|
---|
4582 | filtering at all; they hand the file directly to the CUPS backend.
|
---|
4583 | This backend is responsible for sending the data to the device
|
---|
4584 | (as in the <quote>device URI</quote> notation: <filename>lpd://, socket://,
|
---|
4585 | smb://, ipp://, http://, parallel:/, serial:/, usb:/</filename>, and so on).
|
---|
4586 | </para>
|
---|
4587 |
|
---|
4588 | <para>
|
---|
4589 | cupsomatic/Foomatic are <emphasis>not</emphasis> native CUPS drivers
|
---|
4590 | and they do not ship with CUPS. They are a third-party add-on
|
---|
4591 | developed at Linuxprinting.org. As such, they are a brilliant hack to
|
---|
4592 | make all models (driven by Ghostscript drivers/filters in traditional
|
---|
4593 | spoolers) also work via CUPS, with the same (good or bad!) quality as
|
---|
4594 | in these other spoolers. <parameter>cupsomatic</parameter> is only a vehicle to execute a
|
---|
4595 | Ghostscript command line at that stage in the CUPS filtering chain
|
---|
4596 | where normally the native CUPS <parameter>pstoraster</parameter> filter would kick
|
---|
4597 | in. <parameter>cupsomatic</parameter> bypasses <parameter>pstoraster</parameter>, kidnaps the print file from CUPS,
|
---|
4598 | and redirects it to go through Ghostscript. CUPS accepts this
|
---|
4599 | because the associated cupsomatic/foomatic-PPD specifies:
|
---|
4600 |
|
---|
4601 | <programlisting>
|
---|
4602 | *cupsFilter: "application/vnd.cups-postscript 0 cupsomatic"
|
---|
4603 | </programlisting>
|
---|
4604 |
|
---|
4605 | This line persuades CUPS to hand the file to <parameter>cupsomatic</parameter> once it has
|
---|
4606 | successfully converted it to the MIME type
|
---|
4607 | <parameter>application/vnd.cups-postscript</parameter>. This conversion will not happen for
|
---|
4608 | jobs arriving from Windows that are autotyped
|
---|
4609 | <parameter>application/octet-stream</parameter>, with the according changes in
|
---|
4610 | <filename>/etc/cups/mime.types</filename> in place.
|
---|
4611 | </para>
|
---|
4612 |
|
---|
4613 | <para>
|
---|
4614 | CUPS is widely configurable and flexible, even regarding its filtering
|
---|
4615 | mechanism. Another workaround in some situations would be to have in
|
---|
4616 | <filename>/etc/cups/mime.types</filename> entries as follows:
|
---|
4617 |
|
---|
4618 | <programlisting>
|
---|
4619 | application/postscript application/vnd.cups-raw 0 -
|
---|
4620 | application/vnd.cups-postscript application/vnd.cups-raw 0 -
|
---|
4621 | </programlisting>
|
---|
4622 |
|
---|
4623 | This would prevent all PostScript files from being filtered (rather,
|
---|
4624 | they will through the virtual <emphasis>nullfilter</emphasis>
|
---|
4625 | denoted with <quote>-</quote>). This could only be useful for PostScript printers. If you
|
---|
4626 | want to print PostScript code on non-PostScript printers (provided they support ASCII
|
---|
4627 | text printing), an entry as follows could be useful:
|
---|
4628 |
|
---|
4629 | <programlisting>
|
---|
4630 | */* application/vnd.cups-raw 0 -
|
---|
4631 | </programlisting>
|
---|
4632 |
|
---|
4633 | and would effectively send <emphasis>all</emphasis> files to the
|
---|
4634 | backend without further processing.
|
---|
4635 | </para>
|
---|
4636 |
|
---|
4637 | <para>
|
---|
4638 | You could have the following entry:
|
---|
4639 |
|
---|
4640 | <programlisting>
|
---|
4641 | application/vnd.cups-postscript application/vnd.cups-raw 0 \
|
---|
4642 | my_PJL_stripping_filter
|
---|
4643 | </programlisting>
|
---|
4644 |
|
---|
4645 | You will need to write a <parameter>my_PJL_stripping_filter</parameter>
|
---|
4646 | (which could be a shell script) that parses the PostScript and removes the
|
---|
4647 | unwanted PJL. This needs to conform to CUPS filter design
|
---|
4648 | (mainly, receive and pass the parameters printername, job-id,
|
---|
4649 | username, jobtitle, copies, print options, and possibly the
|
---|
4650 | filename). It is installed as world executable into
|
---|
4651 | <filename>/usr/lib/cups/filters/</filename> and is called by CUPS
|
---|
4652 | if it encounters a MIME type <parameter>application/vnd.cups-postscript</parameter>.
|
---|
4653 | </para>
|
---|
4654 |
|
---|
4655 | <para>
|
---|
4656 | CUPS can handle <parameter>-o job-hold-until=indefinite</parameter>.
|
---|
4657 | This keeps the job in the queue on hold. It will only be printed
|
---|
4658 | upon manual release by the printer operator. This is a requirement in
|
---|
4659 | many central reproduction departments, where a few operators manage
|
---|
4660 | the jobs of hundreds of users on some big machine, where no user is
|
---|
4661 | allowed to have direct access (such as when the operators often need
|
---|
4662 | to load the proper paper type before running the 10,000 page job
|
---|
4663 | requested by marketing for the mailing, and so on).
|
---|
4664 | </para>
|
---|
4665 | </sect1>
|
---|
4666 |
|
---|
4667 | <sect1>
|
---|
4668 | <title>Autodeletion or Preservation of CUPS Spool Files</title>
|
---|
4669 |
|
---|
4670 | <para>
|
---|
4671 | <indexterm><primary>/var/spool/samba</primary></indexterm>
|
---|
4672 | <indexterm><primary>/var/spool/cups/</primary></indexterm>
|
---|
4673 | <indexterm><primary>cupsd.conf</primary></indexterm>
|
---|
4674 | Samba print files pass through two spool directories. One is the incoming directory managed by Samba (set in
|
---|
4675 | the <smbconfoption name="path">/var/spool/samba</smbconfoption> directive in the <smbconfsection
|
---|
4676 | name="[printers]"/> section of &smb.conf;). The other is the spool directory of your UNIX print subsystem. For
|
---|
4677 | CUPS it is normally <filename>/var/spool/cups/</filename>, as set by the <filename>cupsd.conf</filename>
|
---|
4678 | directive <filename>RequestRoot /var/spool/cups</filename>.
|
---|
4679 | </para>
|
---|
4680 |
|
---|
4681 | <sect2>
|
---|
4682 | <title>CUPS Configuration Settings Explained</title>
|
---|
4683 |
|
---|
4684 | <para>
|
---|
4685 | Some important parameter settings in the CUPS configuration file
|
---|
4686 | <filename>cupsd.conf</filename> are:
|
---|
4687 | </para>
|
---|
4688 |
|
---|
4689 | <variablelist>
|
---|
4690 |
|
---|
4691 | <varlistentry><term>PreserveJobHistory Yes</term>
|
---|
4692 | <listitem><para>
|
---|
4693 | This keeps some details of jobs in cupsd's mind (well, it keeps the
|
---|
4694 | c12345, c12346, and so on, files in the CUPS spool directory, which does a
|
---|
4695 | similar job as the old-fashioned BSD-LPD control files). This is set
|
---|
4696 | to <quote>Yes</quote> as a default.
|
---|
4697 | </para></listitem></varlistentry>
|
---|
4698 |
|
---|
4699 | <varlistentry><term>PreserveJobFiles Yes</term>
|
---|
4700 | <listitem><para>
|
---|
4701 | This keeps the job files themselves in cupsd's mind
|
---|
4702 | (it keeps the d12345, d12346, etc., files in the CUPS spool
|
---|
4703 | directory). This is set to <quote>No</quote> as the CUPS
|
---|
4704 | default.
|
---|
4705 | </para></listitem></varlistentry>
|
---|
4706 |
|
---|
4707 | <varlistentry><term><quote>MaxJobs 500</quote></term>
|
---|
4708 | <listitem><para>
|
---|
4709 | This directive controls the maximum number of jobs
|
---|
4710 | that are kept in memory. Once the number of jobs reaches the limit,
|
---|
4711 | the oldest completed job is automatically purged from the system to
|
---|
4712 | make room for the new one. If all of the known jobs are still
|
---|
4713 | pending or active, then the new job will be rejected. Setting the
|
---|
4714 | maximum to 0 disables this functionality. The default setting is
|
---|
4715 | 0.
|
---|
4716 | </para></listitem></varlistentry>
|
---|
4717 | </variablelist>
|
---|
4718 |
|
---|
4719 | <para>
|
---|
4720 | (There are also additional settings for <parameter>MaxJobsPerUser</parameter> and
|
---|
4721 | <parameter>MaxJobsPerPrinter</parameter>.)
|
---|
4722 | </para>
|
---|
4723 | </sect2>
|
---|
4724 |
|
---|
4725 | <sect2>
|
---|
4726 | <title>Preconditions</title>
|
---|
4727 |
|
---|
4728 | <para>
|
---|
4729 | For everything to work as it should, you need to have three things:
|
---|
4730 | </para>
|
---|
4731 |
|
---|
4732 | <itemizedlist>
|
---|
4733 | <listitem><para>A Samba smbd that is compiled against <filename>libcups</filename> (check
|
---|
4734 | on Linux by running <userinput>ldd `which smbd'</userinput>).</para></listitem>
|
---|
4735 |
|
---|
4736 | <listitem><para>A Samba-&smb.conf; setting of
|
---|
4737 | <smbconfoption name="printing">cups</smbconfoption>.</para></listitem>
|
---|
4738 |
|
---|
4739 | <listitem><para>Another Samba &smb.conf; setting of
|
---|
4740 | <smbconfoption name="printcap">cups</smbconfoption>.</para></listitem>
|
---|
4741 | </itemizedlist>
|
---|
4742 |
|
---|
4743 | <note><para>
|
---|
4744 | In this case, all other manually set printing-related commands (like
|
---|
4745 | <smbconfoption name="print command"/>,
|
---|
4746 | <smbconfoption name="lpq command"/>,
|
---|
4747 | <smbconfoption name="lprm command"/>,
|
---|
4748 | <smbconfoption name="lppause command"/>, and
|
---|
4749 | <smbconfoption name="lpresume command"/>) are ignored, and they should normally have no
|
---|
4750 | influence whatsoever on your printing.
|
---|
4751 | </para></note>
|
---|
4752 | </sect2>
|
---|
4753 |
|
---|
4754 | <sect2>
|
---|
4755 | <title>Manual Configuration</title>
|
---|
4756 |
|
---|
4757 | <para>
|
---|
4758 | If you want to do things manually, replace the <smbconfoption name="printing">cups</smbconfoption>
|
---|
4759 | by <smbconfoption name="printing">bsd</smbconfoption>. Then your manually set commands may work
|
---|
4760 | (I haven't tested this), and a <smbconfoption name="print command">lp -d %P %s; rm %s</smbconfoption>
|
---|
4761 | may do what you need.
|
---|
4762 | </para>
|
---|
4763 | </sect2>
|
---|
4764 | </sect1>
|
---|
4765 |
|
---|
4766 | <sect1>
|
---|
4767 | <title>Printing from CUPS to Windows-Attached Printers</title>
|
---|
4768 |
|
---|
4769 | <para>
|
---|
4770 | <indexterm><primary>smbspool</primary></indexterm>
|
---|
4771 | <indexterm><primary>backends</primary></indexterm>
|
---|
4772 | From time to time the question arises, how can you print <emphasis>to</emphasis> a Windows-attached printer
|
---|
4773 | <emphasis>from</emphasis> Samba? Normally the local connection from Windows host to printer would be done by
|
---|
4774 | USB or parallel cable, but this does not matter to Samba. From here only an SMB connection needs to be opened
|
---|
4775 | to the Windows host. Of course, this printer must be shared first. As you have learned by now, CUPS uses
|
---|
4776 | <emphasis>backends</emphasis> to talk to printers and other servers. To talk to Windows shared printers, you
|
---|
4777 | need to use the <filename>smb</filename> (surprise, surprise!) backend. Check if this is in the CUPS backend
|
---|
4778 | directory. This usually resides in <filename>/usr/lib/cups/backend/</filename>. You need to find an
|
---|
4779 | <filename>smb</filename> file there. It should be a symlink to <filename>smbspool</filename>, and the file
|
---|
4780 | must exist and be executable:
|
---|
4781 | <screen>
|
---|
4782 | &rootprompt;<userinput>ls -l /usr/lib/cups/backend/</userinput>
|
---|
4783 | total 253
|
---|
4784 | drwxr-xr-x 3 root root 720 Apr 30 19:04 .
|
---|
4785 | drwxr-xr-x 6 root root 125 Dec 19 17:13 ..
|
---|
4786 | -rwxr-xr-x 1 root root 10692 Feb 16 21:29 canon
|
---|
4787 | -rwxr-xr-x 1 root root 10692 Feb 16 21:29 epson
|
---|
4788 | lrwxrwxrwx 1 root root 3 Apr 17 22:50 http -> ipp
|
---|
4789 | -rwxr-xr-x 1 root root 17316 Apr 17 22:50 ipp
|
---|
4790 | -rwxr-xr-x 1 root root 15420 Apr 20 17:01 lpd
|
---|
4791 | -rwxr-xr-x 1 root root 8656 Apr 20 17:01 parallel
|
---|
4792 | -rwxr-xr-x 1 root root 2162 Mar 31 23:15 pdfdistiller
|
---|
4793 | lrwxrwxrwx 1 root root 25 Apr 30 19:04 ptal -> /usr/sbin/ptal-cups
|
---|
4794 | -rwxr-xr-x 1 root root 6284 Apr 20 17:01 scsi
|
---|
4795 | lrwxrwxrwx 1 root root 17 Apr 2 03:11 smb -> /usr/bin/smbspool
|
---|
4796 | -rwxr-xr-x 1 root root 7912 Apr 20 17:01 socket
|
---|
4797 | -rwxr-xr-x 1 root root 9012 Apr 20 17:01 usb
|
---|
4798 |
|
---|
4799 | &rootprompt;<userinput>ls -l `which smbspool`</userinput>
|
---|
4800 | -rwxr-xr-x 1 root root 563245 Dec 28 14:49 /usr/bin/smbspool
|
---|
4801 | </screen></para>
|
---|
4802 |
|
---|
4803 | <para>
|
---|
4804 | If this symlink does not exist, create it:
|
---|
4805 | <screen>
|
---|
4806 | &rootprompt;<userinput>ln -s `which smbspool` /usr/lib/cups/backend/smb</userinput>
|
---|
4807 | </screen></para>
|
---|
4808 |
|
---|
4809 | <para>
|
---|
4810 | <indexterm><primary>smbspool</primary></indexterm>
|
---|
4811 | <indexterm><primary>troubleshooting</primary></indexterm>
|
---|
4812 | <command>smbspool</command> was written by Mike Sweet from the CUPS folks. It is included and ships with
|
---|
4813 | Samba. It may also be used with print subsystems other than CUPS, to spool jobs to Windows printer shares. To
|
---|
4814 | set up printer <replaceable>winprinter</replaceable> on CUPS, you need to have a driver for it. Essentially
|
---|
4815 | this means to convert the print data on the CUPS/Samba host to a format that the printer can digest (the
|
---|
4816 | Windows host is unable to convert any files you may send). This also means you should be able to print to the
|
---|
4817 | printer if it were hooked directly at your Samba/CUPS host. For troubleshooting purposes, this is what you
|
---|
4818 | should do to determine if that part of the process chain is in order. Then proceed to fix the network
|
---|
4819 | connection/authentication to the Windows host, and so on.
|
---|
4820 | </para>
|
---|
4821 |
|
---|
4822 | <para>
|
---|
4823 | To install a printer with the <parameter>smb</parameter> backend on CUPS, use this command:
|
---|
4824 | </para>
|
---|
4825 |
|
---|
4826 | <para><screen>
|
---|
4827 | &rootprompt;<userinput>lpadmin -p winprinter -v smb://WINDOWSNETBIOSNAME/printersharename \
|
---|
4828 | -P /path/to/PPD</userinput>
|
---|
4829 | </screen></para>
|
---|
4830 |
|
---|
4831 | <para>
|
---|
4832 | <indexterm><primary>PostScript printers</primary></indexterm>
|
---|
4833 | <indexterm><primary>PPD</primary></indexterm>
|
---|
4834 | <indexterm><primary>Windows NT PostScript driver</primary></indexterm>
|
---|
4835 | The PPD must be able to direct CUPS to generate the print data for the target model. For PostScript printers,
|
---|
4836 | just use the PPD that would be used with the Windows NT PostScript driver. But what can you do if the printer
|
---|
4837 | is only accessible with a password? Or if the printer's host is part of another workgroup? This is provided
|
---|
4838 | for: You can include the required parameters as part of the <filename>smb://</filename> device-URI like this:
|
---|
4839 | </para>
|
---|
4840 |
|
---|
4841 | <itemizedlist>
|
---|
4842 | <listitem><para><filename>smb://WORKGROUP/WINDOWSNETBIOSNAME/printersharename</filename></para></listitem>
|
---|
4843 | <listitem><para><filename>smb://username:password@WORKGROUP/WINDOWSNETBIOSNAME/printersharename</filename></para></listitem>
|
---|
4844 | <listitem><para><filename>smb://username:password@WINDOWSNETBIOSNAME/printersharename</filename></para></listitem>
|
---|
4845 | </itemizedlist>
|
---|
4846 |
|
---|
4847 | <para>
|
---|
4848 | Note that the device URI will be visible in the process list of the Samba server (e.g., when someone uses the
|
---|
4849 | <command>ps -aux</command> command on Linux), even if the username and passwords are sanitized before they get
|
---|
4850 | written into the log files. This is an inherently insecure option; however, it is the only one. Don't use it
|
---|
4851 | if you want to protect your passwords. Better share the printer in a way that does not require a password!
|
---|
4852 | Printing will only work if you have a working NetBIOS name resolution up and running. Note that this is a
|
---|
4853 | feature of CUPS and you do not necessarily need to have smbd running.
|
---|
4854 |
|
---|
4855 | </para>
|
---|
4856 | </sect1>
|
---|
4857 |
|
---|
4858 | <sect1>
|
---|
4859 | <title>More CUPS Filtering Chains</title>
|
---|
4860 |
|
---|
4861 | <para>
|
---|
4862 | The diagrams in <link linkend="cups1">Filtering Chain 1</link> and <link linkend="cups2">Filtering Chain with
|
---|
4863 | cupsomatic</link> show how CUPS handles print jobs.
|
---|
4864 | </para>
|
---|
4865 |
|
---|
4866 | <figure id="cups1">
|
---|
4867 | <title>Filtering Chain 1.</title>
|
---|
4868 | <imagefile>cups1</imagefile>
|
---|
4869 | </figure>
|
---|
4870 |
|
---|
4871 | <!-- JJJ -->
|
---|
4872 | <figure id="cups2">
|
---|
4873 | <title>Filtering Chain with cupsomatic</title>
|
---|
4874 | <imagefile scale="45">cups2</imagefile>
|
---|
4875 | </figure>
|
---|
4876 |
|
---|
4877 | </sect1>
|
---|
4878 |
|
---|
4879 | <sect1>
|
---|
4880 | <title>Common Errors</title>
|
---|
4881 |
|
---|
4882 | <sect2>
|
---|
4883 | <title>Windows 9x/Me Client Can't Install Driver</title>
|
---|
4884 |
|
---|
4885 | <para>For Windows 9x/Me, clients require the printer names to be eight
|
---|
4886 | characters (or <quote>8 plus 3 chars suffix</quote>) max; otherwise, the driver files
|
---|
4887 | will not get transferred when you want to download them from Samba.</para>
|
---|
4888 |
|
---|
4889 | </sect2>
|
---|
4890 |
|
---|
4891 | <sect2 id="root-ask-loop">
|
---|
4892 | <title><quote>cupsaddsmb</quote> Keeps Asking for Root Password in Never-ending Loop</title>
|
---|
4893 |
|
---|
4894 | <para>Have you set <smbconfoption name="security">user</smbconfoption>? Have
|
---|
4895 | you used <command>smbpasswd</command> to give root a Samba account?
|
---|
4896 | You can do two things: open another terminal and execute
|
---|
4897 | <command>smbpasswd -a root</command> to create the account and
|
---|
4898 | continue entering the password into the first terminal. Or, break
|
---|
4899 | out of the loop by pressing Enter twice (without trying to type a
|
---|
4900 | password).</para>
|
---|
4901 |
|
---|
4902 | <para>
|
---|
4903 | If the error is <quote>Tree connect failed: NT_STATUS_BAD_NETWORK_NAME</quote>,
|
---|
4904 | you may have forgotten to create the <filename>/etc/samba/drivers</filename> directory.
|
---|
4905 | </para>
|
---|
4906 | </sect2>
|
---|
4907 |
|
---|
4908 | <sect2>
|
---|
4909 | <title><quote>cupsaddsmb</quote> or <quote>rpcclient addriver</quote> Emit Error</title>
|
---|
4910 |
|
---|
4911 | <para>
|
---|
4912 | If <command>cupsaddsmb</command>, or <command>rpcclient addriver</command> emit the error message
|
---|
4913 | WERR_BAD_PASSWORD, refer to <link linkend="root-ask-loop">the previous common error</link>.
|
---|
4914 | </para>
|
---|
4915 |
|
---|
4916 | </sect2>
|
---|
4917 |
|
---|
4918 | <sect2>
|
---|
4919 | <title><quote>cupsaddsmb</quote> Errors</title>
|
---|
4920 |
|
---|
4921 | <para>
|
---|
4922 | The use of <quote>cupsaddsmb</quote> gives <quote>No PPD file for printer...</quote>
|
---|
4923 | message while PPD file is present. What might the problem be?
|
---|
4924 | </para>
|
---|
4925 |
|
---|
4926 | <para>
|
---|
4927 | Have you enabled printer sharing on CUPS? This means, do you have a <literal><Location
|
---|
4928 | /printers>....</Location></literal> section in CUPS server's <filename>cupsd.conf</filename> that
|
---|
4929 | does not deny access to the host you run <quote>cupsaddsmb</quote> from? It <emphasis>could</emphasis> be an
|
---|
4930 | issue if you use cupsaddsmb remotely, or if you use it with a <option>-h</option> parameter:
|
---|
4931 | <userinput>cupsaddsmb -H sambaserver -h cupsserver -v printername</userinput>.
|
---|
4932 | </para>
|
---|
4933 |
|
---|
4934 | <para>Is your <parameter>TempDir</parameter> directive in
|
---|
4935 | <filename>cupsd.conf</filename> set to a valid value, and is it writable?
|
---|
4936 | </para>
|
---|
4937 |
|
---|
4938 | </sect2>
|
---|
4939 |
|
---|
4940 | <sect2>
|
---|
4941 | <title>Client Can't Connect to Samba Printer</title>
|
---|
4942 |
|
---|
4943 | <para>Use <command>smbstatus</command> to check which user
|
---|
4944 | you are from Samba's point of view. Do you have the privileges to
|
---|
4945 | write into the <smbconfsection name="[print$]"/>
|
---|
4946 | share?</para>
|
---|
4947 |
|
---|
4948 | </sect2>
|
---|
4949 |
|
---|
4950 | <sect2>
|
---|
4951 | <title>New Account Reconnection from Windows 200x/XP Troubles</title>
|
---|
4952 |
|
---|
4953 | <para>
|
---|
4954 | Once you are connected as the wrong user (for example, as <constant>nobody</constant>, which often occurs if
|
---|
4955 | you have <smbconfoption name="map to guest">bad user</smbconfoption>), Windows Explorer will not accept an
|
---|
4956 | attempt to connect again as a different user. There will not be any bytes transferred on the wire to Samba,
|
---|
4957 | but still you'll see a stupid error message that makes you think Samba has denied access. Use
|
---|
4958 | <command>smbstatus</command> to check for active connections. Kill the PIDs. You still can't re-connect, and
|
---|
4959 | you get the dreaded <computeroutput>You can't connect with a second account from the same
|
---|
4960 | machine</computeroutput> message as soon as you try. And you do not see a single byte arriving at Samba (see
|
---|
4961 | logs; use <quote>ethereal</quote>) indicating a renewed connection attempt. Shut all Explorer Windows. This
|
---|
4962 | makes Windows forget what it has cached in its memory as established connections. Then reconnect as the right
|
---|
4963 | user. The best method is to use a DOS terminal window and <emphasis>first</emphasis> do <userinput>net use z:
|
---|
4964 | \\&example.server.samba;\print$ /user:root</userinput>. Check with <command>smbstatus</command> that you are
|
---|
4965 | connected under a different account. Now open the <guilabel>Printers</guilabel> folder (on the Samba server in
|
---|
4966 | the <guilabel>Network Neighborhood</guilabel>), right-click on the printer in question, and select
|
---|
4967 | <guibutton>Connect....</guibutton>.
|
---|
4968 | </para>
|
---|
4969 | </sect2>
|
---|
4970 |
|
---|
4971 | <sect2>
|
---|
4972 | <title>Avoid Being Connected to the Samba Server as the Wrong User</title>
|
---|
4973 |
|
---|
4974 | <para>
|
---|
4975 | <indexterm><primary>smbstatus</primary></indexterm>
|
---|
4976 | You see per <command>smbstatus</command> that you are connected as user nobody, but you want to be root or
|
---|
4977 | printer admin. This is probably due to <smbconfoption name="map to guest">bad user</smbconfoption>, which
|
---|
4978 | silently connected you under the guest account when you gave (maybe by accident) an incorrect username. Remove
|
---|
4979 | <smbconfoption name="map to guest"/> if you want to prevent this.
|
---|
4980 | </para>
|
---|
4981 | </sect2>
|
---|
4982 |
|
---|
4983 | <sect2>
|
---|
4984 | <title>Upgrading to CUPS Drivers from Adobe Drivers</title>
|
---|
4985 |
|
---|
4986 | <para>
|
---|
4987 | This information came from a mailing list posting regarding problems experienced when
|
---|
4988 | upgrading from Adobe drivers to CUPS drivers on Microsoft Windows NT/200x/XP clients.
|
---|
4989 | </para>
|
---|
4990 |
|
---|
4991 | <para>First delete all old Adobe-using printers. Then delete all old Adobe drivers. (On Windows 200x/XP, right-click in
|
---|
4992 | the background of <guilabel>Printers</guilabel> folder, select <guimenuitem>Server Properties...</guimenuitem>, select
|
---|
4993 | tab <guilabel>Drivers</guilabel>, and delete here).</para>
|
---|
4994 | </sect2>
|
---|
4995 |
|
---|
4996 | <sect2>
|
---|
4997 | <title>Can't Use <quote>cupsaddsmb</quote> on Samba Server, Which Is a PDC</title>
|
---|
4998 |
|
---|
4999 | <para>Do you use the <quote>naked</quote> root user name? Try to do it
|
---|
5000 | this way: <userinput>cupsaddsmb -U <replaceable>DOMAINNAME</replaceable>\\root -v
|
---|
5001 | <replaceable>printername</replaceable></userinput>> (note the two backslashes: the first one is
|
---|
5002 | required to <quote>escape</quote> the second one).</para>
|
---|
5003 |
|
---|
5004 | </sect2>
|
---|
5005 |
|
---|
5006 | <sect2>
|
---|
5007 | <title>Deleted Windows 200x Printer Driver Is Still Shown</title>
|
---|
5008 |
|
---|
5009 | <para>Deleting a printer on the client will not delete the
|
---|
5010 | driver too (to verify, right-click on the white background of the
|
---|
5011 | <guilabel>Printers</guilabel> folder, select <guimenuitem>Server Properties</guimenuitem> and click on the
|
---|
5012 | <guilabel>Drivers</guilabel> tab). These same old drivers will be re-used when you try to
|
---|
5013 | install a printer with the same name. If you want to update to a new
|
---|
5014 | driver, delete the old ones first. Deletion is only possible if no
|
---|
5015 | other printer uses the same driver.</para>
|
---|
5016 | </sect2>
|
---|
5017 |
|
---|
5018 | <sect2>
|
---|
5019 | <title>Windows 200x/XP Local Security Policies</title>
|
---|
5020 |
|
---|
5021 | <indexterm><primary>Local security policies</primary></indexterm>
|
---|
5022 | <indexterm><primary>unsigned drivers</primary></indexterm>
|
---|
5023 | <para>Local security policies may not allow the installation of unsigned drivers &smbmdash; <quote>local
|
---|
5024 | security policies</quote> may not allow the installation of printer drivers at all.</para>
|
---|
5025 |
|
---|
5026 | </sect2>
|
---|
5027 |
|
---|
5028 | <sect2>
|
---|
5029 | <title>Administrator Cannot Install Printers for All Local Users</title>
|
---|
5030 |
|
---|
5031 | <para>
|
---|
5032 | <indexterm><primary>SMB printers</primary></indexterm>
|
---|
5033 | <indexterm><primary>IPP client</primary></indexterm>
|
---|
5034 | Windows XP handles SMB printers on a <quote>per-user</quote> basis.
|
---|
5035 | This means every user needs to install the printer himself or herself. To have a printer available for
|
---|
5036 | everybody, you might want to use the built-in IPP client capabilities of Win XP. Add a printer with the print
|
---|
5037 | path of <parameter>http://cupsserver:631/printers/printername</parameter>. We're still looking into this one.
|
---|
5038 | Maybe a logon script could automatically install printers for all users.
|
---|
5039 | </para>
|
---|
5040 |
|
---|
5041 | </sect2>
|
---|
5042 |
|
---|
5043 | <sect2>
|
---|
5044 | <title>Print Change, Notify Functions on NT Clients</title>
|
---|
5045 |
|
---|
5046 | <para>For print change, notify functions on NT++ clients. These need to run the <command>Server</command>
|
---|
5047 | service first (renamed to <command>File & Print Sharing for MS Networks</command> in XP).</para>
|
---|
5048 |
|
---|
5049 | </sect2>
|
---|
5050 |
|
---|
5051 | <sect2>
|
---|
5052 | <title>Windows XP SP1</title>
|
---|
5053 |
|
---|
5054 | <para>Windows XP SP1 introduced a Point and Print Restriction Policy (this restriction does not apply to
|
---|
5055 | <quote>Administrator</quote> or <quote>Power User</quote> groups of users). In Group Policy Object Editor, go
|
---|
5056 | to <guimenu>User Configuration -> Administrative Templates -> Control Panel -> Printers</guimenu>. The policy
|
---|
5057 | is automatically set to <constant>Enabled</constant> and the <constant>Users can only Point and Print to
|
---|
5058 | machines in their Forest</constant> . You probably need to change it to <constant>Disabled</constant> or
|
---|
5059 | <constant>Users can only Point and Print to these servers</constant> to make driver downloads from Samba
|
---|
5060 | possible.
|
---|
5061 | </para>
|
---|
5062 | </sect2>
|
---|
5063 |
|
---|
5064 | <sect2>
|
---|
5065 | <title>Print Options for All Users Can't Be Set on Windows 200x/XP</title>
|
---|
5066 |
|
---|
5067 | <para>How are you doing it? I bet the wrong way (it is not easy to find out, though). There are three
|
---|
5068 | different ways to bring you to a dialog that <emphasis>seems</emphasis> to set everything. All three dialogs
|
---|
5069 | <emphasis>look</emphasis> the same, yet only one of them does what you intend. You need to be Administrator or
|
---|
5070 | Print Administrator to do this for all users. Here is how I do it on XP:
|
---|
5071 | </para>
|
---|
5072 |
|
---|
5073 | <orderedlist numeration="upperalpha">
|
---|
5074 |
|
---|
5075 | <listitem><para>The first wrong way:
|
---|
5076 |
|
---|
5077 | <orderedlist>
|
---|
5078 | <listitem><para>Open the <guilabel>Printers</guilabel>
|
---|
5079 | folder.</para></listitem>
|
---|
5080 |
|
---|
5081 | <listitem><para>Right-click on the printer
|
---|
5082 | (<guilabel>remoteprinter on cupshost</guilabel>) and
|
---|
5083 | select in context menu <guimenuitem>Printing
|
---|
5084 | Preferences...</guimenuitem></para></listitem>.
|
---|
5085 |
|
---|
5086 | <listitem><para>Look at this dialog closely and remember what it looks like.</para></listitem>
|
---|
5087 | </orderedlist>
|
---|
5088 | </para></listitem>
|
---|
5089 |
|
---|
5090 | <listitem><para>The second wrong way:
|
---|
5091 | <orderedlist>
|
---|
5092 | <listitem><para>Open the <guilabel>Printers</guilabel> folder.</para></listitem>
|
---|
5093 |
|
---|
5094 | <listitem><para>Right-click on the printer (<guilabel>remoteprinter on
|
---|
5095 | cupshost</guilabel>) and select the context menu
|
---|
5096 | <guimenuitem>Properties</guimenuitem>.</para></listitem>
|
---|
5097 |
|
---|
5098 | <listitem><para>Click on the <guilabel>General</guilabel> tab.</para></listitem>
|
---|
5099 |
|
---|
5100 | <listitem><para>Click on the button <guibutton>Printing
|
---|
5101 | Preferences...</guibutton></para></listitem>.
|
---|
5102 |
|
---|
5103 | <listitem><para>A new dialog opens. Keep this dialog open and go back
|
---|
5104 | to the parent dialog.</para></listitem>
|
---|
5105 | </orderedlist>
|
---|
5106 | </para></listitem>
|
---|
5107 |
|
---|
5108 | <listitem><para>The third and correct way:
|
---|
5109 | <orderedlist>
|
---|
5110 | <listitem><para>Open the <guilabel>Printers</guilabel> folder.</para></listitem>
|
---|
5111 |
|
---|
5112 | <listitem><para>Right-click on the printer (<guilabel>remoteprinter on
|
---|
5113 | cupshost</guilabel>) and select the context menu
|
---|
5114 | <guimenuitem>Properties</guimenuitem>.</para></listitem>
|
---|
5115 |
|
---|
5116 | <listitem><para>Click on the <guilabel>Advanced</guilabel>
|
---|
5117 | tab. (If everything is <quote>grayed out,</quote> then you are not logged
|
---|
5118 | in as a user with enough privileges).</para></listitem>
|
---|
5119 |
|
---|
5120 | <listitem><para>Click on the <guibutton>Printing
|
---|
5121 | Defaults...</guibutton> button.</para></listitem>
|
---|
5122 |
|
---|
5123 | <listitem><para>On any of the two new tabs, click on the
|
---|
5124 | <guibutton>Advanced...</guibutton> button.</para></listitem>
|
---|
5125 |
|
---|
5126 | <listitem><para>A new dialog opens. Compare this one to the other
|
---|
5127 | identical-looking one from step <quote>B.5</quote> or A.3".</para></listitem>
|
---|
5128 | </orderedlist>
|
---|
5129 | </para></listitem>
|
---|
5130 | </orderedlist>
|
---|
5131 |
|
---|
5132 | <para>
|
---|
5133 | Do you see any difference? I don't either. However, only the last one, which you arrived at with steps
|
---|
5134 | <quote>C.1. to C.6.</quote>, will save any settings permanently and be the defaults for new users. If you want
|
---|
5135 | all clients to get the same defaults, you need to conduct these steps <emphasis>as Administrator</emphasis>
|
---|
5136 | (<smbconfoption name="printer admin"/> in &smb.conf;) <emphasis>before</emphasis> a client downloads the
|
---|
5137 | driver (the clients can later set their own <emphasis>per-user defaults</emphasis> by following the procedures
|
---|
5138 | <emphasis>A</emphasis> or <emphasis>B</emphasis>).
|
---|
5139 | </para>
|
---|
5140 |
|
---|
5141 | </sect2>
|
---|
5142 |
|
---|
5143 | <sect2>
|
---|
5144 | <title>Most Common Blunders in Driver Settings on Windows Clients</title>
|
---|
5145 |
|
---|
5146 | <para>
|
---|
5147 | Don't use <parameter>Optimize for Speed</parameter>, but use <parameter>Optimize for Portability</parameter>
|
---|
5148 | instead (Adobe PS Driver). Don't use <parameter>Page Independence: No</parameter>. Always settle with
|
---|
5149 | <parameter>Page Independence: Yes</parameter> (Microsoft PS Driver and CUPS PS Driver for Windows NT/200x/XP).
|
---|
5150 | If there are problems with fonts, use <parameter>Download as Softfont into printer</parameter> (Adobe PS
|
---|
5151 | Driver). For <guilabel>TrueType Download Options</guilabel> choose <constant>Outline</constant>. Use
|
---|
5152 | PostScript Level 2 if you are having trouble with a non-PS printer and if there is a choice.
|
---|
5153 | </para>
|
---|
5154 |
|
---|
5155 | </sect2>
|
---|
5156 |
|
---|
5157 | <sect2>
|
---|
5158 | <title><command>cupsaddsmb</command> Does Not Work with Newly Installed Printer</title>
|
---|
5159 |
|
---|
5160 | <para>
|
---|
5161 | Symptom: The last command of <command>cupsaddsmb</command> does not complete successfully. If the <command>cmd
|
---|
5162 | = setdriver printername printername</command> result was NT_STATUS_UNSUCCESSFUL, then possibly the printer was
|
---|
5163 | not yet recognized by Samba. Did it show up in Network Neighborhood? Did it show up in <command>rpcclient
|
---|
5164 | hostname -c `enumprinters'</command>? Restart smbd (or send a <command>kill -HUP</command> to all processes
|
---|
5165 | listed by <command>smbstatus</command>, and try again.
|
---|
5166 | </para></sect2>
|
---|
5167 |
|
---|
5168 | <sect2>
|
---|
5169 | <title>Permissions on <filename>/var/spool/samba/</filename> Get Reset After Each Reboot</title>
|
---|
5170 |
|
---|
5171 | <para>
|
---|
5172 | Have you ever by accident set the CUPS spool directory to the same location (<parameter>RequestRoot
|
---|
5173 | /var/spool/samba/</parameter> in <filename>cupsd.conf</filename> or the other way round:
|
---|
5174 | <filename>/var/spool/cups/</filename> is set as <smbconfoption name="path"/>> in the <smbconfsection
|
---|
5175 | name="[printers]"/> section)? These <parameter>must</parameter> be different. Set <parameter>RequestRoot
|
---|
5176 | /var/spool/cups/</parameter> in <filename>cupsd.conf</filename> and <smbconfoption name="path">
|
---|
5177 | /var/spool/samba</smbconfoption> in the <smbconfsection name="[printers]"/> section of &smb.conf;. Otherwise,
|
---|
5178 | cupsd will sanitize permissions to its spool directory with each restart and printing will not work reliably.
|
---|
5179 | </para>
|
---|
5180 |
|
---|
5181 | </sect2>
|
---|
5182 |
|
---|
5183 | <sect2>
|
---|
5184 | <title>Print Queue Called <quote>lp</quote> Mishandles Print Jobs</title>
|
---|
5185 |
|
---|
5186 | <para>
|
---|
5187 | In this case a print queue called <quote>lp</quote> intermittently swallows jobs and
|
---|
5188 | spits out completely different ones from what was sent.
|
---|
5189 | </para>
|
---|
5190 |
|
---|
5191 | <para>
|
---|
5192 | <indexterm><primary>lp</primary></indexterm>
|
---|
5193 | <indexterm><primary>Implicit Classes</primary></indexterm>
|
---|
5194 | <indexterm><primary>BrowseShortNames</primary></indexterm>
|
---|
5195 | It is a bad idea to name any printer <quote>lp</quote>. This is the traditional UNIX name for the default
|
---|
5196 | printer. CUPS may be set up to do an automatic creation of Implicit Classes. This means, to group all printers
|
---|
5197 | with the same name to a pool of devices and load-balance the jobs across them in a round-robin fashion.
|
---|
5198 | Chances are high that someone else has a printer named <quote>lp</quote> too. You may receive that person's
|
---|
5199 | jobs and send your own to his or her device unwittingly. To have tight control over the printer names, set
|
---|
5200 | <parameter>BrowseShortNames No</parameter>. It will present any printer as
|
---|
5201 | <replaceable>printername@cupshost</replaceable>, which gives you better control over what may happen in a
|
---|
5202 | large networked environment.
|
---|
5203 | </para>
|
---|
5204 |
|
---|
5205 | </sect2>
|
---|
5206 |
|
---|
5207 | <sect2>
|
---|
5208 | <title>Location of Adobe PostScript Driver Files for <quote>cupsaddsmb</quote></title>
|
---|
5209 |
|
---|
5210 | <para>
|
---|
5211 | Use <command>smbclient</command> to connect to any Windows box with a shared PostScript printer:
|
---|
5212 | <command>smbclient //windowsbox/print\$ -U guest</command>. You can navigate to the
|
---|
5213 | <filename>W32X86/2</filename> subdir to <command>mget ADOBE*</command> and other files or to
|
---|
5214 | <filename>WIN40/0</filename> to do the same. Another option is to download the <filename>*.exe</filename>
|
---|
5215 | packaged files from the Adobe Web site.
|
---|
5216 | </para>
|
---|
5217 |
|
---|
5218 | </sect2>
|
---|
5219 |
|
---|
5220 | </sect1>
|
---|
5221 |
|
---|
5222 | <sect1>
|
---|
5223 | <title>Overview of the CUPS Printing Processes</title>
|
---|
5224 |
|
---|
5225 | <para>
|
---|
5226 | A complete overview of the CUPS printing processes can be found in <link linkend="a_small">the CUPS
|
---|
5227 | Printing Overview diagram</link>.
|
---|
5228 | </para>
|
---|
5229 |
|
---|
5230 | <figure id="a_small">
|
---|
5231 | <title>CUPS Printing Overview.</title>
|
---|
5232 | <imagefile scale="45">a_small</imagefile>
|
---|
5233 | </figure>
|
---|
5234 | </sect1>
|
---|
5235 |
|
---|
5236 | </chapter>
|
---|