This commit was manufactured by cvs2svn to create branch 'SAMBA_3_0'.(This used to...
[samba.git] / docs / docbook / projdoc / CUPS-printing.sgml
1 <chapter id="CUPS-printing">
2
3
4 <chapterinfo>
5         <author>
6                 <firstname>John H</firstname><surname>Terpstra</surname>
7                 <affiliation>
8                         <orgname>Samba Team</orgname>
9                         <address>
10                                 <email>jht@samba.org</email>
11                         </address>
12                 </affiliation>
13         </author>
14         <author>
15                 <firstname>Kurt</firstname><surname>Pfeifle</surname>
16                 <affiliation>
17                         <address><email>kpfeifle@danka.de</email></address>
18                 </affiliation>
19         </author>
20         <pubdate> (25 March 2003) </pubdate>
21 </chapterinfo>
22
23 <title>CUPS Printing Support</title>
24
25 <sect1>
26 <title>Introduction</title>
27         
28 <para>
29 The Common Unix Print System (CUPS) has become very popular, but to many it is
30 a very mystical tool. There is a great deal of uncertainty regarding CUPS and how
31 it works. The result is seen in a large number of posting on the samba mailing lists
32 expressing frustration when MS Windows printers appear not to work with a CUPS
33 backr-end.
34 /para>
35
36 <para>
37 This is a good time to point out how CUPS can be used and what it does. CUPS is more
38 than just a print spooling system - it is a complete printer management system that
39 complies with HTTP and IPP protocols. It can be managed remotely via a web browser
40 and it can print using http and ipp protocols.
41 </para>
42
43 <para>
44 CUPS allows to creation of RAW printers (ie: NO file format translation) as well as
45 SMART printers (ie: CUPS does file format conversion as required for the printer). In
46 many ways this gives CUPS similar capabilities to the MS Windows print monitoring
47 system. Of course, if you are a CUPS advocate, you would agrue that CUPS is better!
48 In any case, let us now move on to explore how one may configure CUPS for interfacing
49 with MS Windows print clients via Samba.
50 </para>
51
52 </sect1>
53
54 <sect1>
55 <title>CUPS - RAW Print Through  Mode</title>
56
57 <para>
58 When CUPS printers are configured for RAW print-through mode operation it is the
59 responsibility of the Samba client to fully render the print job (file) in a format
60 that is suitable for direct delivery to the printer. In this case CUPS will NOT
61 do any print file format conversion work.
62 </para>
63
64 <para>
65 The CUPS files that need to be correctly set for RAW mode printers to work are:
66
67 <itemizedlist>
68         <listitem><para><filename>/etc/cups/mime.types</filename><para></listitem>
69         <listitem><para><filename>/etc/cups/mime.convs</filename><para></listitem>
70 </itemizedlist>
71
72 Both contain entries that must be uncommented to allow <emphasis>RAW</emphasis> mode
73 operation.
74 </para>
75
76 <para>
77 Firstly, to enable CUPS based printing from Samba the following options must be
78 enabled in your smb.conf file [globals] section:
79
80 <itemizedlist>
81         <listitem><para>printing = CUPS</para></listitem>
82
83         <listitem><para>printcap = CUPS</para></listitem>
84 </itemizedlist>
85
86 When these parameters are specified the print directives in smb.conf (as well as in
87 samba itself) will be ignored because samba will directly interface with CUPS through
88 it's application program interface (API) - so long as Samba has been compiled with
89 CUPS library (libcups) support. If samba has NOT been compiled with CUPS support then
90 printing will use the System V AT&amp;T command set with the <emphasis>-oraw</emphasis> 
91 option automatically passing through.
92 </para>
93
94 <para>
95 Cupsomatic (an enhanced printing utility that is part of some CUPS implementations) 
96 on the Samba/CUPS server does *not* add any features if a file is really
97 printed "raw".  However, if you have loaded the driver for the Windows client from
98 the CUPS server, using the "cupsaddsmb" utility, and if this driver is one using
99 a "Foomatic" PPD, the PJL header in question is already added on the Windows client,
100 at the time when the driver initially generated the PostScript data and CUPS in true
101 "-oraw" manner doesn't remove this PJL header and passes the file "as is" to its
102 printer communication backend.
103 </para>
104
105 <note><para>NOTE: editing in the "mime.convs" and the "mime.types" file does not *enforce*
106 "raw" printing, it only *allows* it.</para></note>
107
108 <para>
109 Print files that arrive from MS Windows printing are "auto-typed" by CUPS. This aids
110 the process of determining proper treatment while in the print queue system.
111
112 <itemizedlist>
113         <listitem><para>
114         Files generated by PCL drivers and directed at PCK printers get auto-typed as
115         <filename>application/octet-stream</filename>. Unknown file format types also
116         get auto-typed with this tag.
117         </para></listitem>
118
119         <listitem><para>
120         Files generated by a Postscript driver and directed at a Postscript printer
121         are auto-typed depending on the auto-detected most suitable MIME type as:
122
123         <itemizedlist>
124                 <listitem><para>* application/postscript</para></listitem>
125                 <listitem><para>* application/vnd.cups-postscript</para></listitem>
126         </itemizedlist>
127         </para>
128 </itemizedlist>
129 </para>
130
131
132 <para>
133 "application/postscript" first goes thru the "pstops" filter (where the page counting
134 and accounting takes place). The outcome will be of MIME type
135 "application/vnd.cups-postscript". The pstopsfilter reads and uses information from
136 the PPD and inserts user-provided options into the PostScript file. As a consequence,
137 the filtered file could possibly have an unwanted PJL header.
138 </para>
139
140 <para>
141 "application/postscript" will be all files with a ".ps", ".ai", ".eps" suffix or which
142 have as their first character string one of "%!" or "<04>%".
143 </para>
144
145 <para>
146 "application/vnd.cups-postscript" will files which contain the string
147 "LANGUAGE=POSTSCRIPT" (or similar variations with different capitalization) in the
148 first 512 bytes, and also contain the "PJL super escape code" in the first 128 bytes
149 ("<1B>%-12345X"). Very likely, most PostScript files generated on Windows using a CUPS
150 or other PPD, will have to be auto-typed as "vnd.cups-postscript".  A file produced
151 with a "Generic PostScript driver" will just be tagged "application/postscript".
152 </para>
153
154 <para>
155 Once the file is in "application/vnd.cups-postscript" format, either "pstoraster"
156 or "cupsomatic" will take over (depending on the printer configuration, as
157 determined by the PPD in use).
158 </para>
159
160 <note><para>
161 A printer queue with *no* PPD associated to it is a "raw" printer and all files
162 will go directly there as received by the spooler. The exeptions are file types
163 "application/octet-stream" which need "passthrough feature" enabled.
164 "Raw" queues don't do any filtering at all, they hand the file directly to the
165 CUPS backend. This backend is responsible for the sending of the data to the device
166 (as in the "device URI" notation as lpd://, socket://, smb://, ipp://, http://,
167 parallel:/, serial:/, usb:/ etc.)
168 </para></note>
169
170 <note><para>
171 "cupsomatic"/Foomatic are *not* native CUPS drivers and they don't ship with CUPS.
172 They are a Third Party add-on, developed at Linuxprinting.org.  As such, they are
173 a brilliant hack to make all models (driven by Ghostscript drivers/filters in
174 traditional spoolers) also work via CUPS, with the same (good or bad!) quality
175 as in these other spoolers. "cupsomatic" is only a vehicle to execute a ghostscript
176 commandline at that stage in the CUPS filtering chain, where "normally" the native
177 CUPS "pstoraster" filter would kick in.  cupsomatic by-passes pstoraster, "kidnaps"
178 the printfile from CUPS away and re-directs it to go through Ghostscipt. CUPS accepts this,
179 because the associated CUPS-O-Matic-/Foomatic-PPD specifies:
180 </para>
181
182 <programlisting>
183    *cupsFilter:  "application/vnd.cups-postscript 0 cupsomatic"
184 </programlisting>
185
186 <para>
187 This line persuades CUPS to hand the file to cupsomatic, once it has successfully
188 converted it to the MIME type "application/vnd.cups-postscript". This conversion will not
189 happen for Jobs arriving from Windows which are auto-typed "application/octet-stream",
190 with the according changes in "/etc/cups/mime.types" in place.
191 </para></note>
192
193 <para>
194 CUPS is widely configurable and flexible, even regarding its filtering mechanism.
195 Another workaround in some situations would be to have
196 in "/etc/cups/mime.types" entries as follows:
197 </para>
198
199 <programlisting>
200    application/postscript           application/vnd.cups-raw  0  -
201    application/vnd.cups-postscript  application/vnd.cups-raw  0  -
202 </programlisting>
203
204 <para>
205 This would prevent all Postscript files from being filtered (rather, they will go
206 thru the virtual "nullfilter" denoted with "-"). This could only be useful for
207 PS printers. If you want to print PS code on non-PS printers an entry as follows
208 could be useful:
209 </para>
210
211 <programlisting>
212    */*           application/vnd.cups-raw  0  -
213 </programlisting>
214
215 <para>
216 and would effectively send *all* files to the backend without further processing.
217 </para>
218
219 <para>
220 Lastly, you could have the following entry:
221 </para>
222
223 <programlisting>
224    application/vnd.cups-postscript  application/vnd.cups-raw  0  my_PJL_stripping_filter
225 </programlisting>
226
227 <para>
228 You will need to write a "my_PJL_stripping_filter" (could be a shellscript) that
229 parses the PostScript and removes the unwanted PJL. This would need to conform to
230 CUPS filter design (mainly, receive and pass the parameters printername, job-id,
231 username, jobtitle, copies, print options and possibly the filename). It would
232 be installed as world executable into "/usr/lib/cups/filters/" and will be called
233 by CUPS if it encounters a MIME type "application/vnd.cups-postscript".
234 </para>
235
236 <para>
237 CUPS can handle "-o job-hold-until=indefinite". This keeps the job in the queue
238 "on hold". It will only be printed upon manual release by the printer operator.
239 This is a requirement in many "central reproduction departments", where a few
240 operators manage the jobs of hundreds of users on some big machine, where no
241 user is allowed to have direct access. (The operators often need to load the
242 proper paper type before running the 10.000 page job requested by marketing
243 for the mailing, etc.).
244 </para>
245
246 </sect1>
247
248 <sect1>
249 <title>The CUPS Filter Chains</title>
250
251 <para>
252 The following diagrams reveal how CUPS handles print jobs.
253 </para>
254
255 <programlisting>
256 #########################################################################
257 #
258 # CUPS in and of itself has this (general) filter chain (CAPITAL
259 # letters are FILE-FORMATS or MIME types, other are filters (this is
260 # true for pre-1.1.15 of pre-4.3 versions of CUPS and ESP PrintPro):
261 #
262 # <replaceable>SOMETHNG</replaceable>-FILEFORMAT
263 #      |
264 #      |
265 #      V
266 #     <replaceable>something</replaceable>tops
267 #      |
268 #      |
269 #      V
270 # APPLICATION/POSTSCRIPT
271 #      |
272 #      |
273 #      V
274 #     pstops
275 #      |
276 #      |
277 #      V
278 # APPLICATION/VND.CUPS-POSTSCRIPT
279 #      |
280 #      |
281 #      V
282 #     pstoraster   # as shipped with CUPS, independent from any Ghostscipt
283 #      |           # installation on the system
284 #      |  (= "postscipt interpreter")
285 #      |
286 #      V
287 # APPLICATION/VND.CUPS-RASTER
288 #      |
289 #      |
290 #      V
291 #     rasterto<replaceable>something</replaceable>  (f.e. Gimp-Print filters may be plugged in here)
292 #      |   (= "raster driver")
293 #      |
294 #      V
295 # SOMETHING-DEVICE-SPECIFIC
296 #      |
297 #      |
298 #      V
299 #     backend
300 #
301 #
302 # ESP PrintPro has some enhanced "rasterto<replaceable>something</replaceable>" filters as compared to
303 # CUPS, and also a somewhat improved "pstoraster" filter.
304 #
305 # NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to
306 #       CUPS and ESP PrintPro plug-in where rasterto<replaceable>something</replaceable> is noted.
307 #
308 #########################################################################
309 </programlisting>
310
311 <programlisting>
312 #########################################################################
313 #
314 # This is how "cupsomatic" comes into play:
315 # =========================================
316 #
317 # <replaceable>SOMETHNG</replaceable>-FILEFORMAT
318 #      |
319 #      |
320 #      V
321 #    <replaceable>something</replaceable>tops
322 #      |
323 #      |
324 #      V
325 # APPLICATION/POSTSCRIPT
326 #      |
327 #      |
328 #      V
329 #    pstops
330 #      |
331 #      |
332 #      V
333 # APPLICATION/VND.CUPS-POSTSCRIPT ----------------+
334 #      |                                          |
335 #      |                                          V
336 #      V                                         cupsomatic
337 #    pstoraster                                  (constructs complicated
338 #      |  (= "postscipt interpreter")            Ghostscript commandline
339 #      |                                         to let the file be
340 #      V                                         processed by a
341 # APPLICATION/VND.CUPS-RASTER                    "-sDEVICE=<replaceable>s.th.</replaceable>"
342 #      |                                         call...)
343 #      |                                          |
344 #      V                                          |
345 #    rasterto<replaceable>something</replaceable>                          V
346 #      |    (= "raster driver")     +-------------------------+
347 #      |                            | Ghostscript at work.... |
348 #      V                            |                         |
349 # SOMETHING-DEVICE-SPECIFIC         *-------------------------+
350 #      |                                          |
351 #      |                                          |
352 #      V                                          |
353 #    backend &gt;------------------------------------+
354 #      |
355 #      |
356 #      V
357 #    THE PRINTER
358 #
359 #
360 # Note, that cupsomatic "kidnaps" the printfile after the
361 # "APPLICATION/VND.CUPS-POSTSCRPT" stage and deviates it through
362 # the CUPS-external, systemwide Ghostscript installation, bypassing the
363 # "pstoraster" filter (therefor also bypassing the CUPS-raster-drivers
364 # "rasterto<replaceable>something</replaceable>", and hands the rasterized file directly to the CUPS
365 # backend...
366 #
367 # cupsomatic is not made by the CUPS developers. It is an independent
368 # contribution to printing development, made by people from
369 # Linuxprinting.org. (see also http://www.cups.org/cups-help.html)
370 #
371 # NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to
372 #       CUPS and ESP PrintPro plug-in where rasterto<replaceable>something</replaceable> is noted.
373 #
374 #########################################################################
375 </programlisting>
376
377 <programlisting>
378 #########################################################################
379 #
380 # And this is how it works for ESP PrintPro from 4.3:
381 # ===================================================
382 #
383 # <replaceable>SOMETHNG</replaceable>-FILEFORMAT
384 #      |
385 #      |
386 #      V
387 #     <replaceable>something</replaceable>tops
388 #      |
389 #      |
390 #      V
391 # APPLICATION/POSTSCRIPT
392 #      |
393 #      |
394 #      V
395 #     pstops
396 #      |
397 #      |
398 #      V
399 # APPLICATION/VND.CUPS-POSTSCRIPT
400 #      |
401 #      |
402 #      V
403 #     gsrip
404 #      |  (= "postscipt interpreter")
405 #      |
406 #      V
407 # APPLICATION/VND.CUPS-RASTER
408 #      |
409 #      |
410 #      V
411 #     rasterto<replaceable>something</replaceable>  (f.e. Gimp-Print filters may be plugged in here)
412 #      |   (= "raster driver")
413 #      |
414 #      V
415 # SOMETHING-DEVICE-SPECIFIC
416 #      |
417 #      |
418 #      V
419 #     backend
420 #
421 # NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to
422 #       CUPS and ESP PrintPro plug-in where rasterto<replaceable>something</replaceable> is noted.
423 #
424 #########################################################################
425 </programlisting>
426
427 <programlisting>
428 #########################################################################
429 #
430 # This is how "cupsomatic" would come into play with ESP PrintPro:
431 # ================================================================
432 #
433 #
434 # <replaceable>SOMETHNG</replaceable>-FILEFORMAT
435 #      |
436 #      |
437 #      V
438 #    <replaceable>something</replaceable>tops
439 #      |
440 #      |
441 #      V
442 # APPLICATION/POSTSCRIPT
443 #      |
444 #      |
445 #      V
446 #    pstops
447 #      |
448 #      |
449 #      V
450 # APPLICATION/VND.CUPS-POSTSCRIPT ----------------+
451 #      |                                          |
452 #      |                                          V
453 #      V                                         cupsomatic
454 #    gsrip                                       (constructs complicated
455 #      |  (= "postscipt interpreter")            Ghostscript commandline
456 #      |                                         to let the file be
457 #      V                                         processed by a
458 # APPLICATION/VND.CUPS-RASTER                    "-sDEVICE=<replaceable>s.th.</replaceable>"
459 #      |                                         call...)
460 #      |                                          |
461 #      V                                          |
462 #    rasterto<replaceable>something</replaceable>                          V
463 #      |   (= "raster driver")      +-------------------------+
464 #      |                            | Ghostscript at work.... |
465 #      V                            |                         |
466 # SOMETHING-DEVICE-SPECIFIC         *-------------------------+
467 #      |                                          |
468 #      |                                          |
469 #      V                                          |
470 #    backend &gt;------------------------------------+
471 #      |
472 #      |
473 #      V
474 #    THE PRINTER
475 #
476 # NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to
477 #       CUPS and ESP PrintPro plug-in where rasterto<replaceable>something</replaceable> is noted.
478 #
479 #########################################################################
480 </programlisting>
481
482 <programlisting>
483 #########################################################################
484 #
485 # And this is how it works for CUPS from 1.1.15:
486 # ==============================================
487 #
488 # <replaceable>SOMETHNG</replaceable>-FILEFORMAT
489 #      |
490 #      |
491 #      V
492 #     <replaceable>something</replaceable>tops
493 #      |
494 #      |
495 #      V
496 # APPLICATION/POSTSCRIPT
497 #      |
498 #      |
499 #      V
500 #     pstops
501 #      |
502 #      |
503 #      V
504 # APPLICATION/VND.CUPS-POSTSCRIPT-----+
505 #                                     |
506 #                  +------------------v------------------------------+
507 #                  | Ghostscript                                     |
508 #                  | at work...                                      |
509 #                  | (with                                           |
510 #                  | "-sDEVICE=cups")                                |
511 #                  |                                                 |
512 #                  |         (= "postscipt interpreter")             |
513 #                  |                                                 |
514 #                  +------------------v------------------------------+
515 #                                     |
516 #                                     |
517 # APPLICATION/VND.CUPS-RASTER &gt;-------+
518 #      |
519 #      |
520 #      V
521 #     rasterto<replaceable>something</replaceable>
522 #      |   (= "raster driver")
523 #      |
524 #      V
525 # SOMETHING-DEVICE-SPECIFIC
526 #      |
527 #      |
528 #      V
529 #     backend
530 #
531 #
532 # NOTE: since version 1.1.15 CUPS "outsourced" the pstoraster process to
533 #       Ghostscript. GNU Ghostscript needs to be patched to handle the
534 #       CUPS requirement; ESP Ghostscript has this builtin. In any case,
535 #       "gs -h" needs to show up a "cups" device. pstoraster is now a
536 #       calling an appropriate "gs -sDEVICE=cups..." commandline to do
537 #       the job. It will output "application/vnd.cup-raster", which will
538 #       be finally processed by a CUPS raster driver "rasterto<replaceable>something</replaceable>"
539 #       Note the difference to "cupsomatic", which will *not* output
540 #       CUPS-raster, but a final version of the printfile, ready to be
541 #       sent to the printer. cupsomatic also doesn't use the "cups"
542 #       devicemode in Ghostscript, but one of the classical devicemodes....
543 #
544 # NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to
545 #       CUPS and ESP PrintPro plug-in where rasterto<replaceable>something</replaceable> is noted.
546 #
547 #########################################################################
548 </programlisting>
549
550 <programlisting>
551 #########################################################################
552 #
553 # And this is how it works for CUPS from 1.1.15, with cupsomatic included:
554 # ========================================================================
555 #
556 # <replaceable>SOMETHNG</replaceable>-FILEFORMAT
557 #      |
558 #      |
559 #      V
560 #     <replaceable>something</replaceable>tops
561 #      |
562 #      |
563 #      V
564 # APPLICATION/POSTSCRIPT
565 #      |
566 #      |
567 #      V
568 #     pstops
569 #      |
570 #      |
571 #      V
572 # APPLICATION/VND.CUPS-POSTSCRIPT-----+
573 #                                     |
574 #                  +------------------v------------------------------+
575 #                  | Ghostscript        . Ghostscript at work....    |
576 #                  | at work...         . (with "-sDEVICE=           |
577 #                  | (with              .            <replaceable>s.th.</replaceable>"        |
578 #                  | "-sDEVICE=cups")   .                            |
579 #                  |                    .                            |
580 #                  | (CUPS standard)    .      (cupsomatic)          |
581 #                  |                    .                            |
582 #                  |          (= "postscript interpreter")           |
583 #                  |                    .                            |
584 #                  +------------------v--------------v---------------+
585 #                                     |              |
586 #                                     |              |
587 # APPLICATION/VND.CUPS-RASTER &gt;-------+              |
588 #      |                                             |
589 #      |                                             |
590 #      V                                             |
591 #     rasterto<replaceable>something</replaceable>                            |
592 #      |   (= "raster driver")                       |
593 #      |                                             |
594 #      V                                             |
595 # SOMETHING-DEVICE-SPECIFIC &gt;------------------------+
596 #      |
597 #      |
598 #      V
599 #     backend
600 #
601 #
602 # NOTE: Gimp-Print and some other 3rd-Party-Filters (like TurboPrint) to
603 #       CUPS and ESP PrintPro plug-in where rasterto<replaceable>something</replaceable> is noted.
604 #
605 ##########################################################################
606 </programlisting>
607
608 </sect1>
609
610
611 <sect1>
612 <title>CUPS Print Drivers and Devices</title>
613
614 <para>
615 CUPS ships with good support for HP LaserJet type printers. You can install
616 the driver as follows:
617
618 <itemizedlist>
619         <listitem><para>
620         lpadmin -p laserjet4plus -v parallel:/dev/lp0 -E -m laserjet.ppd
621         </para></listitem>
622 </itemizedlist>
623
624 (The "-m" switch will retrieve the "laserjet.ppd" from the standard repository
625 for not-yet-installed-PPDs, which CUPS typically stores in 
626 <filename>/usr/share/cups/model</filename>. Alternatively, you may use
627 "-P /absolute/filesystem/path/to/where/there/is/PPD/your.ppd").
628 </para>
629
630 <sect2>
631 <title>Further printing steps</title>
632
633 <para>
634 Always also consult the database on linuxprinting.org for all recommendations
635 about which driver is best used for each printer:
636 </para>
637
638 <para><ulink url="http://www.linuxprinting.org/printer_list.cgi">http://www.linuxprinting.org/printer_list.cgi</ulink></para>
639
640 <para>
641 There select your model and click on "Show". You'll arrive at a page listing
642 all drivers working with your model. There will always be *one* 
643 <emphasis>recommended</emphasis> one. Try this one first. In your case
644 ("HP LaserJet 4 Plus"), you'll arrive here:
645 </para>
646
647 <para><ulink url="http://www.linuxprinting.org/show_printer.cgi?recnum=75104">http://www.linuxprinting.org/show_printer.cgi?recnum=75104</ulink></para>
648
649 <para>
650 The recommended driver is "ljet4". It has a link to the page for the ljet4
651 driver too:
652 </para>
653
654 <para><ulink url="http://www.linuxprinting.org/show_driver.cgi?driver=ljet4">http://www.linuxprinting.org/show_driver.cgi?driver=ljet4</ulink>
655
656 <para>
657 On the driver's page, you'll find important and detailed info about how to use
658 that driver within the various available spoolers. You can generate a PPD for
659 CUPS. The PPD contains all the info about how to use your model and the driver;
660 this is, once installed, working transparently for the user -- you'll only
661 need to choose resolution, paper size etc. from the web-based menu or from
662 the print dialog GUI or from the commandline...
663 </para>
664
665 <para>
666 On the driver's page, choose to use the "PPD-O-Matic" online PPD generator
667 program. Select your model and click "Generate PPD file". When you safe the
668 appearing ASCII text file, don't use "cut'n'past" (as it could possiblly corrupt
669 line endings and tabs), but use "Save as..." in your browser's menu. Save it
670 at "/some/path/on/your/filesystem/somewhere/my-name-for-my-printer.ppd"
671 </para>
672
673 <para>
674 Then install the printer:
675 </para>
676 <para><programlisting>
677     "lpadmin -p laserjet4plus -v parallel:/dev/lp0 -E -P /some/path/on/your/filesystem/somewhere/my-name-for-my-printer.ppd"
678 </programlisting></para>
679
680 <para>
681 Note, that for all the "Foomatic-PPDs" from Linuxprinting.org, you also need
682 a special "CUPS filter" named "cupsomatic". Get the latest version of
683 "cupsomatic" from:
684 </para>
685
686 <para><ulink url="http://www.linuxprinting.org/cupsomatic">http://www.linuxprinting.org/cupsomatic</ulink></para>
687
688 <para>
689 This needs to be copied to <filename>/usr/lib/cups/filter/cupsomatic</filename>
690 and be made world executable. This filter is needed to read and act upon the
691 specially encoded Foomatic comments, embedded in the printfile, which in turn
692 are used to construct (transparently for you, the user) the complicated
693 ghostscript command line needed for your printer/driver combo.
694 </para>
695
696 <para>
697 You can have a look at all the options for the Ghostscript commandline supported
698 by your printer and the ljet4 driver by going to the section "Execution details",
699 selecting your model (Laserjet 4 Plus) and clicking on "Show execution details".
700 This will bring up this web page:
701 </para>
702
703 <para><ulink url="http://www.linuxprinting.org/execution.cgi?driver=ljet4&amp;printer=75104&amp;.submit=Show+execution+details">http://www.linuxprinting.org/execution.cgi?driver=ljet4&amp;printer=75104&amp;.submit=Show+execution+details</ulink></para>
704
705 <para>
706 The ingenious thing is that the database is kept current. If there
707 is a bug fix and an improvement somewhere in the database, you will
708 always get the most current and stable and feature-rich driver by following
709 the steps described above.
710 </para>
711
712 <note><para>
713 Till Kamppeter from MandrakeSoft is doing an excellent job here that too few
714 people are aware of. (So if you use it often, please send him a note showing
715 your appreciation).</para></note>
716
717 <para>
718 The latest and greatest improvement now is support for "custom page sizes"
719 for all those printers which support it.
720 </para>
721
722 <para>
723 "cupsomatic" is documented here:
724 </para>
725
726 <para><ulink url="http://www.linuxprinting.org/cups-doc.html">http://www.linuxprinting.org/cups-doc.html</ulink></para>
727
728 <para>
729 More printing tutorial info may be found here:
730 </para>
731
732 <para><ulink url="http://www.linuxprinting.org/kpfeifle/LinuxKongress2002/Tutorial/">http://www.linuxprinting.org/kpfeifle/LinuxKongress2002/Tutorial/</ulink></para>
733
734 <para>
735 Note, that *all* the Foomatic drivers listed on Linuxprinting.org (now
736 approaching the "all-time high" number of 1.000 for the supported models)
737 are using a special filtering chain involving Ghostscript, as described
738 in this document.
739 </para>
740
741 <para>
742 Summary - You need:
743 </para>
744
745 <para>
746 <simplelist>
747
748         <member>A "foomatic+<replaceable>something</replaceable>" PPD is not enough to print with CUPS (but it is *one* important component)</member>
749         <member>The "cupsomatic" filter script (Perl) in <filename>/usr/lib/cups/filters/</filename></member>
750         <member>Perl to make cupsomatic run</member>
751         <member>Ghostscript (because it is called and controlled by the PPD/cupsomatic combo in a way to fit your printermodel/driver combo.</member>
752         <member>Ghostscript *must*, depending on the driver/model, contain support for a certain "device" (as shown by "gs -h")</member>
753 </simplelist>
754
755 <para>
756 In the case of the "hpijs" driver, you need a Ghostscript version, which
757 has "ijs" amongst its supported devices in "gs -h". In the case of
758 "hpijs+foomatic", a valid ghostscript commandline would be reading like this:
759 </para>
760
761 <para><programlisting>
762        gs -q -dBATCH -dPARANOIDSAFER -dQUIET -dNOPAUSE -sDEVICE=ijs       \
763              -sIjsServer=hpijs<replaceable>PageSize</replaceable> -dDuplex=<replaceable>Duplex</replaceable> <replaceable>Model</replaceable>        \
764              -r<replaceable>Resolution</replaceable>,PS:MediaPosition=<replaceable>InputSlot</replaceable> -dIjsUseOutputFD \
765              -sOutputFile=- -
766 </programlisting></para>
767
768 <note><para>
769 Note, that with CUPS and the "hpijs+foomatic" PPD (plus Perl and cupsomatic)
770 you don't need to remember this. You can choose the available print options
771 thru a GUI print command (like "glp" from ESP's commercially supported
772 PrintPro software, or KDE's "kprinter", or GNOME's "gtklp" or the independent
773 "xpp") or the CUPS web interface via human-readable drop-down selection
774 menus.
775 </para></note>
776
777 <para>
778 If you use "ESP Ghostscript" (also under the GPL, provided by Easy Software
779 Products, the makers of CUPS, downloadable from
780 <ulink url="http://www.cups.org/software.html">http://www.cups.org/software.html</ulink>,
781 co-maintained by the developers of linuxprinting.org), you are guaranteed to
782 have in use the most uptodate, bug-fixed, enhanced and stable version of a Free
783 Ghostscript. It contains support for ~300 devices, whereas plain vanilla
784 GNU Ghostscript 7.05 only has ~200.
785 </para>
786
787 <para>
788 If you print only one CUPS test page, from the web interface and when you try to
789 print a windows test page, it acts like the job was never sent:
790
791 <simplelist>
792         <member>Can you print "standard" jobs from the CUPS machine?</member>
793         <member>Are the jobs from Windows visible in the Web interface on CUPS (http://localhost:631/)?</member>
794         <member><emphasis>Most important:</emphasis> What kind of printer driver are you using on the Windows clients?</member>
795 </simplelist>
796
797 You can try to get a more detailed debugging info by setting "LogLevel debug" in
798 <filename>/etc/cups/cupsd.conf</filename>, re-start cupsd and investigate <filename>/var/log/cups/error_log</filename>
799 for the whereabouts of your Windows-originating printjobs:
800 </para>
801
802 <simplelist>
803         <member>what does the "auto-typing" line say? which is the "MIME type" CUPS thinks is arriving from the Windows clients?</member>
804         <member>are there "filter" available for this MIME type?</member>
805         <member>are there "filter rules" defined in "/etc/cups/mime.convs" for this MIME type?</member>
806 </simplelist>
807
808 </sect1>
809
810
811 <sect1>
812 <title>Limiting the number of pages users can print</title>
813
814 <para>
815 The feature you want is dependent on the real print subsystem you're using.
816 Samba's part is always to receive the job files from the clients (filtered
817 *or* unfiltered) and hand it over to this printing subsystem.
818 </para>
819
820 <para>
821 Of course one could "hack" things with one's own scripts.
822 </para>
823
824 <para>
825 But there is CUPS (Common Unix Printing System). CUPS supports "quotas".
826 Quotas can be based on sizes of jobs or on the number of pages or both,
827 and are spanning any time period you want.
828 </para>
829
830 <para>
831 This is an example command how root would set a print quota in CUPS,
832 assuming an existing printer named "quotaprinter":
833 </para>
834
835 <programlisting>
836   lpadmin -p quotaprinter -o job-quota-period=604800 -o job-k-limit=1024 -o job-page-limit=100
837 </programlisting>
838
839 <para>
840 This would limit every single user to print 100 pages or 1024 KB of
841 data (whichever comes first) within the last 604.800 seconds ( = 1 week).
842 </para>
843
844 <para>
845 For CUPS to count correctly, the printfile needs to pass the CUPS "pstops" filter,
846 otherwise it uses a "dummy" count of "1". Some printfiles don't pass it
847 (eg: image files) but then those are mostly 1 page jobs anyway. This also means,
848 proprietary drivers for the target printer running on the client computers and
849 CUPS/Samba then spooling these files as "raw" (i.e. leaving them untouched, not
850 filtering them), will be counted as "1-pagers" too!
851 </para>
852
853 <para>
854 You need to send PostScript from the clients (i.e. run a PostScript driver there)
855 for having the chance to get accounting done. If the printer is a non-PostScript model,
856 you need to let CUPS do the job to convert the file to a print-ready format for the
857 target printer. This will be working for currently ~1.000 different printer models, see
858 </para>
859
860 <programlisting>
861      http://www.linuxprinting.org/printer_list.cgi
862 </programlisting>
863
864 <para>
865 Before CUPS-1.1.16 your only option was to use the Adobe PostScript
866 Driver on the Windows clients. The output of this driver was not always
867 passed thru the "pstops" filter on the CUPS/Samba side, and therefor was
868 not counted correctly (the reason is that it often --- depending on the
869 "PPD" being used --- did write a "PJL"-header in front of the real
870 PostScript which made CUPS to skip the pstops and go directy to
871 the "pstoraster" stage).
872 </para>
873
874 <para>
875 From CUPS-1.1.16 onward you can use the "CUPS PostScript Driver
876 for Windows NT/2K/XP clients" (it is tagged in the download area of
877 http://www.cups.org/ as the "cups-samba-1.1.16.tar.gz" package).
878 It is *not* working for Win9x/ME clients. But it:
879 </para>
880
881 <simplelist>
882         <member>>it guarantees to not write an PJL-header</member>
883         <member>it guarantees to still read and support all PJL-options named in the driver PPD with its own means</member>
884         <member>it guarantees the file going thru the "pstops" filter on the CUPS/Samba server</member>
885         <member>it guarantees to page-count correctly the printfile</member>
886 </simplelist>
887
888 <para>
889 You can read more about the setup of this combination in the
890 manpage for "cupsaddsmb" (only present with CUPS installed, only
891 current with CUPS 1.1.16).
892 </para>
893
894 <para>
895 These are the items CUPS logs in the "page_log" for every single *page* of a job:
896 </para>
897
898 <para><programlisting>
899         * Printer name
900         * User name
901         * Job ID
902         * Time of printing
903         * the page number
904         * the number of copies
905         * a billing info string (optional)
906 </programlisting></para>
907
908 <para>
909 Here is an extract of my CUPS server's page_log file to illustrate
910 the format and included items:
911 </para>
912
913 <para><programlisting>
914         infotec_IS2027 kurt 40 [22/Nov/2002:13:18:03 +0100] 1 2  #marketing
915         infotec_IS2027 kurt 40 [22/Nov/2002:13:18:03 +0100] 2 2  #marketing
916         infotec_IS2027 kurt 40 [22/Nov/2002:13:18:03 +0100] 3 2  #marketing
917         infotec_IS2027 kurt 40 [22/Nov/2002:13:18:03 +0100] 4 2  #marketing
918         infotec_IS2027 kurt 40 [22/Nov/2002:13:18:03 +0100] 5 2  #marketing
919         infotec_IS2027 kurt 40 [22/Nov/2002:13:18:03 +0100] 6 2  #marketing
920 </programlisting></para>
921
922 <para>
923 This was Job ID "40", printed on "infotec_IS2027" by user "kurt", a 6-page job
924 printed in 2 copies and billed to "#marketing"...
925 </para>
926
927 <para>
928 What flaws or shortcomings are there?
929 </para>
930
931 <simplelist>
932         <member>the ones named above</member>
933
934         <member>
935         CUPS really counts the job pages being *processsed in software*
936         (going thru the "RIP") rather than the physical sheets successfully
937         leaving the printing device -- if there is a jam while printing
938         the 5th sheet out of 1000 and the job is aborted by the printer,
939         the "page count" will still show the figure of 1000 for that job
940         </member>
941
942         <member>
943         all quotas are the same for all users (no flexibility to give the
944         boss a higher quota than the clerk) no support for groups
945         </member>
946
947         <member>
948         no means to read out the current balance or "used-up" number of current quota
949         </member>
950
951         <member>
952         a user having used up 99 sheets of 100 quota will still be able to send and print a 1.000 sheet job
953         </member>
954
955         <member>
956         a user being denied a job because of a filled-up quota doesn't get a meaningful
957         error message from CUPS other than "client-error-not-possible".
958         </member>
959 </simplelist>
960
961 <para>
962 But this is the best system out there currently. And there are
963 huge improvements under development:
964 </para>
965
966 <simplelist>
967         <member>page counting will go into the "backends" (these talk
968         directly to the printer and will increase the count in sync with the
969          actual printing process  -- a jam at the 5th sheet will lead to a stop in the counting)</member>
970
971         <member>quotas will be handled more flexibly</member>
972
973         <member>probably there will be support for users to inquire their "accounts" in advance</member>
974
975         <member>probably there will be support for some other tools around this topic</member>
976 </simplelist>
977
978 <para>
979 Other than the current stage of the CUPS development, I don't
980 know any other ready-to-use tool which you could consider.
981 </para>
982
983 <para>
984 You can download the driver files from
985 <ulink url="http://www.cups.org/software.html">http://www.cups.org/software.html</ulink>.
986 It is a separate package from the CUPS base software files, tagged as "CUPS 1.1.16
987 Windows NT/2k/XP Printer Driver for SAMBA (tar.gz, 192k)". The filename to
988 download is "cups-samba-1.1.16.tar.gz". Upon untar-/unzip-ping it will reveal
989 the files:
990 </para>
991
992 <para>
993 <programlisting>
994    cups-samba.install
995    cups-samba.license
996    cups-samba.readme
997    cups-samba.remove
998    cups-samba.ss
999 </programlisting>
1000 </para>
1001
1002 <para>
1003 These have been packaged with the ESP meta packager software "EPM". The
1004 *.install and *.remove files are simple shell script, which untars the
1005 *.ss (which is nothing else than a tar-archive) and puts its contents
1006 into <filename>/usr/share/cups/drivers/</filename>. Its contents are 3 files:
1007 </para>
1008
1009 <para>
1010 <programlisting>
1011    cupsdrvr.dll
1012    cupsui.dll
1013    cups.hlp
1014 </programlisting>
1015 </para>
1016
1017 <note><para>
1018 ATTENTION: due to a bug one CUPS release puts the <filename>cups.hlp</filename>
1019 into <filename>/usr/share/drivers/</filename> instead of
1020 <filename>/usr/share/cups/drivers/</filename>. To work around this, copy/move
1021 the file after running the "./cups-samba.install" script manually to the right place:
1022 </para>
1023
1024 <para>
1025 <programlisting>
1026       cp /usr/share/drivers/cups.hlp /usr/share/cups/drivers/
1027 </programlisting>
1028 </para>
1029 </note>
1030
1031 <note>
1032 <para>
1033 This new CUPS PostScript driver is currently binary-only, but free
1034 no source code is provided (yet). The reason is this: it has
1035 been developed with the help of the Microsoft Driver Developer Kit (DDK)
1036 and compiled with Microsoft Visual Studio 6. It is not clear to the driver
1037 developers if they are allowed to distribute the whole of the source code
1038 as Free Software. However, they will likely release the "diff" in source
1039 code under the GPL, so anybody with a license of Visual Studio and a DDK
1040 will be able to compile for him/herself.
1041 </para>
1042
1043 <para>
1044 Once you have run the install script (and possibly manually moved the
1045 "cups.hlp" file to "/usr/share/cups/drivers/"), the driver is ready to be
1046 put into Samba's [print$] share (which often maps to "/etc/samba/drivers/"
1047 and contains a subdir tree with WIN40 and W32X86 branches), by running
1048 "cupsaddsmb" (see also "man cupsaddsmb" for CUPS 1.1.16). [Don't forget to
1049 put root into the smbpasswd file by running "smbpasswd" should you run
1050 this whole procedure for the first time.] Once the driver files are in the
1051 [print$] share, they are ready to be downloaded and installed by the
1052 Win NT/2k/XP clients.
1053 </para></note>
1054
1055
1056 <note><para>
1057 NOTE 1: Win 9x/ME clients won't work with this driver. For these you'd
1058 still need to use the ADOBE*.* drivers as previously.
1059 </para></note>
1060
1061 <note><para>
1062 NOTE 2: It is not harming if you've still the ADOBE*.* driver files from
1063 previous installations in the "/usr/share/cups/drivers/" directory.
1064 The new cupsaddsmb (from 1.1.16) will automatically use the
1065 "newest" installed driver (which here then is the CUPS drivers).
1066 </para></note>
1067
1068 <note><para>
1069 NOTE 3: Should your Win clients have had the old ADOBE*.* files and the
1070 Adobe PostScript drivers installed, the download and installation
1071 of the new CUPS PostScript driver for Windows NT/2k/XP will fail
1072 at first.
1073 </para>
1074 <para>
1075 It is not enough to "delete" the printer (as the driver files
1076 will still be kept by the clients and re-used if you try to
1077 re-install the printer). To really get rid of the Adobe driver
1078 files on the clients, open the "Printers" folder (possibly via
1079 "Start --> Settings --> Control Panel --> Printers"), right-click
1080 onto the folder background and select "Server Properties". A
1081 new dialog opens; select the "Drivers" tab; on the list select
1082 the driver you want to delete and click on the "Delete" button.
1083 (This will only work if there is no single printer left which
1084 uses that particular driver -- you need to "delete" all printers
1085 using this driver in the "Printers" folder first.)
1086 </para>
1087 </note>
1088
1089 <note><para>
1090 Once you have successfully downloaded the CUPS PostScript driver
1091 to a client, you can easily switch all printers to this one
1092 by proceeding as described elsewhere in the "Samba HOWTO
1093 Collection" to change a driver for an existing printer.
1094 </para></note>
1095
1096 <para>
1097 What are the benefits with the "CUPS PostScript driver for Windows NT/2k/XP"
1098 as compared to the Adobe drivers?
1099 </para>
1100        
1101 <para>
1102 <itemizedlist>
1103         <listitem><para>
1104         no hassle with the Adobe EULA
1105         </para></listitem>
1106
1107         <listitem><para>
1108         no hassle with the question "where do I get the ADOBE*.* driver files from?"
1109         </para></listitem>
1110
1111         <listitem><para>
1112         the Adobe drivers (depending on the printer PPD associated with them)
1113         often put a PJL header in front of the core PostScript part of the print
1114         file (thus the file starts with "<replaceable>1B</replaceable>%-12345X" or "<replaceable>escape</replaceable>%-12345X"
1115         instead of "%!PS"). This leads to the CUPS daemon autotyping the
1116         arriving file as a print-ready file, not requiring a pass thru the
1117         "pstops" filter (to speak more technical, it is not regarded as the
1118         generic MIME type "application/postscript", but as the more special
1119         MIME type "application/cups.vnd-postscript"), which therefore also
1120         leads to the page accounting in "/var/log/cups/page_log" not receiving
1121         the exact mumber of pages; instead the dummy page number of "1" is
1122         logged in a standard setup)
1123         </para></listitem>
1124
1125         <listitem><para>
1126         the Adobe driver has more options to "mis-configure" the PostScript
1127         generated by it (like setting it inadvertedly to "Optimize for Speed",
1128         instead of "Optimize for Portability", which could lead to CUPS being
1129         unable to process it)
1130         </para></listitem>
1131
1132         <listitem><para>
1133         the CUPS PostScript driver output sent by Windows clients to the CUPS
1134         server will be guaranteed to be auto-typed as generic MIME type
1135         "application/postscript", thusly passing thru the CUPS "pstops" filter
1136         and logging the correct number of pages in the page_log for accounting
1137         and quota purposes
1138         </para></listitem>
1139
1140         <listitem><para>
1141         the CUPS PostScript driver supports the sending of additional print
1142         options by the Win NT/2k/XP clients, such as naming the CUPS standard
1143         banner pages (or the custom ones, should they be installed at the time
1144         of driver download), using the CUPS "page-label" option, setting a
1145         job-priority and setting the scheduled time of printing (with the option
1146         to support additional useful IPP job attributes in the future).
1147         </para></listitem>
1148
1149         <listitem><para>
1150         the CUPS PostScript driver supports the inclusion of the new
1151         "*cupsJobTicket" comments at the beginnig of the PostScript file (which
1152         could be used in the future for all sort of beneficial extensions on
1153         the CUPS side, but which will not disturb any other application as those
1154         will regard it as a comment and simply ignore it).
1155         </para></listitem>
1156
1157         <listitem><para>
1158         the CUPS PostScript driver will be the heart of the fully fledged CUPS
1159         IPP client for Windows NT/2k/XP to be released soon (probably alongside
1160         the first Beta release for CUPS 1.2).
1161         </para></listitem>
1162
1163 </itemizedlist>
1164 </para>
1165 </sect1>
1166
1167 <sect1>
1168 <title>Advanced Postscript Printing from MS Windows</title>
1169
1170 <para>
1171 Let the Windows Clients use a PostScript driver to deliver poistscript to
1172 the samba print server (just like any Linux or Unix Client would also use
1173 PostScript to send to the server)
1174 </para>
1175
1176 <para>
1177 Make the Unix printing subsystem to which Samba sends the job convert the
1178 incoming PostScript files to the native print format of the target printers
1179 (would be PCL if you have an HP printer)
1180 </para>
1181
1182 <para>
1183 Now if you are afraid that this would just mean using a *Generic* PostScript
1184 driver for the clients that has no Simplex/Duplex selection, and no paper tray
1185 choice, but you need them to be able to set up print jobs, with all the bells
1186 and whistles of your printers:-
1187 </para>
1188
1189 <simplelist>
1190         <member>Not possible with traditional spooling systems</member>
1191
1192         <member>
1193         But perfectly supported by CUPS (which uses "PPD" files to
1194         describe how to control the print options for PostScript and
1195         non-PostScript devices alike...
1196         </member>
1197 </simplelist>
1198
1199 <para>
1200 CUPS PPDs are working perfectly on Windows clients who use Adobe PostScript
1201 drivers (or the new CUPS PostScript driver for Windows NT/2K/XP). Clients can use
1202 them to setup the job to their liking and CUPS will use the received job options
1203 to make the (PCL-, ESC/P- or PostScript-) printer behave as required.
1204 </para>
1205
1206 <para>
1207 If you want to have the additional benefit of page count logging and accounting
1208 then the CUPS PostScript driver is the best choice (better than the Adobe one).
1209 </para>
1210
1211 <para>
1212 If you want to make the drivers downloadable for the clients then "cupsaddsmb" is
1213 your friend. It will setup the [print$] share on the Samba host to be ready to serve
1214 the clients for a "point and print" driver installation.
1215 </para>
1216
1217 <warning>
1218 <para>What strings are attached?</para></warning>
1219
1220 <para>
1221 There are some. But, given the sheer CPU power you can buy nowadays,
1222 these can be overcome easily. The strings:
1223 </para>
1224
1225 <para>
1226 Well, if the CUPS/Samba side will have to print to many printers serving many users,
1227 you probably will need to set up a second server (which can do automatic load balancing
1228 with the first one, plus a degree of fail-over mechanism). Converting the incoming
1229 PostScript jobs, "interpreting" them for non-PostScript printers, amounts to the work
1230 of a "RIP" (Raster Image Processor) done in software. This requires more CPU and RAM
1231 than for the mere "raw spooling" task your current setup is solving. It all depends
1232 on the avarage and peak printing load the server should be able to handle.
1233 </para>
1234
1235 </sect1>
1236
1237 <sect1>
1238 <title>Auto-Deletion of CUPS spool files</title>
1239
1240 <para>
1241 Samba print files pass thru two "spool" directories. One the incoming directory
1242 managed by Samba, (set eg: in the "path = /var/spool/samba" directive in the [printers]
1243 section of "smb.conf"). Second is the spool directory of your UNIX print subsystem.
1244 For CUPS it is normally "/var/spool/cups/", as set by the cupsd.conf directive
1245 "RequestRoot /var/spool/cups".
1246 </para>
1247
1248 <para>
1249 I am not sure, which one of your directories keeps the files.  From what you say,
1250 it is most likely the Samba part.
1251 </para>
1252
1253 <para>
1254 For the CUPS part, you may want to consult:
1255 </para>
1256
1257 <programlisting>
1258    http://localhost:631/sam.html#PreserveJobFiles and
1259    http://localhost:631/sam.html#PreserveJobHistory and
1260    http://localhost:631/sam.html#MaxJobs
1261 </programlisting>
1262
1263 <para>
1264 There are the settings described for your CUPS daemon, which could lead to completed
1265 job files not being deleted.
1266 </para>
1267
1268 <para>
1269 "PreserveJobHistory Yes" -- keeps some details of jobs in
1270 cupsd's mind (well it keeps the "c12345", "c12346" etc. files
1271 in the CUPS spool directory, which do a similar job as the
1272 old-fashioned BSD-LPD control files). This is set to "Yes"
1273 as a default.
1274 </para>
1275
1276 <para>
1277 "PreserveJobFiles Yes" -- keeps the job files themselves in
1278 cupsd's mind (well it keeps the "d12345", "d12346" etc. files
1279 in the CUPS spool directory...). This is set to "No" as the
1280 CUPS default.
1281 </para>
1282
1283 <para>
1284 "MaxJobs 500" -- this directive controls the maximum number
1285 of jobs that are kept in memory. Once the number of jobs
1286 reaches the limit, the oldest completed job is automatically
1287 purged from the system to make room for the new one. If all
1288 of the known jobs are still pending or active then the new
1289 job will be rejected. Setting the maximum to 0 disables this
1290 functionality. The default setting is 0.
1291 </para>
1292
1293 <para>
1294 (There are also additional settings for "MaxJobsPerUser" and
1295 "MaxJobsPerPrinter"...)
1296 </para>
1297
1298 <para>
1299 For everything to work as announced, you need to have three things:
1300 </para>
1301
1302 <simplelist>
1303
1304         <member>
1305         a Samba-smbd which is compiled against "libcups" (Check on Linux by running "ldd `which smbd`")
1306         </member>
1307
1308         <member>
1309         a Samba-smb.conf setting of "printing = cups"
1310         </member>
1311
1312         <member>
1313         another Samba-smb.conf setting of "printcap = cups"
1314         </member>
1315
1316 </simplelist>
1317
1318 <note><para>
1319 Note, that in this case all other manually set printing-related
1320 commands (like "print command", "lpq command", "lprm command",
1321 "lppause command" or "lpresume command") are ignored and they
1322 should normally have no influence what-so-ever on your printing.
1323 </para></note>
1324
1325 <para>
1326 If you want to do things manually, replace the "printing = cups"
1327 by "printing = bsd". Then your manually set commands may work
1328 (haven't tested this), and a "print command = lp -d %P %s; rm %s"
1329 may do what you need.
1330 </para>
1331
1332 <para>
1333 You forgot to mention the CUPS version you're using. If you did
1334 set things up as described in the man pages, then the Samba
1335 spool files should be deleted. Otherwise it may be a bug. On
1336 the CUPS side, you can control the behaviour as described
1337 above.
1338 </para>
1339
1340 <para>
1341 If you have more problems, post the output of these commands:
1342 </para>
1343
1344 <para>
1345 <programlisting>
1346    grep -v ^# /etc/cups/cupsd.conf | grep -v ^$
1347    grep -v ^# /etc/samba/smb.conf | grep -v ^$ | grep -v "^;"
1348 </programlisting>
1349 </para>
1350
1351 <para>
1352 (adapt paths as needed). These commands sanitize the files
1353 and cut out the empty lines and lines with comments, providing
1354 the "naked settings" in a compact way.
1355 </para>
1356 </sect1>
1357 </chapter>