Ignore:
Timestamp:
Sep 30, 2008, 7:14:08 AM (17 years ago)
Author:
Paul Smedley
Message:

Update source to 3.0.32

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.0/docs/htmldocs/Samba3-HOWTO/CUPS-printing.html

    r134 r158  
    1 <html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 22. CUPS Printing Support</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="classicalprinting.html" title="Chapter 21. Classical Printing Support"><link rel="next" href="VFS.html" title="Chapter 23. Stackable VFS modules"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. CUPS Printing Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="classicalprinting.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="VFS.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="CUPS-printing"></a>Chapter 22. CUPS Printing Support</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Kurt</span> <span class="surname">Pfeifle</span></h3><div class="affiliation"><span class="orgname">Danka Deutschland GmbH <br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:kpfeifle@danka.de">kpfeifle@danka.de</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Ciprian</span> <span class="surname">Vizitiu</span></h3><span class="contrib">drawings</span> <div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:CVizitiu@gbif.org">CVizitiu@gbif.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><span class="contrib">drawings</span> <div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer@samba.org">jelmer@samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> (27 Jan 2004) </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="CUPS-printing.html#id416419">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id416425">Features and Benefits</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id416476">Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id416588">Basic CUPS Support Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id416695">Linking smbd with libcups.so</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id416919">Simple <code class="filename">smb.conf</code> Settings for CUPS</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417155">More Complex CUPS <code class="filename">smb.conf</code> Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id417537">Advanced Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id417551">Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417596">Raw Print Serving: Vendor Drivers on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id417810">Installation of Windows Client Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;<span class="quote">raw</span>&#8221; Printing for <span class="emphasis"><em>application/octet-stream</em></span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418073">Driver Upload Methods</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id418184">Advanced Intelligent Printing with PostScript Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418358">Windows Drivers, GDI, and EMF</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418524">UNIX Printfile Conversion and GUI Basics</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418848">Ghostscript: The Software RIP for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id418988">PostScript Printer Description (PPD) Specification</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419056">Using Windows-Formatted Vendor PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419165">CUPS Also Uses PPDs for Non-PostScript Printers</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id419200">The CUPS Filtering Architecture</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id419416">MIME Types and CUPS Filters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id419826">MIME Type Conversion Rules</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420021">Filtering  Overview</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420169">Prefilters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420346">pstops</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420506">pstoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420757">imagetops and imagetoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id420837">rasterto [printers specific]</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421049">CUPS Backends</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421357">The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421572">The Complete Picture</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421583"><code class="filename">mime.convs</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421644">&#8220;<span class="quote">Raw</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id421744">application/octet-stream Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422005">PostScript Printer Descriptions for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422269"><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422583">Examples for Filtering Chains</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id422984">Sources of CUPS Drivers/PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423093">Printing with Interface Scripts</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423172">Network Printing (Purely Windows)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423186">From Windows Clients to an NT Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423245">Driver Execution on the Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423310">Driver Execution on the Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423409">Network Printing (Windows Clients and UNIX/Samba Print
    2 Servers)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423425">From Windows Clients to a CUPS/Samba Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423600">Samba Receiving Job-Files and Passing Them to CUPS</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423671">Network PostScript RIP</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423751">PPDs for Non-PS Printers on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423788">PPDs for Non-PS Printers on Windows</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id423848">Windows Terminal Servers (WTS) as CUPS Clients</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id423860">Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
    3 Problems</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423891">Workarounds Impose Heavy Limitations</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423905">CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id423941">PostScript Drivers with No Major Problems, Even in Kernel
    4 Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id424020">Configuring CUPS for Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id424038"><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424126">Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424414">CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424635">Recognizing Different Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424746">Acquiring the Adobe Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424766">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id424821">Caveats to Be Considered</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425100">Windows CUPS PostScript Driver Versus Adobe Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425295">Run cupsaddsmb (Quiet Mode)</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425429">Run cupsaddsmb with Verbose Output</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425560">Understanding cupsaddsmb</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425696">How to Recognize If cupsaddsmb Completed Successfully</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425806">cupsaddsmb with a Samba PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425884">cupsaddsmb Flowchart</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id425962">Installing the PostScript Driver on a Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-avoidps1">Avoiding Critical PostScript Driver Settings on the Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id426171">Installing PostScript Driver Files Manually Using rpcclient</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id426337">A Check of the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426497">Understanding the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426589">Producing an Example by Querying a Windows Box</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426709">Requirements for adddriver and setdriver to Succeed</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id426920">Manual Driver Installation in 15 Steps</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id427799">Troubleshooting Revisited</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id427930">The Printing <code class="filename">*.tdb</code> Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id428129">Trivial Database Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428191">Binary Format</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428252">Losing <code class="filename">*.tdb</code> Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id428299">Using <code class="literal">tdbbackup</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id428409">CUPS Print Drivers from Linuxprinting.org</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id428570">foomatic-rip and Foomatic Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429283">foomatic-rip and Foomatic PPD Download and Installation</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id429705">Page Accounting with CUPS</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id429735">Setting Up Quotas</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429785">Correct and Incorrect Accounting</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429818">Adobe and CUPS PostScript Drivers for Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id429949">The page_log File Syntax</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430085">Possible Shortcomings</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430143">Future Developments</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430178">Other Accounting Tools</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id430191">Additional Material</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id430379">Autodeletion or Preservation of CUPS Spool Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id430451">CUPS Configuration Settings Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430528">Preconditions</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id430657">Manual Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id430701">Printing from CUPS to Windows-Attached Printers</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id430957">More CUPS Filtering Chains</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id431066">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id431072">Windows 9x/Me Client Can't Install Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#root-ask-loop">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Keeps Asking for Root Password in Never-ending Loop</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431141">&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431178">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431248">Client Can't Connect to Samba Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431271">New Account Reconnection from Windows 200x/XP Troubles</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431352">Avoid Being Connected to the Samba Server as the Wrong User</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431398">Upgrading to CUPS Drivers from Adobe Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431432">Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431467">Deleted Windows 200x Printer Driver Is Still Shown</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431498">Windows 200x/XP Local Security Policies</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431529">Administrator Cannot Install Printers for All Local Users</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431566">Print Change, Notify Functions on NT Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431589">Win XP-SP1</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431631">Print Options for All Users Can't Be Set on Windows 200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431898">Most Common Blunders in Driver Settings on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431951"><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id431997">Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id432090">Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id432153">Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id432204">Overview of the CUPS Printing Processes</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id416419"></a>Introduction</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id416425"></a>Features and Benefits</h3></div></div></div><p>
    5 <a class="indexterm" name="id416433"></a>
     1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 22. CUPS Printing Support</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="The Official Samba 3.2.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="classicalprinting.html" title="Chapter 21. Classical Printing Support"><link rel="next" href="VFS.html" title="Chapter 23. Stackable VFS modules"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. CUPS Printing Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="classicalprinting.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="VFS.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="CUPS-printing"></a>Chapter 22. CUPS Printing Support</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Kurt</span> <span class="surname">Pfeifle</span></h3><div class="affiliation"><span class="orgname">Danka Deutschland GmbH <br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:kpfeifle@danka.de">kpfeifle@danka.de</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Ciprian</span> <span class="surname">Vizitiu</span></h3><span class="contrib">drawings</span> <div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:CVizitiu@gbif.org">CVizitiu@gbif.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Jelmer</span> <span class="othername">R.</span> <span class="surname">Vernooij</span></h3><span class="contrib">drawings</span> <div class="affiliation"><span class="orgname">The Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jelmer@samba.org">jelmer@samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate"> (27 Jan 2004) </p></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="CUPS-printing.html#id390719">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id390724">Features and Benefits</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id390775">Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id390884">Basic CUPS Support Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id390991">Linking smbd with libcups.so</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id391215">Simple <code class="filename">smb.conf</code> Settings for CUPS</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id391445">More Complex CUPS <code class="filename">smb.conf</code> Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id391804">Advanced Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id391818">Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id391863">Raw Print Serving: Vendor Drivers on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id392077">Installation of Windows Client Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-raw">Explicitly Enable &#8220;<span class="quote">raw</span>&#8221; Printing for <span class="emphasis"><em>application/octet-stream</em></span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id392341">Driver Upload Methods</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id392452">Advanced Intelligent Printing with PostScript Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#gdipost">GDI on Windows, PostScript on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id392626">Windows Drivers, GDI, and EMF</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id392792">UNIX Printfile Conversion and GUI Basics</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#post-and-ghost">PostScript and Ghostscript</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id393116">Ghostscript: The Software RIP for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id393256">PostScript Printer Description (PPD) Specification</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id393324">Using Windows-Formatted Vendor PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id393433">CUPS Also Uses PPDs for Non-PostScript Printers</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id393468">The CUPS Filtering Architecture</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id393684">MIME Types and CUPS Filters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id394094">MIME Type Conversion Rules</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id394289">Filtering  Overview</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id394437">Prefilters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id394614">pstops</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id394774">pstoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id395025">imagetops and imagetoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id395105">rasterto [printers specific]</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id395317">CUPS Backends</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id395625">The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id395840">The Complete Picture</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id395851"><code class="filename">mime.convs</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id395912">&#8220;<span class="quote">Raw</span>&#8221; Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id396012">application/octet-stream Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id396273">PostScript Printer Descriptions for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id396537"><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id396851">Examples for Filtering Chains</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id397252">Sources of CUPS Drivers/PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id397361">Printing with Interface Scripts</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id397440">Network Printing (Purely Windows)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id397454">From Windows Clients to an NT Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id397513">Driver Execution on the Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id397578">Driver Execution on the Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id397677">Network Printing (Windows Clients and UNIX/Samba Print
     2Servers)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id397693">From Windows Clients to a CUPS/Samba Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id397868">Samba Receiving Job-Files and Passing Them to CUPS</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id397939">Network PostScript RIP</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id398019">PPDs for Non-PS Printers on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id398056">PPDs for Non-PS Printers on Windows</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id398116">Windows Terminal Servers (WTS) as CUPS Clients</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id398128">Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
     3Problems</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id398159">Workarounds Impose Heavy Limitations</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id398173">CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id398209">PostScript Drivers with No Major Problems, Even in Kernel
     4Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id398288">Configuring CUPS for Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id398306"><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id398394">Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id398670">CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id398892">Recognizing Different Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399003">Acquiring the Adobe Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399023">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399077">Caveats to Be Considered</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399357">Windows CUPS PostScript Driver Versus Adobe Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399552">Run cupsaddsmb (Quiet Mode)</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399686">Run cupsaddsmb with Verbose Output</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399816">Understanding cupsaddsmb</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399952">How to Recognize If cupsaddsmb Completed Successfully</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400063">cupsaddsmb with a Samba PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400140">cupsaddsmb Flowchart</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400218">Installing the PostScript Driver on a Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-avoidps1">Avoiding Critical PostScript Driver Settings on the Client</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id400428">Installing PostScript Driver Files Manually Using rpcclient</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id400594">A Check of the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400754">Understanding the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400846">Producing an Example by Querying a Windows Box</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400965">Requirements for adddriver and setdriver to Succeed</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id401176">Manual Driver Installation in 15 Steps</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402054">Troubleshooting Revisited</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id402186">The Printing <code class="filename">*.tdb</code> Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id402385">Trivial Database Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402447">Binary Format</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402508">Losing <code class="filename">*.tdb</code> Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402554">Using <code class="literal">tdbbackup</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id402665">CUPS Print Drivers from Linuxprinting.org</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id402825">foomatic-rip and Foomatic Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403538">foomatic-rip and Foomatic PPD Download and Installation</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id403960">Page Accounting with CUPS</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id403990">Setting Up Quotas</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404041">Correct and Incorrect Accounting</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404074">Adobe and CUPS PostScript Drivers for Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404205">The page_log File Syntax</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404341">Possible Shortcomings</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404399">Future Developments</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404434">Other Accounting Tools</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id404447">Additional Material</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id404635">Autodeletion or Preservation of CUPS Spool Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id404706">CUPS Configuration Settings Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404783">Preconditions</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404913">Manual Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id404956">Printing from CUPS to Windows-Attached Printers</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id405213">More CUPS Filtering Chains</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id405322">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id405327">Windows 9x/Me Client Can't Install Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#root-ask-loop">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Keeps Asking for Root Password in Never-ending Loop</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405397">&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405434">&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405504">Client Can't Connect to Samba Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405527">New Account Reconnection from Windows 200x/XP Troubles</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405607">Avoid Being Connected to the Samba Server as the Wrong User</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405654">Upgrading to CUPS Drivers from Adobe Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405688">Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405722">Deleted Windows 200x Printer Driver Is Still Shown</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405753">Windows 200x/XP Local Security Policies</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405784">Administrator Cannot Install Printers for All Local Users</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405821">Print Change, Notify Functions on NT Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405845">Windows XP SP1</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405887">Print Options for All Users Can't Be Set on Windows 200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406154">Most Common Blunders in Driver Settings on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406206"><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406252">Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406346">Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406408">Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id406459">Overview of the CUPS Printing Processes</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id390719"></a>Introduction</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id390724"></a>Features and Benefits</h3></div></div></div><p>
     5<a class="indexterm" name="id390732"></a>
    66                The Common UNIX Print System (<a class="ulink" href="http://www.cups.org/" target="_top">CUPS</a>)
    77                has become quite popular. All major Linux distributions now ship it as their default printing
     
    1212                that is also relevant to CUPS.
    1313                </p><p>
    14 <a class="indexterm" name="id416463"></a>
     14<a class="indexterm" name="id390762"></a>
    1515                CUPS sports quite a few unique and powerful features. While its basic functions may be grasped quite
    1616                easily, they are also new. Because it is different from other, more traditional printing systems, it is best
     
    1818                the beginning. This documentation will lead you to a complete understanding of CUPS. Let's start with the most
    1919                basic things first.
    20                 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id416476"></a>Overview</h3></div></div></div><p>
    21 <a class="indexterm" name="id416484"></a>
    22 <a class="indexterm" name="id416490"></a>
    23 <a class="indexterm" name="id416497"></a>
    24 <a class="indexterm" name="id416504"></a>
    25 <a class="indexterm" name="id416511"></a>
    26 <a class="indexterm" name="id416520"></a>
    27 <a class="indexterm" name="id416530"></a>
    28 <a class="indexterm" name="id416536"></a>
     20                </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id390775"></a>Overview</h3></div></div></div><p>
     21<a class="indexterm" name="id390783"></a>
     22<a class="indexterm" name="id390790"></a>
     23<a class="indexterm" name="id390796"></a>
     24<a class="indexterm" name="id390803"></a>
     25<a class="indexterm" name="id390810"></a>
     26<a class="indexterm" name="id390820"></a>
     27<a class="indexterm" name="id390829"></a>
     28<a class="indexterm" name="id390835"></a>
    2929        CUPS is more than just a print spooling system. It is a complete printer management system that
    3030        complies with the new Internet Printing Protocol (IPP). IPP is an industry and Internet Engineering Task Force
     
    3434        like KDE's overwhelming <a class="ulink" href="http://printing.kde.org/" target="_top">KDEPrint</a>).
    3535        </p><p>
    36 <a class="indexterm" name="id416557"></a>
    37 <a class="indexterm" name="id416564"></a>
     36<a class="indexterm" name="id390856"></a>
     37<a class="indexterm" name="id390863"></a>
    3838        CUPS allows creation of <span class="emphasis"><em>raw</em></span> printers (i.e., no print file format translation) as
    3939        well as <span class="emphasis"><em>smart</em></span> printers (i.e., CUPS does file format conversion as required for the
     
    4141        course, if you are a CUPS advocate, you would argue that CUPS is better! In any case, let us now explore how
    4242        to configure CUPS for interfacing with MS Windows print clients via Samba.
    43         </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id416588"></a>Basic CUPS Support Configuration</h2></div></div></div><p>
    44 <a class="indexterm" name="id416596"></a>
    45 <a class="indexterm" name="id416603"></a>
    46 <a class="indexterm" name="id416609"></a>
    47 <a class="indexterm" name="id416616"></a>
    48 <a class="indexterm" name="id416623"></a>
     43        </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id390884"></a>Basic CUPS Support Configuration</h2></div></div></div><p>
     44<a class="indexterm" name="id390892"></a>
     45<a class="indexterm" name="id390899"></a>
     46<a class="indexterm" name="id390906"></a>
     47<a class="indexterm" name="id390912"></a>
     48<a class="indexterm" name="id390919"></a>
    4949Printing with CUPS in the most basic <code class="filename">smb.conf</code> setup in Samba-3.0 (as was true for 2.2.x) requires just two
    5050parameters: <a class="link" href="smb.conf.5.html#PRINTING">printing = cups</a> and <a class="link" href="smb.conf.5.html#PRINTCAP">printcap = cups</a>. CUPS does not need a printcap file.  However, the
     
    5656cupsd.conf</code> and other CUPS-related documentation, like the wealth of documents regarding the CUPS
    5757server itself available from the <a class="ulink" href="http://localhost:631/documentation.html" target="_top">CUPS</a> web site.
    58         </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id416695"></a>Linking smbd with libcups.so</h3></div></div></div><p>
    59 <a class="indexterm" name="id416703"></a>
     58        </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id390991"></a>Linking smbd with libcups.so</h3></div></div></div><p>
     59<a class="indexterm" name="id390999"></a>
    6060        Samba has a special relationship to CUPS. Samba can be compiled with CUPS library support.
    6161        Most recent installations have this support enabled. By default, CUPS linking is compiled
     
    6464        there are some differences in required or supported configuration.
    6565        </p><p>
    66 <a class="indexterm" name="id416725"></a>
    67 <a class="indexterm" name="id416732"></a>
     66<a class="indexterm" name="id391021"></a>
     67<a class="indexterm" name="id391028"></a>
    6868        When Samba is compiled and linked with <code class="filename">libcups</code>, <a class="link" href="smb.conf.5.html#PRINTCAP">printcap = cups</a>
    6969        uses the CUPS API to list printers, submit jobs, query queues, and so on. Otherwise it maps to the System V
     
    8080</pre><p>
    8181        </p><p>
    82 <a class="indexterm" name="id416796"></a>
     82<a class="indexterm" name="id391092"></a>
    8383        The line <code class="computeroutput">libcups.so.2 =&gt; /usr/lib/libcups.so.2 (0x40123000)</code> shows
    8484        there is CUPS support compiled into this version of Samba. If this is the case, and printing = cups
     
    9696        <a class="link" href="smb.conf.5.html#QUEUEPAUSECOMMAND">queuepause command</a> and
    9797        <a class="link" href="smb.conf.5.html#QUEUERESUMECOMMAND">queue resume command</a>).
    98         </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id416919"></a>Simple <code class="filename">smb.conf</code> Settings for CUPS</h3></div></div></div><p>
     98        </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id391215"></a>Simple <code class="filename">smb.conf</code> Settings for CUPS</h3></div></div></div><p>
    9999        To summarize, <a class="link" href="CUPS-printing.html#cups-exam-simple" title="Example 22.1. Simplest Printing-Related smb.conf">the Simplest Printing-Related
    100100        <code class="filename">smb.conf</code> file</a> shows the simplest printing-related setup for <code class="filename">smb.conf</code> to
    101101        enable basic CUPS support:
    102         </p><div class="example"><a name="cups-exam-simple"></a><p class="title"><b>Example 22.1. Simplest Printing-Related smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id416979"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id416990"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id417002"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id417022"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id417034"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id417045"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td><a class="indexterm" name="id417057"></a><em class="parameter"><code>public = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417068"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417080"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id417091"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417102"></a><em class="parameter"><code>printer admin = root, @ntadmins</code></em></td></tr></table></div></div><br class="example-break"><p>
    103 <a class="indexterm" name="id417117"></a>
    104 <a class="indexterm" name="id417124"></a>
    105 <a class="indexterm" name="id417131"></a>
     102        </p><div class="example"><a name="cups-exam-simple"></a><p class="title"><b>Example 22.1. Simplest Printing-Related smb.conf</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id391275"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id391286"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id391298"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id391318"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id391330"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id391341"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td><a class="indexterm" name="id391353"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id391364"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id391376"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id391387"></a><em class="parameter"><code>printer admin = root, @ntadmins, @smbprintadm</code></em></td></tr></table></div></div><br class="example-break"><p>
     103<a class="indexterm" name="id391402"></a>
     104<a class="indexterm" name="id391409"></a>
     105<a class="indexterm" name="id391416"></a>
    106106        This is all you need for basic printing setup for CUPS. It will print all graphic, text, PDF, and PostScript
    107107        files submitted from Windows clients. However, most of your Windows users would not know how to send these
     
    113113        PostScript device, the print data stream is &#8220;<span class="quote">binary,</span>&#8221; sensible only for the target printer. Read
    114114        on to learn what problem this may cause and how to avoid it.
    115         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id417155"></a>More Complex CUPS <code class="filename">smb.conf</code> Settings</h3></div></div></div><p>
     115        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id391445"></a>More Complex CUPS <code class="filename">smb.conf</code> Settings</h3></div></div></div><p>
    116116        <a class="link" href="CUPS-printing.html#overridesettings" title="Example 22.2. Overriding Global CUPS Settings for One Printer">The Overriding Global CUPS Settings for One Printer example</a>
    117117        is a slightly more complex printing-related setup for <code class="filename">smb.conf</code>. It enables general CUPS printing
    118118        support for all printers, but defines one printer share, which is set up differently.
    119         </p><div class="example"><a name="overridesettings"></a><p class="title"><b>Example 22.2. Overriding Global CUPS Settings for One Printer</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id417208"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id417220"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id417231"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id417252"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id417263"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id417274"></a><em class="parameter"><code>public = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417286"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417297"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id417309"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417320"></a><em class="parameter"><code>printer admin = root, @ntadmins</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[special_printer]</code></em></td></tr><tr><td><a class="indexterm" name="id417341"></a><em class="parameter"><code>comment = A special printer with his own settings</code></em></td></tr><tr><td><a class="indexterm" name="id417353"></a><em class="parameter"><code>path = /var/spool/samba-special</code></em></td></tr><tr><td><a class="indexterm" name="id417364"></a><em class="parameter"><code>printing = sysv</code></em></td></tr><tr><td><a class="indexterm" name="id417376"></a><em class="parameter"><code>printcap = lpstat</code></em></td></tr><tr><td><a class="indexterm" name="id417387"></a><em class="parameter"><code>print command = echo "NEW: `date`: printfile %f" &gt;&gt; /tmp/smbprn.log ; echo "     `date`: p-%p s-%s f-%f" &gt;&gt; /tmp/smbprn.log ; echo "     `date`: j-%j J-%J z-%z c-%c" &gt;&gt; /tmp/smbprn.log ; rm %f </code></em></td></tr><tr><td><a class="indexterm" name="id417401"></a><em class="parameter"><code>public = no</code></em></td></tr><tr><td><a class="indexterm" name="id417412"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id417424"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id417435"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id417447"></a><em class="parameter"><code>printer admin = kurt</code></em></td></tr><tr><td><a class="indexterm" name="id417458"></a><em class="parameter"><code>hosts deny = 0.0.0.0</code></em></td></tr><tr><td><a class="indexterm" name="id417470"></a><em class="parameter"><code>hosts allow = turbo_xp, 10.160.50.23, 10.160.51.60</code></em></td></tr></table></div></div><br class="example-break"><p>
     119        </p><div class="example"><a name="overridesettings"></a><p class="title"><b>Example 22.2. Overriding Global CUPS Settings for One Printer</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id391498"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id391510"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id391521"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id391542"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id391553"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id391564"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id391576"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id391587"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id391599"></a><em class="parameter"><code>printer admin = root, @ntadmins, @smbprintadm</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[special_printer]</code></em></td></tr><tr><td><a class="indexterm" name="id391620"></a><em class="parameter"><code>comment = A special printer with his own settings</code></em></td></tr><tr><td><a class="indexterm" name="id391631"></a><em class="parameter"><code>path = /var/spool/samba-special</code></em></td></tr><tr><td><a class="indexterm" name="id391643"></a><em class="parameter"><code>printing = sysv</code></em></td></tr><tr><td><a class="indexterm" name="id391654"></a><em class="parameter"><code>printcap = lpstat</code></em></td></tr><tr><td><a class="indexterm" name="id391666"></a><em class="parameter"><code>print command = echo "NEW: `date`: printfile %f" &gt;&gt; /tmp/smbprn.log ; echo "     `date`: p-%p s-%s f-%f" &gt;&gt; /tmp/smbprn.log ; echo "     `date`: j-%j J-%J z-%z c-%c" &gt;&gt; /tmp/smbprn.log ; rm %f </code></em></td></tr><tr><td><a class="indexterm" name="id391680"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id391691"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id391703"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id391714"></a><em class="parameter"><code>printer admin = kurt</code></em></td></tr><tr><td><a class="indexterm" name="id391726"></a><em class="parameter"><code>hosts deny = 0.0.0.0</code></em></td></tr><tr><td><a class="indexterm" name="id391737"></a><em class="parameter"><code>hosts allow = turbo_xp, 10.160.50.23, 10.160.51.60</code></em></td></tr></table></div></div><br class="example-break"><p>
    120120        This special share is only for testing purposes. It does not write the print job to a file. It just logs the job parameters
    121121        known to Samba into the <code class="filename">/tmp/smbprn.log</code> file and deletes the job-file. Moreover, the
     
    124124        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
    125125        <a class="link" href="smb.conf.5.html#PRINTING">printing = sysv</a> and <a class="link" href="smb.conf.5.html#PRINTCAP">printcap = lpstat</a>.
    126         </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id417537"></a>Advanced Configuration</h2></div></div></div><p>
     126        </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id391804"></a>Advanced Configuration</h2></div></div></div><p>
    127127        Before we delve into all the configuration options, let us clarify a few points. <span class="emphasis"><em>Network printing
    128128        needs to be organized and set up correctly</em></span>. This frequently doesn't happen. Legacy systems or small
    129129        business LAN environments often lack design and good housekeeping.
    130         </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id417551"></a>Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</h3></div></div></div><p>
    131 <a class="indexterm" name="id417563"></a>
    132         <a class="indexterm" name="id417569"></a>
    133         <a class="indexterm" name="id417579"></a>
     130        </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id391818"></a>Central Spooling vs. &#8220;<span class="quote">Peer-to-Peer</span>&#8221; Printing</h3></div></div></div><p>
     131<a class="indexterm" name="id391830"></a>
     132        <a class="indexterm" name="id391837"></a>
     133        <a class="indexterm" name="id391846"></a>
    134134        Many small office or home networks, as well as badly organized larger environments, allow each client a direct
    135135        access to available network printers. This is generally a bad idea. It often blocks one client's access to the
     
    139139        central system, which responds immediately, takes jobs from multiple concurrent clients, and transfers them to
    140140        the printer(s) in the correct order.
    141         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id417596"></a>Raw Print Serving: Vendor Drivers on Windows Clients</h3></div></div></div><p>
    142         <a class="indexterm" name="id417604"></a>
    143         <a class="indexterm" name="id417611"></a>
     141        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id391863"></a>Raw Print Serving: Vendor Drivers on Windows Clients</h3></div></div></div><p>
     142        <a class="indexterm" name="id391871"></a>
     143        <a class="indexterm" name="id391878"></a>
    144144        Most traditionally configured UNIX print servers acting on behalf of
    145145        Samba's Windows clients represented a really simple setup. Their only
     
    150150        be installed on each and every client for the target device.
    151151        </p><p>
    152 <a class="indexterm" name="id417628"></a>
    153 <a class="indexterm" name="id417635"></a>
     152<a class="indexterm" name="id391895"></a>
     153<a class="indexterm" name="id391902"></a>
    154154        It is possible to configure CUPS, Samba, and your Windows clients in the
    155155        same traditional and simple way. When CUPS printers are configured
     
    165165        attached to the Windows client. You then redirect output to a raw network
    166166        print queue. This procedure may be followed to achieve this:
    167         </p><div class="procedure"><a name="id417653"></a><p class="title"><b>Procedure 22.1. Configuration Steps for Raw CUPS Printing Support</b></p><ol type="1"><li><p>
    168 <a class="indexterm" name="id417664"></a>
     167        </p><div class="procedure"><a name="id391920"></a><p class="title"><b>Procedure 22.1. Configuration Steps for Raw CUPS Printing Support</b></p><ol type="1"><li><p>
     168<a class="indexterm" name="id391931"></a>
    169169                Edit <code class="filename">/etc/cups/mime.types</code> to uncomment the line
    170170                near the end of the file that has:
     
    173173</pre><p>
    174174                </p></li><li><p>
    175 <a class="indexterm" name="id417690"></a>
     175<a class="indexterm" name="id391957"></a>
    176176                Do the same for the file <code class="filename">/etc/cups/mime.convs</code>.
    177177                </p></li><li><p>
     
    194194                Here, the name <code class="constant">raw_q</code> is the name you gave the print
    195195                queue in the CUPS environment.
    196                 </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id417810"></a>Installation of Windows Client Drivers</h3></div></div></div><p>
     196                </p></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id392077"></a>Installation of Windows Client Drivers</h3></div></div></div><p>
    197197        The printer drivers on the Windows clients may be installed
    198198        in two functionally different ways:
     
    201201        printing and uses a <code class="filename">\\sambaserver\printershare</code>
    202202        type of connection.</p></li><li><p>
    203         <a class="indexterm" name="id417837"></a>
     203        <a class="indexterm" name="id392104"></a>
    204204                        Deposit and prepare the drivers (for later download) on
    205205                        the print server (Samba); this enables the clients to use
     
    208208        clients use the <span class="emphasis"><em>SPOOLSS/MS-RPC</em></span>
    209209        type printing calls.</p></li></ul></div><p>
    210         The second method is recommended for use over the first.
     210        The second method is recommended for use over the first as it reduces the
     211        administrative efforts and prevents that different versions of the drivers
     212        are used accidentally.
    211213        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="cups-raw"></a>Explicitly Enable &#8220;<span class="quote">raw</span>&#8221; Printing for <span class="emphasis"><em>application/octet-stream</em></span></h3></div></div></div><p>
    212         <a class="indexterm" name="id417877"></a>
    213         <a class="indexterm" name="id417884"></a>
    214         <a class="indexterm" name="id417891"></a>
     214        <a class="indexterm" name="id392145"></a>
     215        <a class="indexterm" name="id392152"></a>
     216        <a class="indexterm" name="id392159"></a>
    215217        If you use the first option (drivers are installed on the client
    216218        side), there is one setting to take care of: CUPS needs to be told
     
    224226application/octet-stream
    225227</pre><p>
    226         <a class="indexterm" name="id417941"></a>
    227         <a class="indexterm" name="id417948"></a>
     228        <a class="indexterm" name="id392209"></a>
     229        <a class="indexterm" name="id392216"></a>
    228230        In <code class="filename">/etc/cups/mime.convs</code>, have this line:
    229         <a class="indexterm" name="id417961"></a>
     231        <a class="indexterm" name="id392229"></a>
    230232</p><pre class="programlisting">
    231233application/octet-stream   application/vnd.cups-raw   0   -
     
    238240        not <span class="emphasis"><em>enforce</em></span> &#8220;<span class="quote">raw</span>&#8221; printing, it only <span class="emphasis"><em>allows</em></span> it.
    239241        </p></div><p><b>Background. </b>
    240         <a class="indexterm" name="id418022"></a>
    241 <a class="indexterm" name="id418029"></a>
     242        <a class="indexterm" name="id392290"></a>
     243<a class="indexterm" name="id392297"></a>
    242244        That CUPS is a more security-aware printing system than traditional ones does not by default allow a user to
    243245        send deliberate (possibly binary) data to printing devices. This could be easily abused to launch a
     
    253255        more advanced CUPS/Samba printing, simply skip the remaining sections
    254256        of this chapter.
    255         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id418073"></a>Driver Upload Methods</h3></div></div></div><p>
     257        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id392341"></a>Driver Upload Methods</h3></div></div></div><p>
    256258        This section describes three familiar methods, plus one new one, by which
    257259        printer drivers may be uploaded.
    258260        </p><p>
    259         <a class="indexterm" name="id418085"></a>
     261        <a class="indexterm" name="id392353"></a>
    260262        If you want to use the MS-RPC-type printing, you must upload the
    261263        drivers onto the Samba server first (<em class="parameter"><code>[print$]</code></em>
     
    266268        three methods of preparing the client drivers on the Samba server:
    267269        </p><div class="itemizedlist"><ul type="disc"><li><p>
    268                 <a class="indexterm" name="id418118"></a>
     270                <a class="indexterm" name="id392386"></a>
    269271                The GUI, &#8220;<span class="quote">Add Printer Wizard</span>&#8221; <span class="emphasis"><em>upload-from-a-Windows-client</em></span> method.
    270272                </p></li><li><p>
    271273                The command line, &#8220;<span class="quote">smbclient/rpcclient</span>&#8221; upload-from-a-UNIX-workstation method.
    272274                </p></li><li><p>
    273                 <a class="indexterm" name="id418145"></a>
     275                <a class="indexterm" name="id392413"></a>
    274276                The Imprints tool set method.
    275277                </p></li></ul></div><p>
    276 <a class="indexterm" name="id418156"></a>
     278<a class="indexterm" name="id392424"></a>
    277279        These three methods apply to CUPS all the same. The <code class="literal">cupsaddsmb</code> utility is a new and more
    278280        convenient way to load the Windows drivers into Samba and is provided if you use CUPS.
     
    280282        <code class="literal">cupsaddsmb</code> is discussed in much detail later in this chapter. But we first
    281283        explore the CUPS filtering system and compare the Windows and UNIX printing architectures.
    282         </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id418184"></a>Advanced Intelligent Printing with PostScript Driver Download</h2></div></div></div><p>
    283         <a class="indexterm" name="id418192"></a>
     284        </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id392452"></a>Advanced Intelligent Printing with PostScript Driver Download</h2></div></div></div><p>
     285        <a class="indexterm" name="id392460"></a>
    284286        We now know how to set up a &#8220;<span class="quote">dump</span>&#8221; print server, that is, a server that spools
    285287        print jobs &#8220;<span class="quote">raw</span>&#8221;, leaving the print data untouched.
    286288        </p><p>
    287289        You might need to set up CUPS in a smarter way. The reasons could be manifold:
    288         </p><a class="indexterm" name="id418215"></a><a class="indexterm" name="id418221"></a><a class="indexterm" name="id418228"></a><div class="itemizedlist"><ul type="disc"><li><p>Maybe your boss wants to get monthly statistics: Which
     290        </p><a class="indexterm" name="id392483"></a><a class="indexterm" name="id392490"></a><a class="indexterm" name="id392496"></a><div class="itemizedlist"><ul type="disc"><li><p>Maybe your boss wants to get monthly statistics: Which
    289291        printer did how many pages? What was the average data size of a job?
    290292        What was the average print run per day? What are the typical hourly
     
    302304        CUPS filtering system, how it works, and how you can tweak it.
    303305        </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="gdipost"></a>GDI on Windows, PostScript on UNIX</h3></div></div></div><p>
    304         <a class="indexterm" name="id418289"></a>
    305         <a class="indexterm" name="id418296"></a>
     306        <a class="indexterm" name="id392557"></a>
     307        <a class="indexterm" name="id392564"></a>
    306308        Network printing is one of the most complicated and error-prone
    307309        day-to-day tasks any user or administrator may encounter. This is
    308310        true for all OS platforms, and there are reasons it is so.
    309311        </p><p>
    310         <a class="indexterm" name="id418307"></a>
    311         <a class="indexterm" name="id418314"></a>
    312 <a class="indexterm" name="id418320"></a>
    313 <a class="indexterm" name="id418327"></a>
    314 <a class="indexterm" name="id418334"></a>
     312        <a class="indexterm" name="id392575"></a>
     313        <a class="indexterm" name="id392582"></a>
     314<a class="indexterm" name="id392588"></a>
     315<a class="indexterm" name="id392595"></a>
     316<a class="indexterm" name="id392602"></a>
    315317        You can't expect to throw just any file format at a printer and have it get printed. A file format conversion
    316318        must take place. The problem is that there is no common standard for print file formats across all
     
    319321        used page description languages (PDLs), there are still many manufacturers who &#8220;<span class="quote">roll their own</span>&#8221;
    320322        (their reasons may be unacceptable license fees for using printer-embedded PostScript interpreters, and so on).
    321         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id418358"></a>Windows Drivers, GDI, and EMF</h3></div></div></div><p>
    322         <a class="indexterm" name="id418365"></a>
    323         <a class="indexterm" name="id418372"></a>
    324         <a class="indexterm" name="id418378"></a>
    325 <a class="indexterm" name="id418385"></a>
     323        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id392626"></a>Windows Drivers, GDI, and EMF</h3></div></div></div><p>
     324        <a class="indexterm" name="id392634"></a>
     325        <a class="indexterm" name="id392640"></a>
     326        <a class="indexterm" name="id392647"></a>
     327<a class="indexterm" name="id392653"></a>
    326328        In Windows OS, the format conversion job is done by the printer drivers. On MS Windows OS platforms all
    327329        application programmers have at their disposal a built-in API, the graphical device interface (GDI), as part
     
    334336        driver and converted to the printer-specific file format.
    335337        </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
    336         <a class="indexterm" name="id418413"></a>
    337 <a class="indexterm" name="id418420"></a>
    338 <a class="indexterm" name="id418426"></a>
     338        <a class="indexterm" name="id392681"></a>
     339<a class="indexterm" name="id392688"></a>
     340<a class="indexterm" name="id392695"></a>
    339341        To the GDI foundation in MS Windows, Apple has chosen to put paper and screen output on a common foundation
    340         for its (BSD-UNIX-based, did you know?) Mac OS X and Darwin operating <a class="indexterm" name="id418435"></a> <a class="indexterm" name="id418442"></a>
    341         <a class="indexterm" name="id418448"></a> <a class="indexterm" name="id418455"></a> systems.
     342        for its (BSD-UNIX-based, did you know?) Mac OS X and Darwin operating <a class="indexterm" name="id392703"></a> <a class="indexterm" name="id392710"></a>
     343        <a class="indexterm" name="id392717"></a> <a class="indexterm" name="id392723"></a> systems.
    342344        Apple's <span class="emphasis"><em>core graphic engine</em></span> uses a <span class="emphasis"><em>PDF</em></span> derivative for all display work.
    343345        </p></div><p>
    344346        The example in <a class="link" href="CUPS-printing.html#1small" title="Figure 22.1. Windows Printing to a Local Printer.">Windows Printing to a Local Printer</a> illustrates local Windows
    345347        printing.
    346         </p><div class="figure"><a name="1small"></a><p class="title"><b>Figure 22.1. Windows Printing to a Local Printer.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/1small.png" alt="Windows Printing to a Local Printer."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id418524"></a>UNIX Printfile Conversion and GUI Basics</h3></div></div></div><p>
    347         <a class="indexterm" name="id418532"></a>
    348         <a class="indexterm" name="id418538"></a>
    349         <a class="indexterm" name="id418545"></a>
    350         <a class="indexterm" name="id418552"></a>
     348        </p><div class="figure"><a name="1small"></a><p class="title"><b>Figure 22.1. Windows Printing to a Local Printer.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/1small.png" alt="Windows Printing to a Local Printer."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id392792"></a>UNIX Printfile Conversion and GUI Basics</h3></div></div></div><p>
     349        <a class="indexterm" name="id392800"></a>
     350        <a class="indexterm" name="id392807"></a>
     351        <a class="indexterm" name="id392813"></a>
     352        <a class="indexterm" name="id392820"></a>
    351353        In UNIX and Linux, there is no comparable layer built into the OS kernel(s) or the X (screen display) server.
    352354        Every application is responsible for itself to create its print output. Fortunately, most use PostScript and
     
    362364        your system; there are separate ones for fonts used for X display and fonts to be used on paper.
    363365        </p><p><b>Background. </b>
    364         <a class="indexterm" name="id418592"></a>
    365 <a class="indexterm" name="id418599"></a>
    366 <a class="indexterm" name="id418606"></a>
    367 <a class="indexterm" name="id418612"></a>
    368 <a class="indexterm" name="id418619"></a>
    369 <a class="indexterm" name="id418626"></a>
    370 <a class="indexterm" name="id418633"></a>
    371 <a class="indexterm" name="id418640"></a>
    372 <a class="indexterm" name="id418646"></a>
    373 <a class="indexterm" name="id418653"></a>
     366        <a class="indexterm" name="id392860"></a>
     367<a class="indexterm" name="id392867"></a>
     368<a class="indexterm" name="id392874"></a>
     369<a class="indexterm" name="id392880"></a>
     370<a class="indexterm" name="id392887"></a>
     371<a class="indexterm" name="id392894"></a>
     372<a class="indexterm" name="id392901"></a>
     373<a class="indexterm" name="id392908"></a>
     374<a class="indexterm" name="id392914"></a>
     375<a class="indexterm" name="id392921"></a>
    374376        The PostScript programming language is an &#8220;<span class="quote">invention</span>&#8221; by Adobe, but its specifications have been
    375377        published extensively. Its strength lies in its powerful abilities to describe graphical objects (fonts,
     
    383385        program or on paper by a printer.
    384386        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="post-and-ghost"></a>PostScript and Ghostscript</h3></div></div></div><p>
    385         <a class="indexterm" name="id418694"></a>
    386         <a class="indexterm" name="id418700"></a>
    387         <a class="indexterm" name="id418709"></a>
    388 <a class="indexterm" name="id418718"></a>
    389 <a class="indexterm" name="id418725"></a>
     387        <a class="indexterm" name="id392962"></a>
     388        <a class="indexterm" name="id392968"></a>
     389        <a class="indexterm" name="id392977"></a>
     390<a class="indexterm" name="id392987"></a>
     391<a class="indexterm" name="id392993"></a>
    390392        So UNIX is lacking a common ground for printing on paper and displaying on screen. Despite this unfavorable
    391393        legacy for UNIX, basic printing is fairly easy if you have PostScript printers at your disposal. The reason is
     
    396398        different than PostScript printing a file from a Windows origin.
    397399        </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
    398         <a class="indexterm" name="id418748"></a>
    399 <a class="indexterm" name="id418755"></a>
    400 <a class="indexterm" name="id418761"></a>
     400        <a class="indexterm" name="id393016"></a>
     401<a class="indexterm" name="id393023"></a>
     402<a class="indexterm" name="id393030"></a>
    401403        Traditional UNIX programs and printing systems  while using PostScript  are largely not
    402404        PPD-aware. PPDs are &#8220;<span class="quote">PostScript Printer Description</span>&#8221; files. They enable you to specify and
     
    405407        there is CUPS. as illustrated in <a class="link" href="CUPS-printing.html#2small" title="Figure 22.2. Printing to a PostScript Printer.">Printing to a PostScript Printer</a>.
    406408        </p></div><div class="figure"><a name="2small"></a><p class="title"><b>Figure 22.2. Printing to a PostScript Printer.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/2small.png" alt="Printing to a PostScript Printer."></div></div></div><br class="figure-break"><p>
    407         <a class="indexterm" name="id418835"></a>
     409        <a class="indexterm" name="id393104"></a>
    408410        However, there are other types of printers out there. These do not know how to print PostScript. They use
    409411        their own PDL, often proprietary. To print to them is much more demanding. Since your UNIX applications mostly
    410412        produce PostScript, and since these devices do not understand PostScript, you need to convert the print files
    411413        to a format suitable for your printer on the host before you can send it away.
    412         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id418848"></a>Ghostscript: The Software RIP for Non-PostScript Printers</h3></div></div></div><p>
    413         <a class="indexterm" name="id418856"></a>
     414        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id393116"></a>Ghostscript: The Software RIP for Non-PostScript Printers</h3></div></div></div><p>
     415        <a class="indexterm" name="id393124"></a>
    414416        Here is where Ghostscript kicks in. Ghostscript is the traditional (and quite powerful) PostScript interpreter
    415417        used on UNIX platforms. It is a RIP in software, capable of doing a <span class="emphasis"><em>lot</em></span> of file format
     
    418420        <a class="link" href="CUPS-printing.html#3small" title="Figure 22.3. Ghostscript as a RIP for Non-PostScript Printers.">Ghostscript as a RIP for Non-PostScript Printers</a>.
    419421        </p><div class="figure"><a name="3small"></a><p class="title"><b>Figure 22.3. Ghostscript as a RIP for Non-PostScript Printers.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/3small.png" alt="Ghostscript as a RIP for Non-PostScript Printers."></div></div></div><br class="figure-break"><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>
    420 <a class="indexterm" name="id418922"></a>
    421 <a class="indexterm" name="id418928"></a>
    422 <a class="indexterm" name="id418935"></a>
     422<a class="indexterm" name="id393190"></a>
     423<a class="indexterm" name="id393196"></a>
     424<a class="indexterm" name="id393203"></a>
    423425        Use the &#8220;<span class="quote">gs -h</span>&#8221; command to check for all built-in &#8220;<span class="quote">devices</span>&#8221; on your Ghostscript
    424426        version. If you specify a parameter of <em class="parameter"><code>-sDEVICE=png256</code></em> on your Ghostscript command
     
    428430        initially put under the &#8220;<span class="quote">AFPL</span>&#8221; license, but re-released under the GNU GPL as soon as the next
    429431        AFPL version appears. GNU Ghostscript is probably the version installed on most Samba systems. But it has some
    430         deficiencies.  <a class="indexterm" name="id418968"></a> Therefore, ESP Ghostscript was developed as an enhancement over GNU Ghostscript,
     432        deficiencies.  <a class="indexterm" name="id393236"></a> Therefore, ESP Ghostscript was developed as an enhancement over GNU Ghostscript,
    431433        with lots of bug-fixes, additional devices, and improvements. It is jointly maintained by developers from
    432         CUPS, Gimp-Print, MandrakeSoft, SuSE, Red Hat, and Debian. It includes the &#8220;<span class="quote">cups</span>&#8221; device
     434        CUPS, Gutenprint, MandrakeSoft, SuSE, Red Hat, and Debian. It includes the &#8220;<span class="quote">cups</span>&#8221; device
    433435        (essential to print to non-PS printers from CUPS).
    434         </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id418988"></a>PostScript Printer Description (PPD) Specification</h3></div></div></div><p>
    435         <a class="indexterm" name="id418996"></a>
    436 <a class="indexterm" name="id419002"></a>
    437 <a class="indexterm" name="id419009"></a>
     436        </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id393256"></a>PostScript Printer Description (PPD) Specification</h3></div></div></div><p>
     437        <a class="indexterm" name="id393264"></a>
     438<a class="indexterm" name="id393270"></a>
     439<a class="indexterm" name="id393277"></a>
    438440        While PostScript in essence is a PDL to represent the page layout in a device-independent way, real-world
    439441        print jobs are always ending up being output on hardware with device-specific features. To take care of all
     
    457459        file created by the driver.
    458460        </p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
    459         <a class="indexterm" name="id419038"></a>
    460 <a class="indexterm" name="id419044"></a>
     461        <a class="indexterm" name="id393306"></a>
     462<a class="indexterm" name="id393312"></a>
    461463        A PostScript file that was created to contain device-specific commands
    462464        for achieving a certain print job output (e.g., duplexed, stapled, and
     
    464466        may not be printable at all on other models; it also may not be fit
    465467        for further processing by software (e.g., by a PDF distilling program).
    466         </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id419056"></a>Using Windows-Formatted Vendor PPDs</h3></div></div></div><p>
    467 <a class="indexterm" name="id419064"></a>
    468 <a class="indexterm" name="id419071"></a>
    469 <a class="indexterm" name="id419078"></a>
     468        </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id393324"></a>Using Windows-Formatted Vendor PPDs</h3></div></div></div><p>
     469<a class="indexterm" name="id393332"></a>
     470<a class="indexterm" name="id393339"></a>
     471<a class="indexterm" name="id393346"></a>
    470472        CUPS can handle all spec-compliant PPDs as supplied by the manufacturers for their PostScript models. Even if
    471473        a vendor does not mention our favorite OS in his or her manuals and brochures, you can safely trust this:
     
    478480        first pit stops.
    479481        </p></div><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
    480         <a class="indexterm" name="id419111"></a>
    481         <a class="indexterm" name="id419118"></a>
     482        <a class="indexterm" name="id393379"></a>
     483        <a class="indexterm" name="id393386"></a>
    482484        For real PostScript printers, <span class="emphasis"><em>do not</em></span> use the <span class="emphasis"><em>Foomatic</em></span> or
    483485        <span class="emphasis"><em>cupsomatic</em></span> PPDs from Linuxprinting.org. With these devices, the original vendor-provided
    484486        PPDs are always the first choice.
    485487        </p></div><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>
    486 <a class="indexterm" name="id419141"></a>
     488<a class="indexterm" name="id393409"></a>
    487489        If you are looking for an original vendor-provided PPD of a specific device, and you know that an NT4 box (or
    488490        any other Windows box) on your LAN has the PostScript driver installed, just use <code class="literal">smbclient
    489491        //NT4-box/print\$ -U username</code> to access the Windows directory where all printer driver files are
    490492        stored. First look in the <code class="filename">W32X86/2</code> subdirectory for the PPD you are seeking.
    491         </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id419165"></a>CUPS Also Uses PPDs for Non-PostScript Printers</h3></div></div></div><p>
    492 <a class="indexterm" name="id419173"></a>
    493 <a class="indexterm" name="id419180"></a>
    494 <a class="indexterm" name="id419186"></a>
     493        </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id393433"></a>CUPS Also Uses PPDs for Non-PostScript Printers</h3></div></div></div><p>
     494<a class="indexterm" name="id393441"></a>
     495<a class="indexterm" name="id393448"></a>
     496<a class="indexterm" name="id393455"></a>
    495497        CUPS also uses specially crafted PPDs to handle non-PostScript printers. These PPDs are usually not available
    496498        from the vendors (and no, you can't just take the PPD of a PostScript printer with the same model name and
    497499        hope it works for the non-PostScript version too). To understand how these PPDs work for non-PS printers, we
    498500        first need to dive deeply into the CUPS filtering and file format conversion architecture. Stay tuned.
    499         </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id419200"></a>The CUPS Filtering Architecture</h2></div></div></div><p>
    500 <a class="indexterm" name="id419208"></a>
    501 <a class="indexterm" name="id419215"></a>
    502 <a class="indexterm" name="id419222"></a>
    503 <a class="indexterm" name="id419228"></a>
    504 <a class="indexterm" name="id419235"></a>
     501        </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id393468"></a>The CUPS Filtering Architecture</h2></div></div></div><p>
     502<a class="indexterm" name="id393476"></a>
     503<a class="indexterm" name="id393483"></a>
     504<a class="indexterm" name="id393490"></a>
     505<a class="indexterm" name="id393497"></a>
     506<a class="indexterm" name="id393503"></a>
    505507The core of the CUPS filtering system is based on Ghostscript. In addition to Ghostscript, CUPS uses some
    506508other filters of its own. You (or your OS vendor) may have plugged in even more filters. CUPS handles all data
     
    513515If CUPS rasterizes a PostScript file natively to a bitmap, this is done in two stages:
    514516</p><div class="itemizedlist"><ul type="disc"><li><p>
    515 <a class="indexterm" name="id419258"></a>
    516 <a class="indexterm" name="id419265"></a>
     517<a class="indexterm" name="id393526"></a>
     518<a class="indexterm" name="id393533"></a>
    517519        The first stage uses a Ghostscript device named &#8220;<span class="quote">cups</span>&#8221;
    518520        (this is since version 1.1.15) and produces a generic raster format
    519521        called &#8220;<span class="quote">CUPS raster</span>&#8221;.
    520522        </p></li><li><p>
    521 <a class="indexterm" name="id419284"></a>
     523<a class="indexterm" name="id393553"></a>
    522524        The second stage uses a &#8220;<span class="quote">raster driver</span>&#8221; that converts
    523525        the generic CUPS raster to a device-specific raster.
    524526        </p></li></ul></div><p>
    525 <a class="indexterm" name="id419300"></a>
    526 <a class="indexterm" name="id419307"></a>
    527 <a class="indexterm" name="id419314"></a>
     527<a class="indexterm" name="id393568"></a>
     528<a class="indexterm" name="id393575"></a>
     529<a class="indexterm" name="id393582"></a>
    528530Make sure your Ghostscript version has the &#8220;<span class="quote">cups</span>&#8221; device compiled in (check with <code class="literal">gs -h |
    529531grep cups</code>). Otherwise you may encounter the dreaded <code class="computeroutput">Unable to convert file
    5305320</code> in your CUPS error_log file. To have &#8220;<span class="quote">cups</span>&#8221; as a device in your Ghostscript,
    531533you either need to patch GNU Ghostscript and recompile or use
    532 <a class="indexterm" name="id419342"></a><a class="ulink" href="http://www.cups.org/ghostscript.php" target="_top">ESP Ghostscript</a>. The superior alternative is ESP
     534<a class="indexterm" name="id393610"></a><a class="ulink" href="http://www.cups.org/ghostscript.php" target="_top">ESP Ghostscript</a>. The superior alternative is ESP
    533535Ghostscript. It supports not just CUPS, but 300 other devices (while GNU Ghostscript supports only about 180).
    534536Because of this broad output device support, ESP Ghostscript is the first choice for non-CUPS spoolers, too.
    535537It is now recommended by Linuxprinting.org for all spoolers.
    536538</p><p>
    537 <a class="indexterm" name="id419362"></a>
    538 <a class="indexterm" name="id419368"></a>
    539 <a class="indexterm" name="id419375"></a>
    540 <a class="indexterm" name="id419382"></a>
     539<a class="indexterm" name="id393630"></a>
     540<a class="indexterm" name="id393636"></a>
     541<a class="indexterm" name="id393643"></a>
     542<a class="indexterm" name="id393650"></a>
    541543CUPS printers may be set up to use external rendering paths. One of the most common is provided by the
    542544Foomatic/cupsomatic concept from <a class="ulink" href="http://www.linuxprinting.org/" target="_top">Linuxprinting.org</a>. This
    543545uses the classical Ghostscript approach, doing everything in one step.  It does not use the
    544546&#8220;<span class="quote">cups</span>&#8221; device, but one of the many others. However, even for Foomatic/cupsomatic usage, best
    545 results and <a class="indexterm" name="id419401"></a> broadest printer
     547results and <a class="indexterm" name="id393669"></a> broadest printer
    546548model support is provided by ESP Ghostscript (more about Foomatic/cupsomatic, particularly the new version
    547549called now <span class="emphasis"><em>foomatic-rip</em></span>, follows).
    548 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id419416"></a>MIME Types and CUPS Filters</h3></div></div></div><p>
    549         <a class="indexterm" name="id419424"></a>
    550         <a class="indexterm" name="id419433"></a>
    551 <a class="indexterm" name="id419440"></a>
    552 <a class="indexterm" name="id419447"></a>
    553 <a class="indexterm" name="id419454"></a>
     550</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id393684"></a>MIME Types and CUPS Filters</h3></div></div></div><p>
     551        <a class="indexterm" name="id393692"></a>
     552        <a class="indexterm" name="id393702"></a>
     553<a class="indexterm" name="id393708"></a>
     554<a class="indexterm" name="id393715"></a>
     555<a class="indexterm" name="id393722"></a>
    554556        CUPS reads the file <code class="filename">/etc/cups/mime.types</code> (and all other files carrying a
    555557        <code class="filename">*.types</code> suffix in the same directory) upon startup. These files contain the MIME type
     
    557559        man page for <code class="filename">mime.types</code> and in the comments section of the
    558560        <code class="filename">mime.types</code> file itself. A simple rule reads like this:
    559         <a class="indexterm" name="id419487"></a>
     561        <a class="indexterm" name="id393755"></a>
    560562</p><pre class="programlisting">
    561563application/pdf         pdf string(0,%PDF)
    562564</pre><p>
    563 <a class="indexterm" name="id419500"></a>
    564 <a class="indexterm" name="id419507"></a>
     565<a class="indexterm" name="id393768"></a>
     566<a class="indexterm" name="id393775"></a>
    565567        This means if a filename has a <code class="filename">.pdf</code> suffix or if the magic string
    566568        <span class="emphasis"><em>%PDF</em></span> is right at the beginning of the file itself (offset 0 from the start), then it is a
     
    569571application/postscript  ai eps ps string(0,%!) string(0,&lt;04&gt;%!)
    570572</pre><p>
    571 <a class="indexterm" name="id419537"></a>
    572 <a class="indexterm" name="id419544"></a>
    573 <a class="indexterm" name="id419551"></a>
    574 <a class="indexterm" name="id419557"></a>
    575 <a class="indexterm" name="id419564"></a>
    576 <a class="indexterm" name="id419571"></a>
     573<a class="indexterm" name="id393805"></a>
     574<a class="indexterm" name="id393812"></a>
     575<a class="indexterm" name="id393819"></a>
     576<a class="indexterm" name="id393826"></a>
     577<a class="indexterm" name="id393832"></a>
     578<a class="indexterm" name="id393839"></a>
    577579        If the filename has one of the suffixes <code class="filename">.ai</code>, <code class="filename">.eps</code>,
    578580        <code class="filename">.ps</code>, or if the file itself starts with one of the strings <span class="emphasis"><em>%!</em></span> or
     
    580582        (<em class="parameter"><code>application/postscript</code></em>).
    581583        </p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p>
    582 <a class="indexterm" name="id419613"></a>
     584<a class="indexterm" name="id393881"></a>
    583585        Don't confuse the other mime.types files your system might be using
    584586        with the one in the <code class="filename">/etc/cups/</code> directory.
    585587        </p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
    586 <a class="indexterm" name="id419631"></a>
    587 <a class="indexterm" name="id419638"></a>
    588 <a class="indexterm" name="id419644"></a>
    589 <a class="indexterm" name="id419651"></a>
    590 <a class="indexterm" name="id419658"></a>
     588<a class="indexterm" name="id393899"></a>
     589<a class="indexterm" name="id393906"></a>
     590<a class="indexterm" name="id393913"></a>
     591<a class="indexterm" name="id393919"></a>
     592<a class="indexterm" name="id393926"></a>
    591593        There is an important difference between two similar MIME types in CUPS: one is
    592594        <em class="parameter"><code>application/postscript</code></em>, the other is
    593595        <em class="parameter"><code>application/vnd.cups-postscript</code></em>. While <em class="parameter"><code>application/postscript</code></em> is
    594596        meant to be device-independent, job options for the file are still outside the PS file content, embedded in
    595         command-line or environment variables by CUPS, <em class="parameter"><code>application/vnd.cups-postscript</code></em> may have
     597        command line or environment variables by CUPS, <em class="parameter"><code>application/vnd.cups-postscript</code></em> may have
    596598        the job options inserted into the PostScript data itself (where applicable). The transformation of the generic
    597599        PostScript (<em class="parameter"><code>application/postscript</code></em>) to the device-specific version
     
    599601        <em class="parameter"><code>pstops</code></em> filter. pstops uses information contained in the PPD to do the transformation.
    600602        </p></div><p>
    601 <a class="indexterm" name="id419714"></a>
    602 <a class="indexterm" name="id419721"></a>
    603 <a class="indexterm" name="id419728"></a>
    604 <a class="indexterm" name="id419734"></a>
    605 <a class="indexterm" name="id419741"></a>
    606 <a class="indexterm" name="id419747"></a>
    607 <a class="indexterm" name="id419754"></a>
    608 <a class="indexterm" name="id419760"></a>
    609 <a class="indexterm" name="id419767"></a>
    610 <a class="indexterm" name="id419774"></a>
    611 <a class="indexterm" name="id419781"></a>
    612 <a class="indexterm" name="id419788"></a>
    613 <a class="indexterm" name="id419794"></a>
    614 <a class="indexterm" name="id419801"></a>
    615 <a class="indexterm" name="id419808"></a>
    616 <a class="indexterm" name="id419815"></a>
     603<a class="indexterm" name="id393982"></a>
     604<a class="indexterm" name="id393989"></a>
     605<a class="indexterm" name="id393996"></a>
     606<a class="indexterm" name="id394002"></a>
     607<a class="indexterm" name="id394009"></a>
     608<a class="indexterm" name="id394016"></a>
     609<a class="indexterm" name="id394022"></a>
     610<a class="indexterm" name="id394029"></a>
     611<a class="indexterm" name="id394035"></a>
     612<a class="indexterm" name="id394042"></a>
     613<a class="indexterm" name="id394049"></a>
     614<a class="indexterm" name="id394056"></a>
     615<a class="indexterm" name="id394063"></a>
     616<a class="indexterm" name="id394069"></a>
     617<a class="indexterm" name="id394076"></a>
     618<a class="indexterm" name="id394083"></a>
    617619        CUPS can handle ASCII text, HP-GL, PDF, PostScript, DVI, and
    618620        many image formats (GIF, PNG, TIFF, JPEG, Photo-CD, SUN-Raster,
    619621        PNM, PBM, SGI-RGB, and more) and their associated MIME types
    620622        with its filters.
    621         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id419826"></a>MIME Type Conversion Rules</h3></div></div></div><p>
    622         <a class="indexterm" name="id419834"></a>
    623         <a class="indexterm" name="id419840"></a>
    624 <a class="indexterm" name="id419847"></a>
    625 <a class="indexterm" name="id419854"></a>
    626 <a class="indexterm" name="id419861"></a>
     623        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id394094"></a>MIME Type Conversion Rules</h3></div></div></div><p>
     624        <a class="indexterm" name="id394102"></a>
     625        <a class="indexterm" name="id394108"></a>
     626<a class="indexterm" name="id394115"></a>
     627<a class="indexterm" name="id394122"></a>
     628<a class="indexterm" name="id394129"></a>
    627629        CUPS reads the file <code class="filename">/etc/cups/mime.convs</code>
    628630        (and all other files named with a <code class="filename">*.convs</code>
     
    635637application/pdf         application/postscript   33   pdftops
    636638</pre><p>
    637 <a class="indexterm" name="id419888"></a>
     639<a class="indexterm" name="id394156"></a>
    638640        This means that the <em class="parameter"><code>pdftops</code></em> filter will take
    639641        <em class="parameter"><code>application/pdf</code></em> as input and produce
     
    641643        cost of this operation is 33 CUPS-$. The next filter is more
    642644        expensive, costing 66 CUPS-$:
    643         <a class="indexterm" name="id419914"></a>
     645        <a class="indexterm" name="id394182"></a>
    644646</p><pre class="programlisting">
    645647application/vnd.hp-HPGL application/postscript   66   hpgltops
    646648</pre><p>
    647 <a class="indexterm" name="id419927"></a>
     649<a class="indexterm" name="id394195"></a>
    648650        This is the <em class="parameter"><code>hpgltops</code></em>, which processes HP-GL
    649651        plotter files to PostScript.
    650         <a class="indexterm" name="id419940"></a>
     652        <a class="indexterm" name="id394208"></a>
    651653</p><pre class="programlisting">
    652654application/octet-stream
    653655</pre><p>
    654656        Here are two more examples:
    655         <a class="indexterm" name="id419953"></a>
    656 <a class="indexterm" name="id419960"></a>
    657 <a class="indexterm" name="id419967"></a>
    658 <a class="indexterm" name="id419974"></a>
     657        <a class="indexterm" name="id394222"></a>
     658<a class="indexterm" name="id394228"></a>
     659<a class="indexterm" name="id394235"></a>
     660<a class="indexterm" name="id394242"></a>
    659661</p><pre class="programlisting">
    660662application/x-shell     application/postscript   33    texttops
    661663text/plain              application/postscript   33    texttops
    662664</pre><p>
    663 <a class="indexterm" name="id419987"></a>
     665<a class="indexterm" name="id394255"></a>
    664666        The last two examples name the <em class="parameter"><code>texttops</code></em> filter to work on
    665667        <em class="parameter"><code>text/plain</code></em> as well as on <em class="parameter"><code>application/x-shell</code></em>. (Hint: This
    666668        differentiation is needed for the syntax highlighting feature of <em class="parameter"><code>texttops</code></em>).
    667         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420021"></a>Filtering  Overview</h3></div></div></div><p>
    668         <a class="indexterm" name="id420029"></a>
     669        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id394289"></a>Filtering  Overview</h3></div></div></div><p>
     670        <a class="indexterm" name="id394297"></a>
    669671        There are many more combinations named in <code class="filename">mime.convs</code>. However, you are not limited to use
    670672        the ones predefined there. You can plug in any filter you like to the CUPS framework. It must meet, or must be
     
    672674        sure it complies with what CUPS needs and put in the right lines in <code class="filename">mime.types</code> and
    673675        <code class="filename">mime.convs</code>; then it will work seamlessly inside CUPS.
    674         </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id420058"></a>Filter Requirements</h4></div></div></div><p>
     676        </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id394326"></a>Filter Requirements</h4></div></div></div><p>
    675677        The &#8220;<span class="quote">CUPS requirements</span>&#8221; for filters are simple. Take filenames or <code class="filename">stdin</code> as
    676678        input and write to <code class="filename">stdout</code>. They should take these arguments:
     
    688690                        The job options.
    689691                        </p></dd><dt><span class="term">filename</span></dt><dd><p>
    690                         (optionally) The print request file (if missing, filters expected data
     692                        (optionally) The print request file (if missing, filters expect data
    691693                        fed through <code class="filename">stdin</code>). In most cases, it is easy to
    692694                        write a simple wrapper script around existing filters to make them work with CUPS.
    693                         </p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420169"></a>Prefilters</h3></div></div></div><p>
    694         <a class="indexterm" name="id420177"></a>
    695 <a class="indexterm" name="id420184"></a>
    696 <a class="indexterm" name="id420191"></a>
     695                        </p></dd></dl></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id394437"></a>Prefilters</h3></div></div></div><p>
     696        <a class="indexterm" name="id394445"></a>
     697<a class="indexterm" name="id394452"></a>
     698<a class="indexterm" name="id394459"></a>
    697699        As previously stated, PostScript is the central file format to any UNIX-based
    698700        printing system. From PostScript, CUPS generates raster data to feed
    699701        non-PostScript printers.
    700702        </p><p>
    701 <a class="indexterm" name="id420202"></a>
    702 <a class="indexterm" name="id420209"></a>
    703 <a class="indexterm" name="id420216"></a>
    704 <a class="indexterm" name="id420223"></a>
    705 <a class="indexterm" name="id420229"></a>
    706 <a class="indexterm" name="id420236"></a>
    707 <a class="indexterm" name="id420242"></a>
    708 <a class="indexterm" name="id420249"></a>
    709 <a class="indexterm" name="id420256"></a>
    710 <a class="indexterm" name="id420263"></a>
     703<a class="indexterm" name="id394470"></a>
     704<a class="indexterm" name="id394477"></a>
     705<a class="indexterm" name="id394484"></a>
     706<a class="indexterm" name="id394491"></a>
     707<a class="indexterm" name="id394497"></a>
     708<a class="indexterm" name="id394504"></a>
     709<a class="indexterm" name="id394511"></a>
     710<a class="indexterm" name="id394517"></a>
     711<a class="indexterm" name="id394524"></a>
     712<a class="indexterm" name="id394531"></a>
    711713        But what happens if you send one of the supported non-PS formats to print? Then CUPS runs
    712714        &#8220;<span class="quote">prefilters</span>&#8221; on these input formats to generate PostScript first. There are prefilters to create
     
    718720        the print options already embedded into the file. This is shown in <a class="link" href="CUPS-printing.html#4small" title="Figure 22.4. Prefiltering in CUPS to Form PostScript.">Prefiltering in
    719721        CUPS to Form PostScript</a>.
    720         </p><div class="figure"><a name="4small"></a><p class="title"><b>Figure 22.4. Prefiltering in CUPS to Form PostScript.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/4small.png" width="135" alt="Prefiltering in CUPS to Form PostScript."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420346"></a>pstops</h3></div></div></div><p>
    721 <a class="indexterm" name="id420354"></a>
    722 <a class="indexterm" name="id420361"></a>
    723 <a class="indexterm" name="id420368"></a>
    724 <a class="indexterm" name="id420375"></a>
    725 <a class="indexterm" name="id420381"></a>
    726 <a class="indexterm" name="id420388"></a>
    727 <a class="indexterm" name="id420395"></a>
     722        </p><div class="figure"><a name="4small"></a><p class="title"><b>Figure 22.4. Prefiltering in CUPS to Form PostScript.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/4small.png" width="135" alt="Prefiltering in CUPS to Form PostScript."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id394614"></a>pstops</h3></div></div></div><p>
     723<a class="indexterm" name="id394622"></a>
     724<a class="indexterm" name="id394629"></a>
     725<a class="indexterm" name="id394636"></a>
     726<a class="indexterm" name="id394643"></a>
     727<a class="indexterm" name="id394650"></a>
     728<a class="indexterm" name="id394656"></a>
     729<a class="indexterm" name="id394663"></a>
    728730        <span class="emphasis"><em>pstops</em></span> is a filter that is used to convert <em class="parameter"><code>application/postscript</code></em> to
    729731        <em class="parameter"><code>application/vnd.cups-postscript</code></em>. As stated earlier, this filter inserts all
     
    741743                </p></li><li><p>Counting the pages of the job to insert the accounting
    742744                information into the <code class="filename">/var/log/cups/page_log</code>.
    743                 </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420506"></a>pstoraster</h3></div></div></div><p>
    744 <a class="indexterm" name="id420514"></a>
    745 <a class="indexterm" name="id420520"></a>
    746 <a class="indexterm" name="id420527"></a>
     745                </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id394774"></a>pstoraster</h3></div></div></div><p>
     746<a class="indexterm" name="id394782"></a>
     747<a class="indexterm" name="id394788"></a>
     748<a class="indexterm" name="id394795"></a>
    747749        <em class="parameter"><code>pstoraster</code></em> is at the core of the CUPS filtering system. It is responsible for the first
    748750        stage of the rasterization process. Its input is of MIME type application/vnd.cups-postscript; its output is
     
    752754        Intermediate Raster Format diagram</a>.
    753755        </p><div class="figure"><a name="cups-raster"></a><p class="title"><b>Figure 22.6. PostScript to Intermediate Raster Format.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/6small.png" width="135" alt="PostScript to Intermediate Raster Format."></div></div></div><br class="figure-break"><p>
    754 <a class="indexterm" name="id420598"></a>
    755 <a class="indexterm" name="id420605"></a>
    756 <a class="indexterm" name="id420612"></a>
    757 <a class="indexterm" name="id420619"></a>
     756<a class="indexterm" name="id394867"></a>
     757<a class="indexterm" name="id394873"></a>
     758<a class="indexterm" name="id394880"></a>
     759<a class="indexterm" name="id394887"></a>
    758760        CUPS raster is a generic raster format with powerful features. It is able to include per-page information,
    759761        color profiles, and more, to be used by the downstream raster drivers. Its MIME type is registered with IANA
     
    765767        Ghostscript illustration</a>.
    766768        </p><div class="figure"><a name="cups-raster2"></a><p class="title"><b>Figure 22.7. CUPS-Raster Production Using Ghostscript.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/7small.png" alt="CUPS-Raster Production Using Ghostscript."></div></div></div><br class="figure-break"><p>
    767 <a class="indexterm" name="id420684"></a>
    768 <a class="indexterm" name="id420691"></a>
    769 <a class="indexterm" name="id420697"></a>
    770 <a class="indexterm" name="id420704"></a>
     769<a class="indexterm" name="id394952"></a>
     770<a class="indexterm" name="id394959"></a>
     771<a class="indexterm" name="id394966"></a>
     772<a class="indexterm" name="id394972"></a>
    771773        CUPS versions before version 1.1.15 shipped a binary (or source code) standalone filter, named
    772774        <em class="parameter"><code>pstoraster</code></em>. <em class="parameter"><code>pstoraster</code></em>, which was derived from GNU Ghostscript
     
    779781        If your Ghostscript fails when this command is executed: <code class="literal">gs -h |grep cups</code>, you might not
    780782        be able to print, update your Ghostscript.
    781         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420757"></a>imagetops and imagetoraster</h3></div></div></div><p>
    782 <a class="indexterm" name="id420765"></a>
    783 <a class="indexterm" name="id420772"></a>
     783        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id395025"></a>imagetops and imagetoraster</h3></div></div></div><p>
     784<a class="indexterm" name="id395033"></a>
     785<a class="indexterm" name="id395040"></a>
    784786        In the section about prefilters, we mentioned the prefilter
    785787        that generates PostScript from image formats. The <em class="parameter"><code>imagetoraster</code></em>
     
    788790        mentioned prefilters. We summarize in a flowchart the image file
    789791        filtering in <a class="link" href="CUPS-printing.html#small8" title="Figure 22.8. Image Format to CUPS-Raster Format Conversion.">the Image Format to CUPS-Raster Format Conversion illustration</a>.
    790         </p><div class="figure"><a name="small8"></a><p class="title"><b>Figure 22.8. Image Format to CUPS-Raster Format Conversion.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/8small.png" alt="Image Format to CUPS-Raster Format Conversion."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id420837"></a>rasterto [printers specific]</h3></div></div></div><p>
    791 <a class="indexterm" name="id420845"></a>
    792 <a class="indexterm" name="id420852"></a>
    793 <a class="indexterm" name="id420858"></a>
    794 <a class="indexterm" name="id420865"></a>
    795 <a class="indexterm" name="id420872"></a>
    796 <a class="indexterm" name="id420879"></a>
    797 <a class="indexterm" name="id420886"></a>
    798 <a class="indexterm" name="id420892"></a>
    799 <a class="indexterm" name="id420899"></a>
    800 <a class="indexterm" name="id420906"></a>
    801 <a class="indexterm" name="id420913"></a>
     792        </p><div class="figure"><a name="small8"></a><p class="title"><b>Figure 22.8. Image Format to CUPS-Raster Format Conversion.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/8small.png" alt="Image Format to CUPS-Raster Format Conversion."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id395105"></a>rasterto [printers specific]</h3></div></div></div><p>
     793<a class="indexterm" name="id395113"></a>
     794<a class="indexterm" name="id395120"></a>
     795<a class="indexterm" name="id395126"></a>
     796<a class="indexterm" name="id395133"></a>
     797<a class="indexterm" name="id395140"></a>
     798<a class="indexterm" name="id395147"></a>
     799<a class="indexterm" name="id395154"></a>
     800<a class="indexterm" name="id395160"></a>
     801<a class="indexterm" name="id395167"></a>
     802<a class="indexterm" name="id395174"></a>
     803<a class="indexterm" name="id395181"></a>
    802804        CUPS ships with quite a variety of raster drivers for processing CUPS raster. On my system, I find in
    803805        /usr/lib/cups/filter/ the following: <em class="parameter"><code>rastertoalps</code></em>, <em class="parameter"><code>rastertobj</code></em>,
     
    807809        and <em class="parameter"><code>rastertoprinter</code></em>. Don't worry if you have fewer drivers than this; some of these are
    808810        installed by commercial add-ons to CUPS (like <em class="parameter"><code>rastertoturboprint</code></em>), and others (like
    809         <em class="parameter"><code>rastertoprinter</code></em>) by third-party driver development projects (such as Gimp-Print)
     811        <em class="parameter"><code>rastertoprinter</code></em>) by third-party driver development projects (such as Gutenprint)
    810812        wanting to cooperate as closely as possible with CUPS. See <a class="link" href="CUPS-printing.html#small9" title="Figure 22.9. Raster to Printer-Specific Formats.">the Raster to
    811813        Printer-Specific Formats illustration</a>.
    812         </p><div class="figure"><a name="small9"></a><p class="title"><b>Figure 22.9. Raster to Printer-Specific Formats.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/9small.png" alt="Raster to Printer-Specific Formats."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421049"></a>CUPS Backends</h3></div></div></div><p>
    813 <a class="indexterm" name="id421057"></a>
    814 <a class="indexterm" name="id421064"></a>
     814        </p><div class="figure"><a name="small9"></a><p class="title"><b>Figure 22.9. Raster to Printer-Specific Formats.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/9small.png" alt="Raster to Printer-Specific Formats."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id395317"></a>CUPS Backends</h3></div></div></div><p>
     815<a class="indexterm" name="id395325"></a>
     816<a class="indexterm" name="id395332"></a>
    815817        The last part of any CUPS filtering chain is a backend. Backends
    816818        are special programs that send the print-ready file to the final
     
    886888        printer name.)
    887889        </p><p>
    888 <a class="indexterm" name="id421315"></a>
    889 <a class="indexterm" name="id421322"></a>
     890<a class="indexterm" name="id395583"></a>
     891<a class="indexterm" name="id395590"></a>
    890892        Not all of the mentioned backends may be present on your system or
    891893        usable (depending on your hardware configuration). One test for all
     
    895897        </p><pre class="screen">
    896898        <code class="prompt">$ </code><strong class="userinput"><code>lpinfo -v</code></strong>
    897         </pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421357"></a>The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></h3></div></div></div><p>
    898         <a class="indexterm" name="id421369"></a>
    899         <a class="indexterm" name="id421376"></a>
    900 <a class="indexterm" name="id421383"></a>
    901 <a class="indexterm" name="id421390"></a>
    902 <a class="indexterm" name="id421396"></a>
     899        </pre></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id395625"></a>The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></h3></div></div></div><p>
     900        <a class="indexterm" name="id395637"></a>
     901        <a class="indexterm" name="id395644"></a>
     902<a class="indexterm" name="id395651"></a>
     903<a class="indexterm" name="id395658"></a>
     904<a class="indexterm" name="id395665"></a>
    903905        <em class="parameter"><code>cupsomatic</code></em> filters may be the most widely used on CUPS
    904906        installations. You must be clear that these were not
     
    920922        CUPS Web interface with a <em class="parameter"><code>foomatic</code></em> namepart for
    921923        the driver description. <em class="parameter"><code>cupsomatic</code></em> is a Perl script that runs
    922         Ghostscript with all the complicated command-line options
    923         autoconstructed from the selected PPD and command line options give to
     924        Ghostscript with all the complicated command line options
     925        autoconstructed from the selected PPD and command line options given to
    924926        the print job.
    925927        </p><p>
    926         <a class="indexterm" name="id421454"></a>
    927 <a class="indexterm" name="id421460"></a>
    928 <a class="indexterm" name="id421467"></a>
    929 <a class="indexterm" name="id421474"></a>
    930 <a class="indexterm" name="id421481"></a>
    931 <a class="indexterm" name="id421488"></a>
    932 <a class="indexterm" name="id421494"></a>
    933 <a class="indexterm" name="id421501"></a>
    934 <a class="indexterm" name="id421508"></a>
    935 <a class="indexterm" name="id421515"></a>
    936 <a class="indexterm" name="id421522"></a>
     928        <a class="indexterm" name="id395722"></a>
     929<a class="indexterm" name="id395729"></a>
     930<a class="indexterm" name="id395735"></a>
     931<a class="indexterm" name="id395742"></a>
     932<a class="indexterm" name="id395749"></a>
     933<a class="indexterm" name="id395756"></a>
     934<a class="indexterm" name="id395763"></a>
     935<a class="indexterm" name="id395769"></a>
     936<a class="indexterm" name="id395776"></a>
     937<a class="indexterm" name="id395783"></a>
     938<a class="indexterm" name="id395790"></a>
    937939        However, <em class="parameter"><code>cupsomatic</code></em> is now deprecated. Its PPDs (especially the first
    938940        generation of them, still in heavy use out there) are not meeting the
    939941        Adobe specifications. You might also suffer difficulties when you try
    940942        to download them with &#8220;<span class="quote">Point'n'Print</span>&#8221; to Windows clients. A better
    941         and more powerful successor is now in a stable beta-version: it is called <em class="parameter"><code>foomatic-rip</code></em>. To use
     943        and more powerful successor is now available: it is called <em class="parameter"><code>foomatic-rip</code></em>. To use
    942944        <em class="parameter"><code>foomatic-rip</code></em> as a filter with CUPS, you need the new type of PPDs, which
    943945        have a similar but different line:
     
    956958        legacy spoolers too (like LPRng, BSD-LPD, PDQ, PPR, and so on), providing
    957959        for them access to use PPDs for their printing.
    958         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421572"></a>The Complete Picture</h3></div></div></div><p>
     960        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id395840"></a>The Complete Picture</h3></div></div></div><p>
    959961        If you want to see an overview of all the filters and how they
    960962        relate to each other, the complete picture of the puzzle is at the end
    961963        of this chapter.
    962         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421583"></a><code class="filename">mime.convs</code></h3></div></div></div><p>
     964        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id395851"></a><code class="filename">mime.convs</code></h3></div></div></div><p>
    963965        CUPS autoconstructs all possible filtering chain paths for any given
    964966        MIME type and every printer installed. But how does it decide in
     
    970972        a total &#8220;<span class="quote">filter cost.</span>&#8221; CUPS decides for the most &#8220;<span class="quote">inexpensive</span>&#8221; route.
    971973        </p><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>
    972 <a class="indexterm" name="id421610"></a>
    973 <a class="indexterm" name="id421617"></a>
     974<a class="indexterm" name="id395878"></a>
     975<a class="indexterm" name="id395885"></a>
    974976        Setting <em class="parameter"><code>FilterLimit 1000</code></em> in
    975977        <code class="filename">cupsd.conf</code> will not allow more filters to
     
    979981        200 allows roughly one job at a time, while a FilterLimit of 1000 allows
    980982        approximately five jobs maximum at a time.
    981         </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421644"></a>&#8220;<span class="quote">Raw</span>&#8221; Printing</h3></div></div></div><p>
    982 <a class="indexterm" name="id421654"></a>
    983 <a class="indexterm" name="id421661"></a>
    984 <a class="indexterm" name="id421668"></a>
     983        </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id395912"></a>&#8220;<span class="quote">Raw</span>&#8221; Printing</h3></div></div></div><p>
     984<a class="indexterm" name="id395922"></a>
     985<a class="indexterm" name="id395929"></a>
     986<a class="indexterm" name="id395936"></a>
    985987        You can tell CUPS to print (nearly) any file &#8220;<span class="quote">raw</span>&#8221;. &#8220;<span class="quote">Raw</span>&#8221; means it will not be
    986988        filtered. CUPS will send the file to the printer &#8220;<span class="quote">as is</span>&#8221; without bothering if the printer is able
     
    10001002        only send known MIME types (as defined in its own mime.types file) and
    10011003        refuse others.
    1002         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id421744"></a>application/octet-stream Printing</h3></div></div></div><p>
    1003 <a class="indexterm" name="id421752"></a>
    1004 <a class="indexterm" name="id421759"></a>
     1004        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id396012"></a>application/octet-stream Printing</h3></div></div></div><p>
     1005<a class="indexterm" name="id396020"></a>
     1006<a class="indexterm" name="id396027"></a>
    10051007        Any MIME type with no rule in the <code class="filename">/etc/cups/mime.types</code> file is regarded as unknown
    10061008        or <em class="parameter"><code>application/octet-stream</code></em> and will not be
     
    10151017        these two files:
    10161018        </p><div class="itemizedlist"><ul type="disc"><li><p><code class="filename">/etc/cups/mime.convs</code></p></li><li><p><code class="filename">/etc/cups/mime.types</code></p></li></ul></div><p>
    1017 <a class="indexterm" name="id421820"></a>
     1019<a class="indexterm" name="id396088"></a>
    10181020        Both contain entries (at the end of the respective files) that must be uncommented to allow raw mode
    10191021        operation for <em class="parameter"><code>application/octet-stream</code></em>. In <code class="filename">/etc/cups/mime.types</code>
    10201022        make sure this line is present:
    1021         <a class="indexterm" name="id421840"></a>
     1023        <a class="indexterm" name="id396108"></a>
    10221024</p><pre class="programlisting">
    10231025application/octet-stream
     
    10301032application/octet-stream   application/vnd.cups-raw   0   -
    10311033</pre><p>
    1032         <a class="indexterm" name="id421872"></a>
     1034        <a class="indexterm" name="id396140"></a>
    10331035        This line tells CUPS to use the <span class="emphasis"><em>Null Filter</em></span>
    10341036        (denoted as &#8220;<span class="quote">-</span>&#8221;, doing nothing at all) on
     
    10411043        <span class="emphasis"><em>enforce</em></span> &#8220;<span class="quote">raw</span>&#8221; printing, it only <span class="emphasis"><em>allows</em></span> it.
    10421044        </p></div><p><b>Background. </b>
    1043 <a class="indexterm" name="id421936"></a>
    1044 <a class="indexterm" name="id421943"></a>
    1045 <a class="indexterm" name="id421950"></a>
    1046 <a class="indexterm" name="id421956"></a>
     1045<a class="indexterm" name="id396204"></a>
     1046<a class="indexterm" name="id396211"></a>
     1047<a class="indexterm" name="id396218"></a>
     1048<a class="indexterm" name="id396224"></a>
    10471049        That CUPS is a more security-aware printing system than traditional ones
    10481050        does not by default allow one to send deliberate (possibly binary)
     
    10561058        recognizes MIME types. The file <code class="filename">/etc/cups/mime.convs</code> decides which file
    10571059        conversion filter(s) may be applied to which MIME types.
    1058         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id422005"></a>PostScript Printer Descriptions for Non-PostScript Printers</h3></div></div></div><p>
    1059         <a class="indexterm" name="id422013"></a>
    1060 <a class="indexterm" name="id422020"></a>
    1061 <a class="indexterm" name="id422026"></a>
    1062 <a class="indexterm" name="id422033"></a>
    1063 <a class="indexterm" name="id422040"></a>
    1064 <a class="indexterm" name="id422046"></a>
     1060        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id396273"></a>PostScript Printer Descriptions for Non-PostScript Printers</h3></div></div></div><p>
     1061        <a class="indexterm" name="id396281"></a>
     1062<a class="indexterm" name="id396288"></a>
     1063<a class="indexterm" name="id396294"></a>
     1064<a class="indexterm" name="id396301"></a>
     1065<a class="indexterm" name="id396308"></a>
     1066<a class="indexterm" name="id396314"></a>
    10651067        Originally PPDs were meant to be used for PostScript printers
    10661068        only. Here, they help to send device-specific commands and settings
     
    10751077        PPDs for a non-PostScript printer have a few lines that are unique to
    10761078        CUPS. The most important one looks similar to this:
    1077         <a class="indexterm" name="id422063"></a>
     1079        <a class="indexterm" name="id396331"></a>
    10781080</p><pre class="programlisting">
    10791081*cupsFilter: application/vnd.cups-raster  66   rastertoprinter
     
    10851087        delivers as its last output the specified MIME type. This is then
    10861088        taken as input to the specified <em class="parameter"><code>rastertoprinter</code></em> filter. After
    1087         the last filter has done its work (<em class="parameter"><code>rastertoprinter</code></em> is a Gimp-Print
     1089        the last filter has done its work (<em class="parameter"><code>rastertoprinter</code></em> is a Gutenprint
    10881090        filter), the file should go to the backend, which sends it to the
    10891091        output device.
     
    10931095        different paper trays, or you may get larger margins than your
    10941096        specific model supports. See Table 21.1<a class="link" href="CUPS-printing.html#cups-ppds" title="Table 22.1. PPDs Shipped with CUPS">&#8220;PPDs Shipped with CUPS&#8221;</a> for summary information.
    1095         </p><div class="table"><a name="cups-ppds"></a><p class="title"><b>Table 22.1. PPDs Shipped with CUPS</b></p><div class="table-contents"><table summary="PPDs Shipped with CUPS" border="1"><colgroup><col align="left"><col align="justify"></colgroup><thead><tr><th align="left">PPD file</th><th align="justify">Printer type</th></tr></thead><tbody><tr><td align="left">deskjet.ppd</td><td align="justify">older HP inkjet printers and compatible</td></tr><tr><td align="left">deskjet2.ppd</td><td align="justify">newer HP inkjet printers and compatible </td></tr><tr><td align="left">dymo.ppd</td><td align="justify">label printers </td></tr><tr><td align="left">epson9.ppd</td><td align="justify">Epson 24-pin impact printers and compatible </td></tr><tr><td align="left">epson24.ppd</td><td align="justify">Epson 24-pin impact printers and compatible </td></tr><tr><td align="left">okidata9.ppd</td><td align="justify">Okidata 9-pin impact printers and compatible </td></tr><tr><td align="left">okidat24.ppd</td><td align="justify">Okidata 24-pin impact printers and compatible </td></tr><tr><td align="left">stcolor.ppd</td><td align="justify">older Epson Stylus Color printers </td></tr><tr><td align="left">stcolor2.ppd</td><td align="justify">newer Epson Stylus Color printers </td></tr><tr><td align="left">stphoto.ppd</td><td align="justify">older Epson Stylus Photo printers </td></tr><tr><td align="left">stphoto2.ppd</td><td align="justify">newer Epson Stylus Photo printers </td></tr><tr><td align="left">laserjet.ppd</td><td align="justify">all PCL printers </td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id422269"></a><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</h3></div></div></div><p>
    1096         <a class="indexterm" name="id422282"></a>
    1097         <a class="indexterm" name="id422289"></a>
     1097        </p><div class="table"><a name="cups-ppds"></a><p class="title"><b>Table 22.1. PPDs Shipped with CUPS</b></p><div class="table-contents"><table summary="PPDs Shipped with CUPS" border="1"><colgroup><col align="left"><col align="justify"></colgroup><thead><tr><th align="left">PPD file</th><th align="justify">Printer type</th></tr></thead><tbody><tr><td align="left">deskjet.ppd</td><td align="justify">older HP inkjet printers and compatible</td></tr><tr><td align="left">deskjet2.ppd</td><td align="justify">newer HP inkjet printers and compatible </td></tr><tr><td align="left">dymo.ppd</td><td align="justify">label printers </td></tr><tr><td align="left">epson9.ppd</td><td align="justify">Epson 24-pin impact printers and compatible </td></tr><tr><td align="left">epson24.ppd</td><td align="justify">Epson 24-pin impact printers and compatible </td></tr><tr><td align="left">okidata9.ppd</td><td align="justify">Okidata 9-pin impact printers and compatible </td></tr><tr><td align="left">okidat24.ppd</td><td align="justify">Okidata 24-pin impact printers and compatible </td></tr><tr><td align="left">stcolor.ppd</td><td align="justify">older Epson Stylus Color printers </td></tr><tr><td align="left">stcolor2.ppd</td><td align="justify">newer Epson Stylus Color printers </td></tr><tr><td align="left">stphoto.ppd</td><td align="justify">older Epson Stylus Photo printers </td></tr><tr><td align="left">stphoto2.ppd</td><td align="justify">newer Epson Stylus Photo printers </td></tr><tr><td align="left">laserjet.ppd</td><td align="justify">all PCL printers </td></tr></tbody></table></div></div><br class="table-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id396537"></a><span class="emphasis"><em>cupsomatic/foomatic-rip</em></span> Versus <span class="emphasis"><em>Native CUPS</em></span> Printing</h3></div></div></div><p>
     1098        <a class="indexterm" name="id396550"></a>
     1099        <a class="indexterm" name="id396557"></a>
    10981100        Native CUPS rasterization works in two steps:
    10991101        </p><div class="itemizedlist"><ul type="disc"><li><p>
    1100 <a class="indexterm" name="id422303"></a>
     1102<a class="indexterm" name="id396571"></a>
    11011103                First is the <em class="parameter"><code>pstoraster</code></em> step. It uses the special CUPS
    1102                 <a class="indexterm" name="id422316"></a>
     1104                <a class="indexterm" name="id396584"></a>
    11031105                device from ESP Ghostscript 7.05.x as its tool.
    11041106                </p></li><li><p>
     
    11151117        way. Note that <em class="parameter"><code>cupsomatic</code></em> is <span class="emphasis"><em>not</em></span> made by the CUPS
    11161118        developers. It is an independent contribution to printing development,
    1117         made by people from Linuxprinting.org.<sup>[<a name="id422411" href="#ftn.id422411" class="footnote">6</a>]</sup>
     1119        made by people from Linuxprinting.org.<sup>[<a name="id396679" href="#ftn.id396679" class="footnote">6</a>]</sup>
    11181120        <em class="parameter"><code>cupsomatic</code></em> is no longer developed, maintained, or supported. It now been
    11191121        replaced by <em class="parameter"><code>foomatic-rip</code></em>. <em class="parameter"><code>foomatic-rip</code></em> is a complete rewrite
     
    11231125        too.
    11241126        </p><p>
    1125         <a class="indexterm" name="id422457"></a>
    1126         <a class="indexterm" name="id422464"></a>
     1127        <a class="indexterm" name="id396725"></a>
     1128        <a class="indexterm" name="id396732"></a>
    11271129        Like the old <em class="parameter"><code>cupsomatic</code></em> method, the <em class="parameter"><code>foomatic-rip</code></em> (new) method
    11281130        from Linuxprinting.org uses the traditional Ghostscript print file processing, doing everything in a single
     
    11341136        different queues) and find out which works best for you.
    11351137        </p><p>
    1136 <a class="indexterm" name="id422494"></a>
    1137 <a class="indexterm" name="id422501"></a>
    1138 <a class="indexterm" name="id422508"></a>
    1139 <a class="indexterm" name="id422515"></a>
    1140 <a class="indexterm" name="id422522"></a>
    1141 <a class="indexterm" name="id422528"></a>
     1138<a class="indexterm" name="id396762"></a>
     1139<a class="indexterm" name="id396769"></a>
     1140<a class="indexterm" name="id396776"></a>
     1141<a class="indexterm" name="id396783"></a>
     1142<a class="indexterm" name="id396790"></a>
     1143<a class="indexterm" name="id396796"></a>
    11421144        <em class="parameter"><code>cupsomatic</code></em> kidnaps the print file after the
    11431145        <em class="parameter"><code>application/vnd.cups-postscript</code></em> stage and deviates it through the CUPS-external,
     
    11481150        CUPS</a>, illustrates the difference between native CUPS rendering and the
    11491151        <em class="parameter"><code>Foomatic/cupsomatic</code></em> method.
    1150         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id422583"></a>Examples for Filtering Chains</h3></div></div></div><p>
     1152        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id396851"></a>Examples for Filtering Chains</h3></div></div></div><p>
    11511153        Here are a few examples of commonly occurring filtering chains to
    11521154        illustrate the workings of CUPS.
    11531155        </p><p>
    1154 <a class="indexterm" name="id422595"></a>
    1155 <a class="indexterm" name="id422602"></a>
    1156 <a class="indexterm" name="id422609"></a>
    1157 <a class="indexterm" name="id422615"></a>
     1156<a class="indexterm" name="id396863"></a>
     1157<a class="indexterm" name="id396870"></a>
     1158<a class="indexterm" name="id396877"></a>
     1159<a class="indexterm" name="id396883"></a>
    11581160        Assume you want to print a PDF file to an HP JetDirect-connected
    11591161        PostScript printer, but you want to print pages 3-5, 7, and 11-13
     
    11651167        MIME type <em class="parameter"><code>application/postscript</code></em> (a preview here
    11661168        would still show all pages of the original PDF).</p></li><li><p>The file then passes the <em class="parameter"><code>pstops</code></em>
    1167         filter that applies the command-line options: it selects pages
     1169        filter that applies the command line options: it selects pages
    11681170        2-5, 7, and 11-13, creates the imposed layout &#8220;<span class="quote">two pages on one sheet</span>&#8221;, and
    11691171        inserts the correct &#8220;<span class="quote">duplex</span>&#8221; command (as defined in the printer's
     
    11741176        The resulting filter chain, therefore, is as shown in <a class="link" href="CUPS-printing.html#pdftosocket" title="Figure 22.11. PDF to Socket Chain.">the PDF to socket chain
    11751177        illustration</a>.
    1176         </p><a class="indexterm" name="id422717"></a><div class="figure"><a name="pdftosocket"></a><p class="title"><b>Figure 22.11. PDF to Socket Chain.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/pdftosocket.png" alt="PDF to Socket Chain."></div></div></div><br class="figure-break"><p>
    1177 <a class="indexterm" name="id422765"></a>
    1178 <a class="indexterm" name="id422772"></a>
    1179 <a class="indexterm" name="id422779"></a>
     1178        </p><a class="indexterm" name="id396985"></a><div class="figure"><a name="pdftosocket"></a><p class="title"><b>Figure 22.11. PDF to Socket Chain.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/pdftosocket.png" alt="PDF to Socket Chain."></div></div></div><br class="figure-break"><p>
     1179<a class="indexterm" name="id397033"></a>
     1180<a class="indexterm" name="id397040"></a>
     1181<a class="indexterm" name="id397047"></a>
    11801182        Assume you want to print the same filter to an USB-connected Epson Stylus Photo Printer installed with the CUPS
    11811183        <code class="filename">stphoto2.ppd</code>. The first few filtering stages are nearly the same:
     
    11871189                <em class="parameter"><code>application/pdf</code></em>.
    11881190                </p></li><li><p>
    1189 <a class="indexterm" name="id422816"></a>
    1190 <a class="indexterm" name="id422823"></a>
     1191<a class="indexterm" name="id397084"></a>
     1192<a class="indexterm" name="id397091"></a>
    11911193                The file must first pass the <em class="parameter"><code>pdftops</code></em> prefilter, which produces PostScript
    11921194                MIME type <em class="parameter"><code>application/postscript</code></em> (a preview here would still show all
    11931195                pages of the original PDF).
    11941196                </p></li><li><p>
    1195 <a class="indexterm" name="id422846"></a>
    1196 <a class="indexterm" name="id422853"></a>
     1197<a class="indexterm" name="id397114"></a>
     1198<a class="indexterm" name="id397121"></a>
    11971199                The file then passes the &#8220;<span class="quote">pstops</span>&#8221; filter that applies
    1198                 the command-line options: it selects the pages 2-5, 7, and 11-13,
     1200                the command line options: it selects the pages 2-5, 7, and 11-13,
    11991201                creates the imposed layout &#8220;<span class="quote">two pages on one sheet,</span>&#8221; and inserts the
    12001202                correct &#8220;<span class="quote">duplex</span>&#8221; command (oops  this printer and PPD
     
    12061208                <em class="parameter"><code>application/cups-raster</code></em>.
    12071209                </p></li><li><p>
    1208 <a class="indexterm" name="id422904"></a>
     1210<a class="indexterm" name="id397172"></a>
    12091211                Finally, the <em class="parameter"><code>rastertoepson</code></em> filter
    12101212                does its work (as indicated in the printer's PPD), creating the
     
    12161218        The resulting filter chain therefore is as shown in <a class="link" href="CUPS-printing.html#pdftoepsonusb" title="Figure 22.12. PDF to USB Chain.">the PDF to USB Chain
    12171219        illustration</a>.
    1218         </p><div class="figure"><a name="pdftoepsonusb"></a><p class="title"><b>Figure 22.12. PDF to USB Chain.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/pdftoepsonusb.png" alt="PDF to USB Chain."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id422984"></a>Sources of CUPS Drivers/PPDs</h3></div></div></div><p>
     1220        </p><div class="figure"><a name="pdftoepsonusb"></a><p class="title"><b>Figure 22.12. PDF to USB Chain.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/pdftoepsonusb.png" alt="PDF to USB Chain."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397252"></a>Sources of CUPS Drivers/PPDs</h3></div></div></div><p>
    12191221        On the Internet you can now find many thousands of CUPS-PPD files
    12201222        (with their companion filters), in many national languages
    12211223        supporting more than 1,000 non-PostScript models.
    1222         </p><div class="itemizedlist"><a class="indexterm" name="id422997"></a><a class="indexterm" name="id423006"></a><ul type="disc"><li><p>
     1224        </p><div class="itemizedlist"><a class="indexterm" name="id397265"></a><a class="indexterm" name="id397274"></a><ul type="disc"><li><p>
    12231225                <a class="ulink" href="http://www.easysw.com/printpro/" target="_top">ESP PrintPro</a>
    12241226                (commercial, non-free) is packaged with more than 3,000 PPDs, ready for
     
    12291231                CUPS, as they feed their creators).
    12301232                </p></li><li><p>
    1231                 The <a class="ulink" href="http://gimp-print.sourceforge.net/" target="_top">Gimp-Print Project</a>
     1233                The <a class="ulink" href="http://gimp-print.sourceforge.net/" target="_top">Gutenprint Project</a>
    12321234                (GPL, free software) provides around 140 PPDs (supporting nearly 400 printers, many driven
    1233                 to photo quality output), to be used alongside the Gimp-Print CUPS filters.
     1235                to photo quality output), to be used alongside the Gutenprint CUPS filters.
    12341236                </p></li><li><p>
    12351237                <a class="ulink" href="http://www.turboprint.de/english.html/" target="_top">TurboPrint </a> (shareware, non-free) supports
     
    12471249                <a class="ulink" href="http://www.linuxprinting.org/" target="_top">Foomatic/cupsomatic </a>
    12481250                (LPGL, free) from Linuxprinting.org provide PPDs for practically every Ghostscript
    1249                 filter known to the world (including Omni, Gimp-Print, and HPIJS).
    1250                 </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423093"></a>Printing with Interface Scripts</h3></div></div></div><p>
    1251 <a class="indexterm" name="id423101"></a>
    1252 <a class="indexterm" name="id423108"></a>
     1251                filter known to the world (including Omni, Gutenprint, and HPIJS).
     1252                </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397361"></a>Printing with Interface Scripts</h3></div></div></div><p>
     1253<a class="indexterm" name="id397369"></a>
     1254<a class="indexterm" name="id397376"></a>
    12531255        CUPS also supports the use of &#8220;<span class="quote">interface scripts</span>&#8221; as known from
    12541256        System V AT&amp;T printing systems. These are often used for PCL
     
    12721274        <a class="ulink" href="http://playground.sun.com/printing/documentation/interface.html" target="_top">
    12731275        http://playground.sun.com/printing/documentation/interface.html</a>).
    1274         </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id423172"></a>Network Printing (Purely Windows)</h2></div></div></div><p>
     1276        </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id397440"></a>Network Printing (Purely Windows)</h2></div></div></div><p>
    12751277Network printing covers a lot of ground. To understand what exactly
    12761278goes on with Samba when it is printing on behalf of its Windows
    12771279clients, let's first look at a &#8220;<span class="quote">purely Windows</span>&#8221; setup: Windows clients
    12781280with a Windows NT print server.
    1279 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423186"></a>From Windows Clients to an NT Print Server</h3></div></div></div><p>
     1281</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397454"></a>From Windows Clients to an NT Print Server</h3></div></div></div><p>
    12801282Windows clients printing to an NT-based print server have two
    12811283options. They may:
    1282 <a class="indexterm" name="id423195"></a>
    1283 <a class="indexterm" name="id423202"></a>
     1284<a class="indexterm" name="id397463"></a>
     1285<a class="indexterm" name="id397470"></a>
    12841286</p><div class="itemizedlist"><ul type="disc"><li><p>Execute the driver locally and render the GDI output
    12851287                        (EMF) into the printer-specific format on their own.
     
    12901292Print Driver Execution on the Client</a>, and
    12911293<a class="link" href="CUPS-printing.html#small12" title="Figure 22.14. Print Driver Execution on the Server.">Print Driver Execution on the Server</a>.
    1292 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423245"></a>Driver Execution on the Client</h3></div></div></div><p>
     1294</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397513"></a>Driver Execution on the Client</h3></div></div></div><p>
    12931295In the first case, the print server must spool the file as raw, meaning it shouldn't touch the job file and try
    12941296to convert it in any way. This is what a traditional UNIX-based print server can do too, and at a better
     
    12981300installed on the clients. This is illustrated in <a class="link" href="CUPS-printing.html#small11" title="Figure 22.13. Print Driver Execution on the Client.">the Print Driver Execution on the
    12991301Client diagram</a>.
    1300 </p><div class="figure"><a name="small11"></a><p class="title"><b>Figure 22.13. Print Driver Execution on the Client.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/11small.png" alt="Print Driver Execution on the Client."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423310"></a>Driver Execution on the Server</h3></div></div></div><p>
    1301 <a class="indexterm" name="id423318"></a>
    1302 <a class="indexterm" name="id423325"></a>
    1303 <a class="indexterm" name="id423331"></a>
    1304 <a class="indexterm" name="id423338"></a>
    1305 <a class="indexterm" name="id423344"></a>
     1302</p><div class="figure"><a name="small11"></a><p class="title"><b>Figure 22.13. Print Driver Execution on the Client.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/11small.png" alt="Print Driver Execution on the Client."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397578"></a>Driver Execution on the Server</h3></div></div></div><p>
     1303<a class="indexterm" name="id397586"></a>
     1304<a class="indexterm" name="id397593"></a>
     1305<a class="indexterm" name="id397599"></a>
     1306<a class="indexterm" name="id397606"></a>
     1307<a class="indexterm" name="id397612"></a>
    13061308The other path executes the printer driver on the server. The client transfers print files in EMF format to
    13071309the server. The server uses the PostScript, PCL, ESC/P, or other driver to convert the EMF file into the
     
    13111313</p><div class="figure"><a name="small12"></a><p class="title"><b>Figure 22.14. Print Driver Execution on the Server.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/12small.png" alt="Print Driver Execution on the Server."></div></div></div><br class="figure-break"><p>
    13121314However, something similar is possible with CUPS, so read on.
    1313 </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id423409"></a>Network Printing (Windows Clients and UNIX/Samba Print
     1315</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id397677"></a>Network Printing (Windows Clients and UNIX/Samba Print
    13141316Servers)</h2></div></div></div><p>
    13151317Since UNIX print servers <span class="emphasis"><em>cannot</em></span> execute the Win32
     
    13181320much. On the contrary, you may have a way here to implement printing
    13191321features that are not possible otherwise.
    1320 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423425"></a>From Windows Clients to a CUPS/Samba Print Server</h3></div></div></div><p>
     1322</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397693"></a>From Windows Clients to a CUPS/Samba Print Server</h3></div></div></div><p>
    13211323Here is a simple recipe showing how you can take advantage of CUPS's
    13221324powerful features for the benefit of your Windows network printing
     
    13301332First, to enable CUPS-based printing through Samba, the following options should be set in your <code class="filename">smb.conf</code>
    13311333file <em class="parameter"><code>[global]</code></em> section:
    1332 </p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id423474"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id423486"></a><em class="parameter"><code>printcap = cups</code></em></td></tr></table><p>
     1334</p><table class="simplelist" border="0" summary="Simple list"><tr><td><a class="indexterm" name="id397742"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id397754"></a><em class="parameter"><code>printcap = cups</code></em></td></tr></table><p>
    13331335When these parameters are specified, all manually set print directives (like <a class="link" href="smb.conf.5.html#PRINTCOMMAND">print command</a> or <a class="link" href="smb.conf.5.html#LPPAUSECOMMAND">lppause command</a>) in <code class="filename">smb.conf</code> (as well as in Samba itself) will be
    13341336ignored. Instead, Samba will directly interface with CUPS through its application program interface (API), as
     
    13381340commands to work with a Samba server that has CUPS support compiled in, simply use <a class="link" href="smb.conf.5.html#CLASSICALPRINTING">classicalprinting = sysv</a>). This is illustrated in <a class="link" href="CUPS-printing.html#13small" title="Figure 22.15. Printing via CUPS/Samba Server.">the Printing via
    13391341CUPS/Samba Server diagram</a>.
    1340 </p><div class="figure"><a name="13small"></a><p class="title"><b>Figure 22.15. Printing via CUPS/Samba Server.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/13small.png" alt="Printing via CUPS/Samba Server."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423600"></a>Samba Receiving Job-Files and Passing Them to CUPS</h3></div></div></div><p>
     1342</p><div class="figure"><a name="13small"></a><p class="title"><b>Figure 22.15. Printing via CUPS/Samba Server.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/13small.png" alt="Printing via CUPS/Samba Server."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id397868"></a>Samba Receiving Job-Files and Passing Them to CUPS</h3></div></div></div><p>
    13411343Samba <span class="emphasis"><em>must</em></span> use its own spool directory (it is set by a line similar to <a class="link" href="smb.conf.5.html#PATH">path = /var/spool/samba</a>, in the <em class="parameter"><code>[printers]</code></em> or <em class="parameter"><code>[printername]</code></em> section of <code class="filename">smb.conf</code>). Samba receives the job in its own spool space and passes it
    13421344into the spool directory of CUPS (the CUPS spool directory is set by the <em class="parameter"><code>RequestRoot</code></em>
     
    13501352allow &#8220;<span class="quote">localhost</span>&#8221; to print. If it runs on different machines, you
    13511353need to make sure the Samba host gets access to printing on CUPS.
    1352 </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id423671"></a>Network PostScript RIP</h2></div></div></div><p>
     1354</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id397939"></a>Network PostScript RIP</h2></div></div></div><p>
    13531355This section discusses the use of CUPS filters on the server  configuration where
    13541356clients make use of a PostScript driver with CUPS-PPDs.
    13551357</p><p>
    1356 <a class="indexterm" name="id423686"></a>
    1357 <a class="indexterm" name="id423693"></a>
    1358 <a class="indexterm" name="id423699"></a>
     1358<a class="indexterm" name="id397954"></a>
     1359<a class="indexterm" name="id397961"></a>
     1360<a class="indexterm" name="id397967"></a>
    13591361PPDs can control all print device options. They are usually provided by the manufacturer  if you own
    13601362a PostScript printer, that is. PPD files are always a component of PostScript printer drivers on MS Windows or
     
    13651367CUPS can load, without any conversions, the PPD file from any Windows (NT is recommended) PostScript driver
    13661368and handle the options. There is a Web browser interface to the print options (select <a class="ulink" href="http://localhost:631/printers/" target="_top">http://localhost:631/printers/</a> and click on one
    1367 <span class="guibutton">Configure Printer</span> button to see it) or a command-line interface (see <code class="literal">man
     1369<span class="guibutton">Configure Printer</span> button to see it) or a command line interface (see <code class="literal">man
    13681370lpoptions</code> or see if you have <code class="literal">lphelp</code> on your system). There are also some
    13691371different GUI front-ends on Linux/UNIX, which can present PPD options to users. PPD options are normally meant
    13701372to be evaluated by the PostScript RIP on the real PostScript printer.
    1371 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423751"></a>PPDs for Non-PS Printers on UNIX</h3></div></div></div><p>
    1372 <a class="indexterm" name="id423758"></a>
     1373</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398019"></a>PPDs for Non-PS Printers on UNIX</h3></div></div></div><p>
     1374<a class="indexterm" name="id398026"></a>
    13731375CUPS does not limit itself to &#8220;<span class="quote">real</span>&#8221; PostScript printers in its use of PPDs. The CUPS developers
    13741376have extended the scope of the PPD concept to also describe available device and driver options for
     
    13821384devices to its clients, because it can act as a PostScript RIP for those printers, processing the received
    13831385PostScript code into a proper raster print format.
    1384 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423788"></a>PPDs for Non-PS Printers on Windows</h3></div></div></div><p>
    1385 <a class="indexterm" name="id423795"></a>
     1386</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398056"></a>PPDs for Non-PS Printers on Windows</h3></div></div></div><p>
     1387<a class="indexterm" name="id398063"></a>
    13861388CUPS-PPDs can also be used on Windows clients, on top of a &#8220;<span class="quote">core</span>&#8221; PostScript driver (now
    13871389recommended is the CUPS PostScript Driver for Windows NT/200x/XP; you can also use the Adobe one, with
     
    13971399        </p></li></ul></div><p>
    13981400Using CUPS PPDs on Windows clients enables them to control all print job settings just as a UNIX client can do.
    1399 </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id423848"></a>Windows Terminal Servers (WTS) as CUPS Clients</h2></div></div></div><p>
     1401</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id398116"></a>Windows Terminal Servers (WTS) as CUPS Clients</h2></div></div></div><p>
    14001402This setup may be of special interest to people experiencing major problems in WTS environments. WTS often
    14011403need a multitude of non-PostScript drivers installed to run their clients' variety of different printer
    14021404models. This often imposes the price of much increased instability.
    1403 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423860"></a>Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
     1405</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398128"></a>Printer Drivers Running in &#8220;<span class="quote">Kernel Mode</span>&#8221; Cause Many
    14041406Problems</h3></div></div></div><p>
    14051407Windows NT printer drivers, which run in &#8220;<span class="quote">kernel mode</span>&#8221;, introduce a high risk for the stability
     
    14131415one from Adobe and the one from Microsoft. Both are well-tested and are as stable as you can imagine on
    14141416Windows. The CUPS driver is derived from the Microsoft one.
    1415 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423891"></a>Workarounds Impose Heavy Limitations</h3></div></div></div><p>
     1417</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398159"></a>Workarounds Impose Heavy Limitations</h3></div></div></div><p>
    14161418In an attempt to work around problems, site administrators have resorted to restricting the
    14171419allowed drivers installed on their WTS to one generic PCL and one PostScript driver. This, however, restricts
    14181420the number of printer options available for clients to use. Often they can't get out more than simplex
    14191421prints from one standard paper tray, while their devices could do much better if driven by a different driver!
    1420 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423905"></a>CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</h3></div></div></div><p>
    1421 <a class="indexterm" name="id423916"></a>
    1422 <a class="indexterm" name="id423923"></a>
     1422</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398173"></a>CUPS: A &#8220;<span class="quote">Magical Stone</span>&#8221;?</h3></div></div></div><p>
     1423<a class="indexterm" name="id398184"></a>
     1424<a class="indexterm" name="id398191"></a>
    14231425Using a PostScript driver, enabled with a CUPS-PPD, seems to be a very elegant way to overcome all these
    14241426shortcomings. There are, depending on the version of Windows OS you use, up to three different PostScript
     
    14291431&#8220;<span class="quote">raw spooling</span>&#8221; device. Plus, this setup is not yet widely tested, although the first feedbacks
    14301432look very promising.
    1431 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id423941"></a>PostScript Drivers with No Major Problems, Even in Kernel
     1433</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398209"></a>PostScript Drivers with No Major Problems, Even in Kernel
    14321434Mode</h3></div></div></div><p>
    1433 <a class="indexterm" name="id423950"></a>
    1434 <a class="indexterm" name="id423956"></a>
    1435 <a class="indexterm" name="id423963"></a>
    1436 <a class="indexterm" name="id423970"></a>
    1437 <a class="indexterm" name="id423977"></a>
    1438 <a class="indexterm" name="id423984"></a>
     1435<a class="indexterm" name="id398218"></a>
     1436<a class="indexterm" name="id398224"></a>
     1437<a class="indexterm" name="id398231"></a>
     1438<a class="indexterm" name="id398238"></a>
     1439<a class="indexterm" name="id398245"></a>
     1440<a class="indexterm" name="id398252"></a>
    14391441More recent printer drivers on W200x and XP no longer run in kernel mode (unlike Windows NT). However, both
    14401442operating systems can still use the NT drivers, running in kernel mode (you can roughly tell which is which as
     
    14481450the GPL, and if you are the owner of an &#8220;<span class="quote">MS DDK for Windows NT,</span>&#8221; you can check the driver
    14491451yourself.
    1450 </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id424020"></a>Configuring CUPS for Driver Download</h2></div></div></div><p>
     1452</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id398288"></a>Configuring CUPS for Driver Download</h2></div></div></div><p>
    14511453As we have said before, all previously known methods to prepare client printer drivers on the Samba server for
    14521454download and Point'n'Print convenience of Windows workstations are working with CUPS, too. These methods were
    14531455described in <a class="link" href="classicalprinting.html" title="Chapter 21. Classical Printing Support">Classical Printing</a>. In reality, this is a pure Samba
    14541456business and relates only to the Samba-Windows client relationship.
    1455 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424038"></a><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</h3></div></div></div><p>
    1456 <a class="indexterm" name="id424048"></a>
     1457</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398306"></a><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</h3></div></div></div><p>
     1458<a class="indexterm" name="id398316"></a>
    14571459The <em class="parameter"><code>cupsaddsmb</code></em> utility (shipped with all current CUPS versions) is an alternative
    14581460method to transfer printer drivers into the Samba <em class="parameter"><code>[print$]</code></em> share. Remember, this
     
    14711473CUPS drivers. You will also need to get the respective part of the Adobe driver
    14721474if you need to support Windows 95, 98, and Me clients.
    1473 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424126"></a>Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></h3></div></div></div><p>
     1475</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398394"></a>Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></h3></div></div></div><p>
    14741476Prior to running <code class="literal">cupsaddsmb</code>, you need the settings in
    14751477<code class="filename">smb.conf</code> as shown in <a class="link" href="CUPS-printing.html#cupsadd-ex" title="Example 22.3. smb.conf for cupsaddsmb Usage">the <code class="filename">smb.conf</code> for cupsaddsmb Usage</a>.
    1476 </p><div class="example"><a name="cupsadd-ex"></a><p class="title"><b>Example 22.3. smb.conf for cupsaddsmb Usage</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id424195"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id424206"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id424218"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id424238"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id424250"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id424261"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td><a class="indexterm" name="id424272"></a><em class="parameter"><code>public = yes</code></em></td></tr><tr><td># setting depends on your requirements</td></tr><tr><td><a class="indexterm" name="id424288"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id424299"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id424310"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id424322"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id424342"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id424354"></a><em class="parameter"><code>path = /etc/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id424366"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id424377"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id424388"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id424400"></a><em class="parameter"><code>write list = root</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424414"></a>CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</h3></div></div></div><p>
    1477 <a class="indexterm" name="id424424"></a>
     1478</p><div class="example"><a name="cupsadd-ex"></a><p class="title"><b>Example 22.3. smb.conf for cupsaddsmb Usage</b></p><div class="example-contents"><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id398463"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id398474"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id398486"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[printers]</code></em></td></tr><tr><td><a class="indexterm" name="id398506"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id398518"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id398529"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td># setting depends on your requirements</td></tr><tr><td><a class="indexterm" name="id398544"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id398556"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id398567"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id398578"></a><em class="parameter"><code>printer admin = root</code></em></td></tr><tr><td> </td></tr><tr><td><em class="parameter"><code>[print$]</code></em></td></tr><tr><td><a class="indexterm" name="id398599"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id398610"></a><em class="parameter"><code>path = /etc/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id398622"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id398634"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id398645"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id398656"></a><em class="parameter"><code>write list = root, @smbprintadm</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398670"></a>CUPS &#8220;<span class="quote">PostScript Driver for Windows NT/200x/XP</span>&#8221;</h3></div></div></div><p>
     1479<a class="indexterm" name="id398681"></a>
    14781480CUPS users may get the exact same package from <a class="ulink" href="http://www.cups.org/software.html" target="_top">http://www.cups.org/software.html</a>.  It is a separate package
    14791481from the CUPS-based software files, tagged as CUPS 1.1.x Windows NT/200x/XP Printer Driver for Samba (tar.gz,
     
    14881490cups-samba.ss
    14891491</pre><p>
    1490 <a class="indexterm" name="id424466"></a>
    1491 <a class="indexterm" name="id424475"></a>
     1492<a class="indexterm" name="id398723"></a>
     1493<a class="indexterm" name="id398732"></a>
    14921494These have been packaged with the ESP meta-packager software EPM. The <code class="filename">*.install</code> and
    14931495<code class="filename">*.remove</code> files are simple shell scripts, which untar the <code class="filename">*.ss</code> (the
     
    15211523the correct place.
    15221524</p></div><p>
    1523 <a class="indexterm" name="id424618"></a>
     1525<a class="indexterm" name="id398875"></a>
    15241526This new CUPS PostScript driver is currently binary only, but free of charge. No complete source code is
    15251527provided (yet). The reason is that it has been developed with the help of the Microsoft DDK and compiled with
     
    15271529free software. However, CUPS developers released the &#8220;<span class="quote">diff</span>&#8221; in source code under the GPL, so
    15281530anybody with a license for Visual Studio and a DDK will be able to compile for himself or herself.
    1529 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424635"></a>Recognizing Different Driver Files</h3></div></div></div><p>
     1531</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id398892"></a>Recognizing Different Driver Files</h3></div></div></div><p>
    15301532The CUPS drivers do not support the older Windows 95/98/Me, but only the Windows NT/2000/XP client.
    15311533</p><p>Windows NT, 2000, and XP are supported by:</p><div class="itemizedlist"><ul type="disc"><li><p>cups.hlp</p></li><li><p>cupsdrvr.dll</p></li><li><p>cupsui.dll</p></li></ul></div><p>
     
    15341536different platforms.
    15351537</p><p>Windows 95, 98, and ME are supported by:</p><div class="itemizedlist"><ul type="disc"><li><p>ADFONTS.MFM</p></li><li><p>ADOBEPS4.DRV</p></li><li><p>ADOBEPS4.HLP</p></li><li><p>DEFPRTR2.PPD</p></li><li><p>ICONLIB.DLL</p></li><li><p>PSMON.DLL</p></li></ul></div><p>Windows NT, 2000, and XP are supported by:</p><div class="itemizedlist"><ul type="disc"><li><p>ADOBEPS5.DLL</p></li><li><p>ADOBEPSU.DLL</p></li><li><p>ADOBEPSU.HLP</p></li></ul></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
    1536 <a class="indexterm" name="id424728"></a>
     1538<a class="indexterm" name="id398985"></a>
    15371539If both the Adobe driver files and the CUPS driver files for the support of Windows NT/200x/XP are presently
    15381540installed on the server, the Adobe files will be ignored and the CUPS files will be used. If you prefer
    15391541 for whatever reason  to use Adobe-only drivers, move away the three CUPS driver files.
    15401542The Windows 9x/Me clients use the Adobe drivers in any case.
    1541 </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424746"></a>Acquiring the Adobe Driver Files</h3></div></div></div><p>
     1543</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399003"></a>Acquiring the Adobe Driver Files</h3></div></div></div><p>
    15421544Acquiring the Adobe driver files seems to be unexpectedly difficult for many users. They are not available on
    15431545the Adobe Web site as single files, and the self-extracting and/or self-installing Windows-.exe is not easy to
     
    15451547client once. This will install the drivers (and one generic PostScript printer) locally on the client. When
    15461548they are installed, share the generic PostScript printer. After this, the client's <em class="parameter"><code>[print$]</code></em> share holds the Adobe files, which you can get with smbclient from the CUPS host.
    1547 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424766"></a>ESP Print Pro PostScript Driver for Windows NT/200x/XP</h3></div></div></div><p>
    1548 <a class="indexterm" name="id424774"></a>
     1549</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399023"></a>ESP Print Pro PostScript Driver for Windows NT/200x/XP</h3></div></div></div><p>
     1550<a class="indexterm" name="id399031"></a>
    15491551Users of the ESP Print Pro software are able to install the ESP print drivers package as an alternative to the
    15501552Adobe PostScript drivers.  To do so, retrieve the driver files from the normal download area of the ESP Print
     
    15561558the <em class="parameter"><code>[print$]</code></em> share, and so on. The ESP Print Pro package includes the CUPS driver
    15571559files as well as a (licensed) set of Adobe drivers for the Windows 95/98/Me client family.
    1558 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id424821"></a>Caveats to Be Considered</h3></div></div></div><p>
    1559 <a class="indexterm" name="id424829"></a>
    1560 <a class="indexterm" name="id424835"></a>
    1561 <a class="indexterm" name="id424842"></a>
    1562 <a class="indexterm" name="id424849"></a>
     1560</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399077"></a>Caveats to Be Considered</h3></div></div></div><p>
     1561<a class="indexterm" name="id399085"></a>
     1562<a class="indexterm" name="id399092"></a>
     1563<a class="indexterm" name="id399099"></a>
     1564<a class="indexterm" name="id399106"></a>
    15631565Once you have run the install script (and possibly manually moved the <code class="filename">cups.hlp</code> file to
    15641566<code class="filename">/usr/share/cups/drivers/</code>), the driver is ready to be put into Samba's <em class="parameter"><code>[print$]</code></em> share (which often maps to <code class="filename">/etc/samba/drivers/</code> and contains a
     
    156715691.1.16).
    15681570</p><div class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>
    1569 <a class="indexterm" name="id424905"></a>
    1570 <a class="indexterm" name="id424912"></a>
     1571<a class="indexterm" name="id399162"></a>
     1572<a class="indexterm" name="id399169"></a>
    15711573You may need to put root into the smbpasswd file by running <code class="literal">smbpasswd</code>; this is especially
    15721574important if you should run this whole procedure for the first time and are not working in an environment
     
    158315851.1.16) will automatically prefer its own drivers if it finds both.
    15841586</p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
    1585 <a class="indexterm" name="id424981"></a>
    1586 <a class="indexterm" name="id424988"></a>
     1587<a class="indexterm" name="id399238"></a>
     1588<a class="indexterm" name="id399245"></a>
    15871589Should your Windows clients have had the old <code class="filename">ADOBE*.*</code> files for the Adobe PostScript
    15881590driver installed, the download and installation of the new CUPS PostScript driver for Windows NT/200x/XP will
     
    15981600privileges to do this.
    15991601</p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
    1600 <a class="indexterm" name="id425055"></a>
    1601 <a class="indexterm" name="id425064"></a>
     1602<a class="indexterm" name="id399312"></a>
     1603<a class="indexterm" name="id399321"></a>
    16021604Once you have successfully downloaded the CUPS PostScript driver to a client, you can easily switch all
    16031605printers to this one by proceeding as described in <a class="link" href="classicalprinting.html" title="Chapter 21. Classical Printing Support">Classical Printing
     
    16051607Properties</span> dialog, or use <code class="literal">rpcclient</code> with the <code class="literal">setdriver</code>
    16061608subcommand.
    1607 </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425100"></a>Windows CUPS PostScript Driver Versus Adobe Driver</h3></div></div></div><p>
     1609</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399357"></a>Windows CUPS PostScript Driver Versus Adobe Driver</h3></div></div></div><p>
    16081610Are you interested in a comparison between the CUPS and the Adobe PostScript drivers? For our purposes, these
    16091611are the most important items that weigh in favor of CUPS:
    16101612</p><div class="itemizedlist"><ul type="disc"><li><p>No hassle with the Adobe EULA.</p></li><li><p>No hassle with the question, &#8220;<span class="quote">Where do I
    16111613        get the ADOBE*.* driver files?</span>&#8221;</p></li><li><p>
    1612         <a class="indexterm" name="id425128"></a>
     1614        <a class="indexterm" name="id399385"></a>
    16131615        The Adobe drivers (on request of the printer PPD associated with them) often put a PJL header in front of the
    16141616        main PostScript part of the print file. Thus, the print file starts with <em class="parameter"><code>&lt;1B
     
    16161618        <em class="parameter"><code>%!PS</code></em>. This leads to the CUPS daemon autotyping the incoming file as a print-ready file,
    16171619        not initiating a pass through the <em class="parameter"><code>pstops</code></em> filter (to speak more technically, it is not
    1618         regarded as the generic MIME-type <a class="indexterm" name="id425162"></a>
     1620        regarded as the generic MIME-type <a class="indexterm" name="id399419"></a>
    16191621        <em class="parameter"><code>application/postscript</code></em>, but as the more special MIME type
    1620         <a class="indexterm" name="id425175"></a>
     1622        <a class="indexterm" name="id399432"></a>
    16211623        <em class="parameter"><code>application/cups.vnd-postscript</code></em>), which therefore also leads to the page accounting in
    16221624        <em class="parameter"><code>/var/log/cups/page_log</code></em> not receiving the exact number of pages; instead the dummy page
    16231625        number of &#8220;<span class="quote">1</span>&#8221; is logged in a standard setup).
    16241626        </p></li><li><p>The Adobe driver has more options to misconfigure the
    1625 <a class="indexterm" name="id425204"></a>
     1627<a class="indexterm" name="id399460"></a>
    16261628        PostScript generated by it (like setting it inadvertently to
    16271629        <span class="guilabel">Optimize for Speed</span> instead of
    16281630        <span class="guilabel">Optimize for Portability</span>, which
    16291631        could lead to CUPS being unable to process it).</p></li><li><p>The CUPS PostScript driver output sent by Windows
    1630 <a class="indexterm" name="id425228"></a>
     1632<a class="indexterm" name="id399485"></a>
    16311633        clients to the CUPS server is guaranteed to autotype
    16321634        as the generic MIME type <em class="parameter"><code>application/postscript</code></em>,
     
    16341636        correct number of pages in the <code class="filename">page_log</code> for
    16351637        accounting and quota purposes.</p></li><li><p>
    1636         <a class="indexterm" name="id425259"></a>
     1638        <a class="indexterm" name="id399516"></a>
    16371639        The CUPS PostScript driver supports the sending of additional standard (IPP) print options by Windows
    16381640        NT/200x/XP clients. Such additional print options are naming the CUPS standard <span class="emphasis"><em>banner
     
    16471649        and simply ignore it).</p></li><li><p>The CUPS PostScript driver will be the heart of the
    16481650        fully fledged CUPS IPP client for Windows NT/200x/XP to be released soon
    1649         (probably alongside the first beta release for CUPS 1.2).</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425295"></a>Run cupsaddsmb (Quiet Mode)</h3></div></div></div><p>
    1650 <a class="indexterm" name="id425303"></a>
    1651 <a class="indexterm" name="id425310"></a>
     1651        (probably alongside the first beta release for CUPS 1.2).</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399552"></a>Run cupsaddsmb (Quiet Mode)</h3></div></div></div><p>
     1652<a class="indexterm" name="id399560"></a>
     1653<a class="indexterm" name="id399567"></a>
    16521654The <code class="literal">cupsaddsmb</code> command copies the needed files into your <em class="parameter"><code>[print$]</code></em>
    16531655share. Additionally, the PPD associated with this printer is copied from <code class="filename">/etc/cups/ppd/</code>
     
    16571659</p><p>
    16581660Here is an example of a successfully run <code class="literal">cupsaddsmb</code> command:
    1659 <a class="indexterm" name="id425364"></a>
    1660 <a class="indexterm" name="id425371"></a>
     1661<a class="indexterm" name="id399621"></a>
     1662<a class="indexterm" name="id399627"></a>
    16611663</p><pre class="screen">
    16621664<code class="prompt">root# </code><strong class="userinput"><code>cupsaddsmb -U root infotec_IS2027</code></strong>
    16631665Password for root required to access localhost via Samba: <strong class="userinput"><code>['secret']</code></strong>
    16641666</pre><p>
    1665 <a class="indexterm" name="id425402"></a>
     1667<a class="indexterm" name="id399659"></a>
    16661668To share <span class="emphasis"><em>all</em></span> printers and drivers, use the
    16671669<code class="option">-a</code> parameter instead of a printer name. Since
    16681670<code class="literal">cupsaddsmb</code> &#8220;<span class="quote">exports</span>&#8221; the printer drivers to Samba, it should be
    16691671obvious that it only works for queues with a CUPS driver associated.
    1670 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425429"></a>Run cupsaddsmb with Verbose Output</h3></div></div></div><p>
    1671 <a class="indexterm" name="id425437"></a>
     1672</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399686"></a>Run cupsaddsmb with Verbose Output</h3></div></div></div><p>
     1673<a class="indexterm" name="id399693"></a>
    16721674Probably you want to see what's going on. Use the
    16731675<code class="option">-v</code> parameter to get a more verbose output. The
     
    16751677a line indicate that I inserted an artificial line break plus some
    16761678indentation here:
    1677 <a class="indexterm" name="id425452"></a>
    1678 <a class="indexterm" name="id425462"></a>
     1679<a class="indexterm" name="id399709"></a>
     1680<a class="indexterm" name="id399718"></a>
    16791681</p><pre class="screen">
    16801682<code class="prompt">root# </code><strong class="userinput"><code>cupsaddsmb -U root -v infotec_2105</code></strong>
     
    17451747This will occur when the directories WIN40 and W32X86 already existed in the <em class="parameter"><code>[print$]</code></em>
    17461748driver download share (from a previous driver installation). These are harmless warning messages.
    1747 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425560"></a>Understanding cupsaddsmb</h3></div></div></div><p>
    1748 <a class="indexterm" name="id425568"></a>
     1749</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399816"></a>Understanding cupsaddsmb</h3></div></div></div><p>
     1750<a class="indexterm" name="id399824"></a>
    17491751What has happened? What did <code class="literal">cupsaddsmb</code> do? There are five stages of the procedure:
    17501752</p><div class="orderedlist"><ol type="1"><li><p>
    1751         <a class="indexterm" name="id425592"></a>
     1753        <a class="indexterm" name="id399849"></a>
    17521754        Call the CUPS server via IPP and request the driver files and the PPD file for the named printer.</p></li><li><p>Store the files temporarily in the local TEMPDIR (as defined in <code class="filename">cupsd.conf</code>).</p></li><li><p>Connect via smbclient to the Samba server's <em class="parameter"><code>[print$]</code></em> share and put the files into the
    17531755         share's WIN40 (for Windows 9x/Me) and W32X86 (for Windows NT/200x/XP) subdirectories.</p></li><li><p>
    1754         <a class="indexterm" name="id425626"></a>
     1756        <a class="indexterm" name="id399883"></a>
    17551757        Connect via rpcclient to the Samba server and execute the <code class="literal">adddriver</code> command with the correct parameters.
    17561758        </p></li><li><p>
    1757         <a class="indexterm" name="id425646"></a>
     1759        <a class="indexterm" name="id399903"></a>
    17581760        Connect via rpcclient to the Samba server a second time and execute the <code class="literal">setdriver</code> command.</p></li></ol></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
    17591761You can run the <code class="literal">cupsaddsmb</code> utility with parameters to specify one remote host as Samba host
     
    17641766<code class="prompt">root# </code><strong class="userinput"><code>cupsaddsmb -H sambaserver -h cupsserver -v printer</code></strong>
    17651767</pre><p>
    1766 </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425696"></a>How to Recognize If cupsaddsmb Completed Successfully</h3></div></div></div><p>
     1768</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id399952"></a>How to Recognize If cupsaddsmb Completed Successfully</h3></div></div></div><p>
    17671769You <span class="emphasis"><em>must</em></span> always check if the utility completed
    17681770successfully in all fields. You need at minimum these three messages
     
    17931795Therefore, we strongly recommend against use of the default quiet mode. It will hide any problems from you that
    17941796might occur.
    1795 </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425806"></a>cupsaddsmb with a Samba PDC</h3></div></div></div><p>
    1796 <a class="indexterm" name="id425814"></a>
    1797 <a class="indexterm" name="id425821"></a>
     1797</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400063"></a>cupsaddsmb with a Samba PDC</h3></div></div></div><p>
     1798<a class="indexterm" name="id400071"></a>
     1799<a class="indexterm" name="id400078"></a>
    17981800Can't get the standard <code class="literal">cupsaddsmb</code> command to run on a Samba PDC?  Are you asked for the
    17991801password credential again and again, and the command just will not take off at all? Try one of these
     
    18051807</pre><p>
    18061808(Note the two backslashes: the first one is required to &#8220;<span class="quote">escape</span>&#8221; the second one).
    1807 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425884"></a>cupsaddsmb Flowchart</h3></div></div></div><p>
    1808 <a class="indexterm" name="id425891"></a>
    1809 <a class="indexterm" name="id425898"></a>
     1809</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400140"></a>cupsaddsmb Flowchart</h3></div></div></div><p>
     1810<a class="indexterm" name="id400148"></a>
     1811<a class="indexterm" name="id400155"></a>
    18101812<a class="link" href="CUPS-printing.html#small14" title="Figure 22.16. cupsaddsmb Flowchart.">The cupsaddsmb Flowchart</a> shows a chart about the procedures, command flows, and
    18111813data flows of the <code class="literal">cupaddsmb</code> command. Note again: cupsaddsmb is
    18121814not intended to, and does not work with, raw print queues!
    1813 </p><div class="figure"><a name="small14"></a><p class="title"><b>Figure 22.16. cupsaddsmb Flowchart.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/14small.png" alt="cupsaddsmb Flowchart."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id425962"></a>Installing the PostScript Driver on a Client</h3></div></div></div><p>
    1814 <a class="indexterm" name="id425970"></a>
    1815 <a class="indexterm" name="id425977"></a>
     1815</p><div class="figure"><a name="small14"></a><p class="title"><b>Figure 22.16. cupsaddsmb Flowchart.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/14small.png" alt="cupsaddsmb Flowchart."></div></div></div><br class="figure-break"></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400218"></a>Installing the PostScript Driver on a Client</h3></div></div></div><p>
     1816<a class="indexterm" name="id400226"></a>
     1817<a class="indexterm" name="id400233"></a>
    18161818After <code class="literal">cupsaddsmb</code> is completed, your driver is prepared for the clients to use. Here are the
    18171819steps you must perform to download and install it via Point'n'Print. From a Windows client, browse to the
    18181820CUPS/Samba server:
    18191821</p><div class="itemizedlist"><ul type="disc"><li><p>
    1820         <a class="indexterm" name="id425998"></a>
     1822        <a class="indexterm" name="id400254"></a>
    18211823        Open the <span class="guilabel">Printers</span> share of Samba in Network Neighborhood.</p></li><li><p>Right-click on the printer in question.</p></li><li><p>From the opening context menu select
    18221824        <span class="guimenuitem">Install...</span> or
     
    18251827<span class="guilabel">Printers</span> folder. On Windows XP it will follow a naming convention of
    18261828<span class="emphasis"><em>PrinterName on SambaServer</em></span>. (In my current case it is infotec_2105 on kde-bitshop). If
    1827 you want to test it and send your first job from an application like Winword, the new printer appears in a
     1829you want to test it and send your first job from an application like Microsoft Word,
     1830the new printer appears in a
    18281831<code class="filename">\\SambaServer\PrinterName</code> entry in the drop-down list of available printers.
    18291832</p><p>
    1830 <a class="indexterm" name="id426062"></a>
    1831 <a class="indexterm" name="id426069"></a>
    1832 <a class="indexterm" name="id426076"></a>
     1833<a class="indexterm" name="id400319"></a>
     1834<a class="indexterm" name="id400325"></a>
     1835<a class="indexterm" name="id400332"></a>
    18331836<code class="literal">cupsaddsmb</code> will only reliably work with CUPS version 1.1.15 or higher and with Samba
    18341837version 2.2.4, or later. If it does not work, or if the automatic printer driver download to the clients does
     
    18591862        instead of 3 (the latest ESP Ghostscript package handles Level 3 PostScript very well; Adobe).
    18601863        </p></li><li><p>
    1861         Say Yes to PostScript Error Handler (Adobe).</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id426171"></a>Installing PostScript Driver Files Manually Using rpcclient</h2></div></div></div><p>
     1864        Say Yes to PostScript Error Handler (Adobe).</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id400428"></a>Installing PostScript Driver Files Manually Using rpcclient</h2></div></div></div><p>
    18621865Of course, you can run all the commands that are embedded into the
    18631866cupsaddsmb convenience utility yourself, one by one, and upload
     
    18651868</p><div class="orderedlist"><ol type="1"><li><p>Prepare Samba (a CUPS print queue with the name of the
    18661869        printer should be there. We are providing the driver now).</p></li><li><p>Copy all files to <em class="parameter"><code>[print$]</code></em>.</p></li><li><p>
    1867         <a class="indexterm" name="id426207"></a>
     1870        <a class="indexterm" name="id400464"></a>
    18681871        Run <code class="literal">rpcclient adddriver</code>
    18691872        (for each client architecture you want to support).</p></li><li><p>
    1870         <a class="indexterm" name="id426227"></a>
     1873        <a class="indexterm" name="id400484"></a>
    18711874        Run <code class="literal">rpcclient setdriver.</code></p></li></ol></div><p>
    1872 <a class="indexterm" name="id426246"></a>
    1873 <a class="indexterm" name="id426255"></a>
    1874 <a class="indexterm" name="id426264"></a>
    1875 <a class="indexterm" name="id426273"></a>
    1876 <a class="indexterm" name="id426282"></a>
     1875<a class="indexterm" name="id400502"></a>
     1876<a class="indexterm" name="id400511"></a>
     1877<a class="indexterm" name="id400521"></a>
     1878<a class="indexterm" name="id400530"></a>
     1879<a class="indexterm" name="id400539"></a>
    18771880We are going to do this now. First, read the man page on <em class="parameter"><code>rpcclient</code></em> to get a first idea.
    18781881Look at all the printing-related subcommands: <code class="literal">enumprinters</code>, <code class="literal">enumdrivers</code>,
     
    18811884You can use it to query (and command) a Windows NT (or 200x/XP) PC, too. MS-RPC is used by Windows clients,
    18821885among other things, to benefit from the Point'n'Print features. Samba can now mimic this as well.
    1883 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id426337"></a>A Check of the rpcclient man Page</h3></div></div></div><p>
     1886</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400594"></a>A Check of the rpcclient man Page</h3></div></div></div><p>
    18841887First let's check the <em class="parameter"><code>rpcclient</code></em> man page. Here are two relevant passages:
    18851888</p><p>
    1886 <a class="indexterm" name="id426355"></a>
    1887 <a class="indexterm" name="id426361"></a>
    1888 <a class="indexterm" name="id426368"></a>
     1889<a class="indexterm" name="id400611"></a>
     1890<a class="indexterm" name="id400618"></a>
     1891<a class="indexterm" name="id400625"></a>
    18891892<code class="literal">adddriver &lt;arch&gt; &lt;config&gt;</code> Execute an <code class="literal">AddPrinterDriver()</code> RPC
    18901893to install the printer driver information on the server. The driver files should already exist in the
     
    19091912RPC will fail.
    19101913</p><p>
    1911 <a class="indexterm" name="id426439"></a>
    1912 <a class="indexterm" name="id426445"></a>
     1914<a class="indexterm" name="id400695"></a>
     1915<a class="indexterm" name="id400702"></a>
    19131916<code class="literal">setdriver &lt;printername&gt; &lt;drivername&gt;</code> Execute a <code class="literal">SetPrinter()</code>
    19141917command to update the printer driver associated with an installed printer. The printer driver must already be
    19151918correctly installed on the print server.
    19161919</p><p>
    1917 <a class="indexterm" name="id426469"></a>
    1918 <a class="indexterm" name="id426476"></a>
     1920<a class="indexterm" name="id400726"></a>
     1921<a class="indexterm" name="id400732"></a>
    19191922See also the <code class="literal">enumprinters</code> and <code class="literal">enumdrivers</code> commands to
    19201923obtain a list of installed printers and drivers.
    1921 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id426497"></a>Understanding the rpcclient man Page</h3></div></div></div><p>
    1922 <a class="indexterm" name="id426505"></a>
     1924</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400754"></a>Understanding the rpcclient man Page</h3></div></div></div><p>
     1925<a class="indexterm" name="id400762"></a>
    19231926The <span class="emphasis"><em>exact</em></span> format isn't made too clear by the man page, since you have to deal with some
    19241927parameters containing spaces. Here is a better description for it. We have line-broken the command and
     
    19441947access it from a UNIX workstation. We will query it with <code class="literal">rpcclient</code> to see what it tells us
    19451948and try to understand the man page more clearly.
    1946 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id426589"></a>Producing an Example by Querying a Windows Box</h3></div></div></div><p>
    1947 <a class="indexterm" name="id426597"></a>
    1948 <a class="indexterm" name="id426606"></a>
     1949</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400846"></a>Producing an Example by Querying a Windows Box</h3></div></div></div><p>
     1950<a class="indexterm" name="id400854"></a>
     1951<a class="indexterm" name="id400863"></a>
    19491952We could run <code class="literal">rpcclient</code> with a <code class="literal">getdriver</code> or a
    19501953<code class="literal">getprinter</code> subcommand (in level 3 verbosity) against it. Just sit down at a UNIX or Linux
     
    19541957</pre><p>
    19551958From the result it should become clear which is which. Here is an example from my installation:
    1956 <a class="indexterm" name="id426654"></a>
     1959<a class="indexterm" name="id400911"></a>
    19571960</p><pre class="screen">
    19581961<code class="prompt">root# </code><strong class="userinput"><code>rpcclient -U'Danka%xxxx' W200xSERVER \
     
    19851988drivers, we do not need any (nor would we for the Adobe PostScript driver); therefore, the field will get a
    19861989&#8220;<span class="quote">NULL</span>&#8221; entry.
    1987 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id426709"></a>Requirements for adddriver and setdriver to Succeed</h3></div></div></div><p>
    1988 <a class="indexterm" name="id426717"></a>
    1989 <a class="indexterm" name="id426726"></a>
    1990 <a class="indexterm" name="id426733"></a>
     1990</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id400965"></a>Requirements for adddriver and setdriver to Succeed</h3></div></div></div><p>
     1991<a class="indexterm" name="id400973"></a>
     1992<a class="indexterm" name="id400983"></a>
     1993<a class="indexterm" name="id400989"></a>
    19911994From the man page (and from the quoted output of <code class="literal">cupsaddsmb</code> above) it becomes clear that
    19921995you need to have certain conditions in order to make the manual uploading and initializing of the driver files
     
    20052008        subdirectories.</p></li><li><p>The printer you are going to set up for the Windows
    20062009        clients needs to be installed in CUPS already.</p></li><li><p>
    2007         <a class="indexterm" name="id426877"></a>
    2008         <a class="indexterm" name="id426886"></a>
     2010        <a class="indexterm" name="id401133"></a>
     2011        <a class="indexterm" name="id401143"></a>
    20092012        The CUPS printer must be known to Samba; otherwise the <code class="literal">setdriver</code> subcommand fails with an
    20102013        NT_STATUS_UNSUCCESSFUL error. To check if the printer is known by Samba, you may use the
     
    20122015        proper update of the printer list until every smbd process had received a SIGHUP or was restarted. Remember
    20132016        this in case you've created the CUPS printer just recently and encounter problems: try restarting Samba.
    2014         </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id426920"></a>Manual Driver Installation in 15 Steps</h3></div></div></div><p>
     2017        </p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id401176"></a>Manual Driver Installation in 15 Steps</h3></div></div></div><p>
    20152018We are going to install a printer driver now by manually executing all
    20162019required commands. Because this may seem a rather complicated process at
    20172020first, we go through the procedure step by step, explaining every
    20182021single action item as it comes up.
    2019 </p><div class="procedure"><a name="id426931"></a><p class="title"><b>Procedure 22.2. Manual Driver Installation</b></p><ol type="1"><li><p class="title"><b>Install the printer on CUPS.</b></p><pre class="screen">
     2022</p><div class="procedure"><a name="id401188"></a><p class="title"><b>Procedure 22.2. Manual Driver Installation</b></p><ol type="1"><li><p class="title"><b>Install the printer on CUPS.</b></p><pre class="screen">
    20202023        <code class="prompt">root# </code><strong class="userinput"><code>lpadmin -p mysmbtstprn -v socket://10.160.51.131:9100 -E \
    20212024                                -P canonIR85.ppd</code></strong>
     
    20262029        for this step.
    20272030        </p></li><li><p class="title"><b>(Optional.) Check if the printer is recognized by Samba.</b></p><p>
    2028         <a class="indexterm" name="id426984"></a>
     2031        <a class="indexterm" name="id401241"></a>
    20292032</p><pre class="screen">
    20302033<code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'enumprinters' localhost \
     
    20462049        list</span>&#8221; as defined in <code class="filename">smb.conf</code> for <em class="parameter"><code>[print$]</code></em>.
    20472050        </p></li><li><p class="title"><b>(Optional.) Check if Samba knows a driver for the printer.</b></p><p>
    2048         <a class="indexterm" name="id427075"></a>
    2049         <a class="indexterm" name="id427085"></a>
     2051        <a class="indexterm" name="id401332"></a>
     2052        <a class="indexterm" name="id401341"></a>
    20502053</p><pre class="screen">
    20512054<code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'getprinter mysmbtstprn 2'\
     
    21032106<em class="parameter"><code>[print$]</code></em>.
    21042107</p></li><li><p class="title"><b>Tell Samba that these are driver files (<code class="literal">adddriver</code>).</b></p><p>
    2105 <a class="indexterm" name="id427255"></a>
     2108<a class="indexterm" name="id401512"></a>
    21062109</p><pre class="screen">
    21072110<code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'adddriver "Windows NT x86" \
     
    21342137subdirectory. Compare this with the situation after step 5.
    21352138</p></li><li><p class="title"><b>(Optional.) Verify if Samba now recognizes the driver.</b></p><p>
    2136 <a class="indexterm" name="id427350"></a>
     2139<a class="indexterm" name="id401606"></a>
    21372140</p><pre class="screen">
    21382141<code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'enumdrivers 3' \
     
    21492152Remember, this command greps for the name you chose for the
    21502153driver in step 6. This command must succeed before you can proceed.
    2151 </p></li><li><p><span style="color: red">&lt;title&gt;Tell Samba which printer should use these driver files (<code class="literal">setdriver</code>).&lt;/title&gt;</span></p><p>
    2152 <a class="indexterm" name="id427401"></a>
     2154</p></li><li><p class="title"><b>Tell Samba which printer should use these driver files (<code class="literal">setdriver</code>).</b></p><p>
     2155<a class="indexterm" name="id401656"></a>
    21532156</p><pre class="screen">
    21542157<code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'setdriver mysmbtstprn mydrivername' \
     
    21612164<code class="literal">enumprinters</code> must find the printer.
    21622165</p></li><li><p class="title"><b>(Optional) Verify if Samba has recognized this association.</b></p><p>
    2163 <a class="indexterm" name="id427456"></a>
    2164 <a class="indexterm" name="id427465"></a>
    2165 <a class="indexterm" name="id427474"></a>
     2166<a class="indexterm" name="id401712"></a>
     2167<a class="indexterm" name="id401721"></a>
     2168<a class="indexterm" name="id401730"></a>
    21662169</p><pre class="screen">
    21672170<code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'getprinter mysmbtstprn 2' localhost \
     
    22032206
    22042207</pre><p>
    2205 <a class="indexterm" name="id427542"></a>
     2208<a class="indexterm" name="id401798"></a>
    22062209Compare these results with the ones from steps 2 and 3. Every one of these commands show the driver is installed. Even
    22072210the <code class="literal">enumprinters</code> command now lists the driver
     
    22092212</p></li><li><p class="title"><b>(Optional.) Tickle the driver into a correct
    22102213device mode.</b></p><p>
    2211 <a class="indexterm" name="id427575"></a>
     2214<a class="indexterm" name="id401831"></a>
    22122215You certainly know how to install the driver on the client. In case
    22132216you are not particularly familiar with Windows, here is a short
     
    22322235<span class="guilabel">landscape</span></em></span>), click on <span class="guibutton">Apply</span>, and change the setting back.
    22332236</p></li><li><p class="title"><b>Install the printer on a client (Point'n'Print).</b></p><p>
    2234 <a class="indexterm" name="id427684"></a>
     2237<a class="indexterm" name="id401940"></a>
    22352238</p><pre class="screen">
    22362239<code class="prompt">C:\&gt; </code><strong class="userinput"><code>rundll32 printui.dll,PrintUIEntry /in /n "\\sambaserver\mysmbtstprn"</code></strong>
    22372240</pre><p>
    22382241If it does not work, it could be a permissions problem with the <em class="parameter"><code>[print$]</code></em> share.
    2239 </p></li><li><p class="title"><b>(Optional) Print a test page.</b></p><a class="indexterm" name="id427724"></a><pre class="screen">
     2242</p></li><li><p class="title"><b>(Optional) Print a test page.</b></p><a class="indexterm" name="id401979"></a><pre class="screen">
    22402243<code class="prompt">C:\&gt; </code><strong class="userinput"><code>rundll32 printui.dll,PrintUIEntry /p /n "\\sambaserver\mysmbtstprn"</code></strong>
    22412244</pre><p>
     
    22472250</p></li><li><p class="title"><b>(Obligatory.) Enjoy. Jump. Celebrate your success.</b></p><pre class="screen">
    22482251<code class="prompt">root# </code><strong class="userinput"><code>echo "Cheeeeerioooooo! Success..." &gt;&gt; /var/log/samba/log.smbd</code></strong>
    2249 </pre></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id427799"></a>Troubleshooting Revisited</h3></div></div></div><p>
    2250 <a class="indexterm" name="id427807"></a>
     2252</pre></li></ol></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402054"></a>Troubleshooting Revisited</h3></div></div></div><p>
     2253<a class="indexterm" name="id402062"></a>
    22512254The setdriver command will fail if in Samba's mind the queue is not
    22522255already there. A successful installation displys the promising message that the:
     
    22592262result was NT_STATUS_UNSUCCESSFUL
    22602263</code></p><p>
    2261 <a class="indexterm" name="id427836"></a>
    2262 <a class="indexterm" name="id427842"></a>
     2264<a class="indexterm" name="id402091"></a>
     2265<a class="indexterm" name="id402098"></a>
    22632266It is not good enough that you can see the queue in CUPS, using the <code class="literal">lpstat -p ir85wm</code>
    22642267command. A bug in most recent versions of Samba prevents the proper update of the queue list. The recognition
     
    22662269if this is the reason why Samba does not execute the <code class="literal">setdriver</code> command successfully, check
    22672270if Samba &#8220;<span class="quote">sees</span>&#8221; the printer:
    2268 <a class="indexterm" name="id427868"></a>
     2271<a class="indexterm" name="id402124"></a>
    22692272</p><pre class="screen">
    22702273<code class="prompt">root# </code><strong class="userinput"><code>rpcclient transmeta -N -U'root%xxxx' -c 'enumprinters 0'|grep ir85wm</code></strong>
     
    22722275</pre><p>
    22732276An alternate command could be this:
    2274 <a class="indexterm" name="id427896"></a>
     2277<a class="indexterm" name="id402152"></a>
    22752278</p><pre class="screen">
    22762279<code class="prompt">root# </code><strong class="userinput"><code>rpcclient transmeta -N -U'root%secret' -c 'getprinter ir85wm' </code></strong>
     
    22822285</pre><p>
    22832286By the way, you can use these commands, plus a few more, of course, to install drivers on remote Windows NT print servers too!
    2284 </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id427930"></a>The Printing <code class="filename">*.tdb</code> Files</h2></div></div></div><p>
    2285 <a class="indexterm" name="id427944"></a>
    2286 <a class="indexterm" name="id427950"></a>
    2287 <a class="indexterm" name="id427959"></a>
    2288 <a class="indexterm" name="id427968"></a>
    2289 <a class="indexterm" name="id427977"></a>
    2290 <a class="indexterm" name="id427986"></a>
    2291 <a class="indexterm" name="id427995"></a>
    2292 <a class="indexterm" name="id428004"></a>
    2293 <a class="indexterm" name="id428013"></a>
    2294 <a class="indexterm" name="id428022"></a>
    2295 <a class="indexterm" name="id428031"></a>
    2296 <a class="indexterm" name="id428040"></a>
    2297 <a class="indexterm" name="id428049"></a>
     2287</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402186"></a>The Printing <code class="filename">*.tdb</code> Files</h2></div></div></div><p>
     2288<a class="indexterm" name="id402200"></a>
     2289<a class="indexterm" name="id402206"></a>
     2290<a class="indexterm" name="id402215"></a>
     2291<a class="indexterm" name="id402224"></a>
     2292<a class="indexterm" name="id402233"></a>
     2293<a class="indexterm" name="id402242"></a>
     2294<a class="indexterm" name="id402251"></a>
     2295<a class="indexterm" name="id402260"></a>
     2296<a class="indexterm" name="id402269"></a>
     2297<a class="indexterm" name="id402278"></a>
     2298<a class="indexterm" name="id402286"></a>
     2299<a class="indexterm" name="id402295"></a>
     2300<a class="indexterm" name="id402304"></a>
    22982301Some mystery is associated with the series of files with a tdb suffix appearing in every Samba installation.
    22992302They are <code class="filename">connections.tdb</code>, <code class="filename">printing.tdb</code>,
     
    23022305<code class="filename">messages.tdb</code> , <code class="filename">ntprinters.tdb</code>, <code class="filename">sessionid.tdb</code>,
    23032306and <code class="filename">secrets.tdb</code>. What is their purpose?
    2304 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id428129"></a>Trivial Database Files</h3></div></div></div><p>
    2305 <a class="indexterm" name="id428137"></a>
     2307</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402385"></a>Trivial Database Files</h3></div></div></div><p>
     2308<a class="indexterm" name="id402393"></a>
    23062309A Windows NT (print) server keeps track of all information needed to serve its duty toward its clients by
    23072310storing entries in the Windows registry. Client queries are answered by reading from the registry,
     
    23122315<code class="filename">ntprinters.tdb</code>, <code class="filename">printing.tdb</code>,<code class="filename">ntforms.tdb</code>, and
    23132316<code class="filename">ntdrivers.tdb</code>.
    2314 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id428191"></a>Binary Format</h3></div></div></div><p>
     2317</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402447"></a>Binary Format</h3></div></div></div><p>
    23152318<code class="filename">*.tdb</code> files are not human readable. They are written in a binary format. &#8220;<span class="quote">Why not
    23162319ASCII?</span>&#8221;, you may ask. &#8220;<span class="quote">After all, ASCII configuration files are a good and proven tradition on
     
    23212324<code class="filename">*.tdb</code> files allows for this provision. Many smbd processes may write to the same
    23222325<code class="filename">*.tdb</code> file at the same time. This wouldn't be possible with pure ASCII files.
    2323 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id428252"></a>Losing <code class="filename">*.tdb</code> Files</h3></div></div></div><p>
     2326</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402508"></a>Losing <code class="filename">*.tdb</code> Files</h3></div></div></div><p>
    23242327It is very important that all <code class="filename">*.tdb</code> files remain consistent over all write and read
    23252328accesses. However, it may happen that these files <span class="emphasis"><em>do</em></span> get corrupted. (A <code class="literal">kill -9
     
    23282331only option. After that, you need to re-create all print-related setups unless you have made a backup of the
    23292332<code class="filename">*.tdb</code> files in time.
    2330 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id428299"></a>Using <code class="literal">tdbbackup</code></h3></div></div></div><p>
    2331 <a class="indexterm" name="id428311"></a>
    2332 <a class="indexterm" name="id428322"></a>
     2333</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402554"></a>Using <code class="literal">tdbbackup</code></h3></div></div></div><p>
     2334<a class="indexterm" name="id402567"></a>
     2335<a class="indexterm" name="id402578"></a>
    23332336Samba ships with a little utility that helps the root user of your system to backup your
    23342337<code class="filename">*.tdb</code> files. If you run it with no argument, it prints a usage message:
     
    23572360 -rw-------    1 root     root        40960 May  2 03:44 printing.tdb.bak
    23582361
    2359 </pre></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id428409"></a>CUPS Print Drivers from Linuxprinting.org</h2></div></div></div><p>
    2360 <a class="indexterm" name="id428417"></a>
     2362</pre></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id402665"></a>CUPS Print Drivers from Linuxprinting.org</h2></div></div></div><p>
     2363<a class="indexterm" name="id402673"></a>
    23612364CUPS ships with good support for HP LaserJet-type printers. You can install the generic driver as follows:
    2362 <a class="indexterm" name="id428425"></a>
     2365<a class="indexterm" name="id402681"></a>
    23632366</p><pre class="screen">
    23642367<code class="prompt">root# </code><strong class="userinput"><code>lpadmin -p laserjet4plus -v parallel:/dev/lp0 -E -m laserjet.ppd</code></strong>
     
    23762379<code class="literal">foomatic-rip</code> utility.
    23772380</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
    2378 <a class="indexterm" name="id428506"></a>
    2379 <a class="indexterm" name="id428513"></a>
    2380 <a class="indexterm" name="id428520"></a>
     2381<a class="indexterm" name="id402762"></a>
     2382<a class="indexterm" name="id402768"></a>
     2383<a class="indexterm" name="id402775"></a>
    23812384The former <code class="literal">cupsomatic</code> concept is now being replaced by the new successor, a much more
    23822385powerful <code class="literal">foomatic-rip</code>.  <code class="literal">cupsomatic</code> is no longer maintained. Here is the
     
    23872390are also intended to be used by Samba and the cupsaddsmb utility, to provide the driver files for the Windows
    23882391clients!
    2389 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id428570"></a>foomatic-rip and Foomatic Explained</h3></div></div></div><p>
    2390 <a class="indexterm" name="id428577"></a>
    2391 <a class="indexterm" name="id428584"></a>
     2392</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id402825"></a>foomatic-rip and Foomatic Explained</h3></div></div></div><p>
     2393<a class="indexterm" name="id402833"></a>
     2394<a class="indexterm" name="id402840"></a>
    23922395Nowadays, most Linux distributions rely on the utilities from the <a class="ulink" href="http://www.linuxprinting.org/" target="_top">Linuxprinting.org</a> to create their printing-related software
    23932396(which, by the way, works on all UNIXes and on Mac OS X and Darwin, too).  The utilities from this sire have a
     
    24002403available for the various driver/printer combinations in its <a class="ulink" href="http://www.linuxprinting.org/foomatic.html" target="_top">Foomatic</a> database. Currently there are <a class="ulink" href="http://www.linuxprinting.org/driver_list.cgi" target="_top">245 drivers</a> in the database. Many drivers support
    24012404various models, and many models may be driven by different drivers  its your choice!
    2402 </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id428630"></a>690 &#8220;<span class="quote">Perfect</span>&#8221; Printers</h4></div></div></div><p>
    2403 <a class="indexterm" name="id428641"></a>
     2405</p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id402886"></a>690 &#8220;<span class="quote">Perfect</span>&#8221; Printers</h4></div></div></div><p>
     2406<a class="indexterm" name="id402897"></a>
    24042407At present, there are 690 devices dubbed as working perfectly: 181 are <span class="emphasis"><em>mostly</em></span> perfect, 96
    24052408are <span class="emphasis"><em>partially</em></span> perfect, and 46 are paperweights. Keeping in mind that most of these are
     
    24092412achievement! Three years ago the number was not more than 500, and Linux or UNIX printing at the time wasn't
    24102413anywhere near the quality it is today.
    2411 </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id428666"></a>How the Printing HOWTO Started It All</h4></div></div></div><p>
     2414</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id402922"></a>How the Printing HOWTO Started It All</h4></div></div></div><p>
    24122415A few years ago <a class="ulink" href="http://www2.picante.com/" target="_top">Grant Taylor</a> started it all. The
    24132416roots of today's Linuxprinting.org are in the first <a class="ulink" href="http://www.linuxprinting.org/foomatic2.9/howto/" target="_top">Linux Printing HOWTO</a> that he authored. As a
     
    24182421This database became the core component of today's Foomatic collection of tools and data. In the meantime, it
    24192422has moved to an XML representation of the data.
    2420 </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id428697"></a>Foomatic's Strange Name</h4></div></div></div><p>
    2421 <a class="indexterm" name="id428705"></a>
     2423</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id402952"></a>Foomatic's Strange Name</h4></div></div></div><p>
     2424<a class="indexterm" name="id402960"></a>
    24222425&#8220;<span class="quote">Why the funny name?</span>&#8221; you ask. When it really took off, around spring 2000, CUPS was far less
    24232426popular than today, and most systems used LPD, LPRng, or even PDQ to print. CUPS shipped with a few generic
     
    24372440        printing was the only one available).</p></li><li><p>It gave all the advanced CUPS options (Web interface,
    24382441        GUI driver configurations) to users wanting (or needing) to use
    2439         Ghostscript filters.</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id428763"></a>cupsomatic, pdqomatic, lpdomatic, directomatic</h4></div></div></div><p>
    2440 <a class="indexterm" name="id428771"></a>
    2441 <a class="indexterm" name="id428778"></a>
    2442 <a class="indexterm" name="id428785"></a>
     2442        Ghostscript filters.</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id403019"></a>cupsomatic, pdqomatic, lpdomatic, directomatic</h4></div></div></div><p>
     2443<a class="indexterm" name="id403027"></a>
     2444<a class="indexterm" name="id403034"></a>
     2445<a class="indexterm" name="id403041"></a>
    24432446CUPS worked through a quickly hacked-up filter script named <a class="ulink" href="http://www.linuxprinting.org/download.cgi?filename=cupsomatic&amp;show=0" target="_top">cupsomatic</a>.  cupsomatic
    24442447ran the printfile through Ghostscript, constructing automatically the rather complicated command line needed.
     
    24612464structures attached to Linuxprinting.org PPDs for CUPS. It had a different &#8220;<span class="quote">*omatic</span>&#8221; script for
    24622465every spooler, as well as different printer configuration files.
    2463 </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id428901"></a>The <span class="emphasis"><em>Grand Unification</em></span> Achieved</h4></div></div></div><p>
    2464 <a class="indexterm" name="id428913"></a>
     2466</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id403157"></a>The <span class="emphasis"><em>Grand Unification</em></span> Achieved</h4></div></div></div><p>
     2467<a class="indexterm" name="id403168"></a>
    24652468This has all changed in Foomatic versions 2.9 (beta) and released as &#8220;<span class="quote">stable</span>&#8221; 3.0. It has now
    24662469achieved the convergence of all *omatic scripts and is called the <a class="ulink" href="http://www.linuxprinting.org/foomatic2.9/download.cgi?filename=foomatic-rip&amp;show=0" target="_top">foomatic-rip</a>.
     
    24712474there is improved media type and source support  paper sizes and trays are easier to configure.
    24722475</p><p>
    2473 <a class="indexterm" name="id428942"></a>
    2474 <a class="indexterm" name="id428948"></a>
    2475 <a class="indexterm" name="id428955"></a>
     2476<a class="indexterm" name="id403197"></a>
     2477<a class="indexterm" name="id403204"></a>
     2478<a class="indexterm" name="id403210"></a>
    24762479Also, the new generation of Linuxprinting.org PPDs no longer contains Perl data structures. If you are a
    24772480distro maintainer and have used the previous version of Foomatic, you may want to give the new one a spin, but
     
    24802483the steps</a> outlined in the Foomatic tutorial or in this chapter. This new development is truly amazing.
    24812484</p><p>
    2482 <a class="indexterm" name="id428982"></a>
    2483 <a class="indexterm" name="id428989"></a>
    2484 <a class="indexterm" name="id428995"></a>
     2485<a class="indexterm" name="id403237"></a>
     2486<a class="indexterm" name="id403244"></a>
     2487<a class="indexterm" name="id403251"></a>
    24852488foomatic-rip is a very clever wrapper around the need to run Ghostscript with a different syntax, options,
    24862489device selections, and/or filters for each different printer or spooler. At the same time, it can read the PPD
     
    24902493printing on media drawn from different paper trays within the same job (in both cases, even where there is no
    24912494support for this from Windows-based vendor printer drivers).
    2492 </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id429010"></a>Driver Development Outside</h4></div></div></div><p>
    2493 <a class="indexterm" name="id429018"></a>
     2495</p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id403266"></a>Driver Development Outside</h4></div></div></div><p>
     2496<a class="indexterm" name="id403274"></a>
    24942497Most driver development itself does not happen within Linuxprinting.org. Drivers are written by independent
    24952498maintainers.  Linuxprinting.org just pools all the information and stores it in its database. In addition, it
     
    24992502Speaking of the different driver development groups, most of the work is currently done in three projects:
    25002503</p><div class="itemizedlist"><ul type="disc"><li><p>
    2501 <a class="indexterm" name="id429039"></a>
     2504<a class="indexterm" name="id403294"></a>
    25022505        <a class="ulink" href="http://www-124.ibm.com/developerworks/oss/linux/projects/omni/" target="_top">Omni</a>
    25032506         a free software project by IBM that tries to convert its printer
     
    25052508        universal driver architecture for Linux/UNIX (still beta). This
    25062509        currently supports 437 models.</p></li><li><p>
    2507 <a class="indexterm" name="id429061"></a>
     2510<a class="indexterm" name="id403317"></a>
    25082511        <a class="ulink" href="http://hpinkjet.sf.net/" target="_top">HPIJS</a>
    25092512        a free software project by HP to provide the support for its own
     
    25112514        provides true photo quality). This currently supports 369
    25122515        models.</p></li><li><p>
    2513 <a class="indexterm" name="id429082"></a>
    2514         <a class="ulink" href="http://gimp-print.sf.net/" target="_top">Gimp-Print</a>  a free software
     2516<a class="indexterm" name="id403338"></a>
     2517        <a class="ulink" href="http://gimp-print.sourceforge.net/" target="_top">Gutenprint</a>  a free software
    25152518        effort, started by Michael Sweet (also lead developer for CUPS), now
    25162519        directed by Robert Krawitz, which has achieved an amazing level of
    25172520        photo print quality (many Epson users swear that its quality is
    25182521        better than the vendor drivers provided by Epson for the Microsoft
    2519         platforms). This currently supports 522 models.</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id429104"></a>Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</h4></div></div></div><p>
     2522        platforms). This currently supports 522 models.</p></li></ul></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id403359"></a>Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</h4></div></div></div><p>
    25202523Linuxprinting.org today is the one-stop shop to download printer drivers. Look for printer information and
    25212524<a class="ulink" href="http://www.linuxprinting.org//kpfeifle/LinuxKongress2002/Tutorial/" target="_top">tutorials</a> or solve
     
    25262529forum</a> has turned out to be one of the most frequented forums after only a few weeks.
    25272530</p><p>
    2528 <a class="indexterm" name="id429142"></a>
    2529 <a class="indexterm" name="id429149"></a>
    2530 <a class="indexterm" name="id429156"></a>
     2531<a class="indexterm" name="id403398"></a>
     2532<a class="indexterm" name="id403405"></a>
     2533<a class="indexterm" name="id403411"></a>
    25312534Linuxprinting.org and the Foomatic driver wrappers around Ghostscript are now a standard tool-chain for
    25322535printing on all the important distros. Most of them also have CUPS underneath. While in recent years most
     
    25372540Till Kamppeter from Mandrakesoft is doing an excellent job in his spare time to maintain Linuxprinting.org and
    25382541Foomatic. So if you use it often, please send him a note showing your appreciation.
    2539 </p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id429175"></a>Foomatic Database-Generated PPDs</h4></div></div></div><p>
    2540 <a class="indexterm" name="id429183"></a>
    2541 <a class="indexterm" name="id429190"></a>
    2542 <a class="indexterm" name="id429196"></a>
    2543 <a class="indexterm" name="id429203"></a>
    2544 <a class="indexterm" name="id429210"></a>
    2545 <a class="indexterm" name="id429217"></a>
    2546 <a class="indexterm" name="id429224"></a>
    2547 <a class="indexterm" name="id429230"></a>
    2548 <a class="indexterm" name="id429237"></a>
     2542</p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id403430"></a>Foomatic Database-Generated PPDs</h4></div></div></div><p>
     2543<a class="indexterm" name="id403438"></a>
     2544<a class="indexterm" name="id403445"></a>
     2545<a class="indexterm" name="id403452"></a>
     2546<a class="indexterm" name="id403459"></a>
     2547<a class="indexterm" name="id403466"></a>
     2548<a class="indexterm" name="id403472"></a>
     2549<a class="indexterm" name="id403479"></a>
     2550<a class="indexterm" name="id403486"></a>
     2551<a class="indexterm" name="id403493"></a>
    25492552The Foomatic database is an amazing piece of ingenuity in itself. Not only does it keep the printer and driver
    25502553information, but it is organized in a way that it can generate PPD files on the fly from its internal
     
    25612564developers. The rest is easy.  GUI tools (like KDE's marvelous <a class="ulink" href="http://printing.kde.org/overview/kprinter.phtml" target="_top">kprinter</a> or the GNOME <a class="ulink" href="http://gtklp.sourceforge.net/" target="_top">gtklp</a> xpp and the CUPS Web interface) read the PPD as well and use
    25622565this information to present the available settings to the user as an intuitive menu selection.
    2563 </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id429283"></a>foomatic-rip and Foomatic PPD Download and Installation</h3></div></div></div><p>
     2566</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403538"></a>foomatic-rip and Foomatic PPD Download and Installation</h3></div></div></div><p>
    25642567Here are the steps to install a foomatic-rip-driven LaserJet 4 Plus-compatible
    25652568printer in CUPS (note that recent distributions of SuSE, UnitedLinux and
     
    26542657        the driver/model) contain support for a certain device representing
    26552658        the selected driver for your model (as shown by <code class="literal">gs -h</code>).</p></li><li><p>foomatic-rip needs a new version of PPDs (PPD versions
    2656         produced for cupsomatic do not work with foomatic-rip).</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id429705"></a>Page Accounting with CUPS</h2></div></div></div><p>
    2657 <a class="indexterm" name="id429713"></a>
     2659        produced for cupsomatic do not work with foomatic-rip).</p></li></ul></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id403960"></a>Page Accounting with CUPS</h2></div></div></div><p>
     2660<a class="indexterm" name="id403968"></a>
    26582661Often there are questions regarding print quotas where Samba users (that is, Windows clients) should not be
    26592662able to print beyond a certain number of pages or data volume per day, week, or month. This feature is
     
    26632666Of course one could hack things with one's own scripts. But then there is CUPS. CUPS supports quotas that can
    26642667be based on the size of jobs or on the number of pages or both, and can span any time period you want.
    2665 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id429735"></a>Setting Up Quotas</h3></div></div></div><p>
    2666 <a class="indexterm" name="id429742"></a>
     2668</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id403990"></a>Setting Up Quotas</h3></div></div></div><p>
     2669<a class="indexterm" name="id403998"></a>
    26672670This is an example command of how root would set a print quota in CUPS, assuming an existing printer named
    26682671&#8220;<span class="quote">quotaprinter</span>&#8221;:
    2669 <a class="indexterm" name="id429756"></a>
     2672<a class="indexterm" name="id404012"></a>
    26702673</p><pre class="screen">
    26712674<code class="prompt">root# </code><strong class="userinput"><code>lpadmin -p quotaprinter -o job-quota-period=604800 \
     
    26742677This would limit every single user to print no more than 100 pages or 1024 KB of
    26752678data (whichever comes first) within the last 604,800 seconds ( = 1 week).
    2676 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id429785"></a>Correct and Incorrect Accounting</h3></div></div></div><p>
     2679</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404041"></a>Correct and Incorrect Accounting</h3></div></div></div><p>
    26772680For CUPS to count correctly, the printfile needs to pass the CUPS pstops filter; otherwise it uses a dummy
    26782681count of &#8220;<span class="quote">one</span>&#8221;. Some print files do not pass it (e.g., image files), but then those are mostly
     
    26852688to a print-ready format for the target printer. This is currently working for about a thousand different
    26862689printer models.  Linuxprinting.org has a driver <a class="ulink" href="http://www.linuxprinting.org/printer_list.cgi" target="_top">list</a>.
    2687 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id429818"></a>Adobe and CUPS PostScript Drivers for Windows Clients</h3></div></div></div><p>
    2688 <a class="indexterm" name="id429826"></a>
    2689 <a class="indexterm" name="id429833"></a>
    2690 <a class="indexterm" name="id429840"></a>
    2691 <a class="indexterm" name="id429846"></a>
    2692 <a class="indexterm" name="id429853"></a>
     2690</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404074"></a>Adobe and CUPS PostScript Drivers for Windows Clients</h3></div></div></div><p>
     2691<a class="indexterm" name="id404082"></a>
     2692<a class="indexterm" name="id404089"></a>
     2693<a class="indexterm" name="id404095"></a>
     2694<a class="indexterm" name="id404102"></a>
     2695<a class="indexterm" name="id404109"></a>
    26932696Before CUPS 1.1.16, your only option was to use the Adobe PostScript driver on the Windows clients. The output
    26942697of this driver was not always passed through the <code class="literal">pstops</code> filter on the CUPS/Samba side, and
     
    27012704<code class="filename">cups-samba-1.1.16.tar.gz</code> package). It does <span class="emphasis"><em>not</em></span> work for Windows
    270227059x/Me clients, but it guarantees:
    2703 </p><div class="itemizedlist"><ul type="disc"><li><p> <a class="indexterm" name="id429908"></a> To not write a PJL-header.</p></li><li><p>To still read and support all PJL-options named in the
     2706</p><div class="itemizedlist"><ul type="disc"><li><p> <a class="indexterm" name="id404164"></a> To not write a PJL-header.</p></li><li><p>To still read and support all PJL-options named in the
    27042707        driver PPD with its own means.</p></li><li><p>That the file will pass through the <code class="literal">pstops</code> filter
    27052708        on the CUPS/Samba server.</p></li><li><p>To page-count correctly the print file.</p></li></ul></div><p>
    27062709You can read more about the setup of this combination in the man page for <code class="literal">cupsaddsmb</code> (which
    27072710is only present with CUPS installed, and only current from CUPS 1.1.16).
    2708 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id429949"></a>The page_log File Syntax</h3></div></div></div><p>
    2709 <a class="indexterm" name="id429957"></a>
     2711</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404205"></a>The page_log File Syntax</h3></div></div></div><p>
     2712<a class="indexterm" name="id404213"></a>
    27102713These are the items CUPS logs in the <code class="filename">page_log</code> for every page of a job:
    27112714</p><div class="itemizedlist"><ul type="disc"><li><p>Printer name</p></li><li><p>User name</p></li><li><p>Job ID</p></li><li><p>Time of printing</p></li><li><p>Page number</p></li><li><p>Number of copies</p></li><li><p>A billing information string (optional)</p></li><li><p>The host that sent the job (included since version 1.1.19)</p></li></ul></div><p>
     
    27252728from IP address <code class="constant">10.160.51.33</code>, printed from one page 440 copies, and
    27262729is set to be billed to <em class="parameter"><code>finance-dep</code></em>.
    2727 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430085"></a>Possible Shortcomings</h3></div></div></div><p>
     2730</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404341"></a>Possible Shortcomings</h3></div></div></div><p>
    27282731What flaws or shortcomings are there with this quota system?
    27292732</p><div class="itemizedlist"><ul type="disc"><li><p>The ones named above (wrongly logged job in case of
     
    27392742        still be able to send and print a 1,000 sheet job.</p></li><li><p>A user being denied a job because of a filled-up quota
    27402743        does not get a meaningful error message from CUPS other than
    2741         &#8220;<span class="quote">client-error-not-possible</span>&#8221;.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430143"></a>Future Developments</h3></div></div></div><p>
     2744        &#8220;<span class="quote">client-error-not-possible</span>&#8221;.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404399"></a>Future Developments</h3></div></div></div><p>
    27422745This is the best system currently available, and there are huge
    27432746improvements under development for CUPS 1.2:
     
    27472750        stop in the counting).</p></li><li><p>Quotas will be handled more flexibly.</p></li><li><p>Probably there will be support for users to inquire
    27482751        about their accounts in advance.</p></li><li><p>Probably there will be support for some other tools
    2749         around this topic.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430178"></a>Other Accounting Tools</h3></div></div></div><p>
     2752        around this topic.</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404434"></a>Other Accounting Tools</h3></div></div></div><p>
    27502753Other accounting tools that can be used includes: PrintAnalyzer, pyKota, printbill, LogReport.
    27512754For more information regarding these tools you can try a Google search.
    2752 </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id430191"></a>Additional Material</h2></div></div></div><p>
     2755</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id404447"></a>Additional Material</h2></div></div></div><p>
    27532756A printer queue with <span class="emphasis"><em>no</em></span> PPD associated to it is a
    27542757&#8220;<span class="quote">raw</span>&#8221; printer, and all files will go directly there as received by the
     
    28292832to load the proper paper type before running the 10,000 page job
    28302833requested by marketing for the mailing, and so on).
    2831 </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id430379"></a>Autodeletion or Preservation of CUPS Spool Files</h2></div></div></div><p>
    2832 <a class="indexterm" name="id430387"></a>
    2833 <a class="indexterm" name="id430394"></a>
    2834 <a class="indexterm" name="id430401"></a>
     2834</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id404635"></a>Autodeletion or Preservation of CUPS Spool Files</h2></div></div></div><p>
     2835<a class="indexterm" name="id404643"></a>
     2836<a class="indexterm" name="id404650"></a>
     2837<a class="indexterm" name="id404656"></a>
    28352838Samba print files pass through two spool directories. One is the incoming directory managed by Samba (set in
    28362839the <a class="link" href="smb.conf.5.html#PATH">path = /var/spool/samba</a> directive in the <em class="parameter"><code>[printers]</code></em> section of <code class="filename">smb.conf</code>). The other is the spool directory of your UNIX print subsystem. For
    28372840CUPS it is normally <code class="filename">/var/spool/cups/</code>, as set by the <code class="filename">cupsd.conf</code>
    28382841directive <code class="filename">RequestRoot /var/spool/cups</code>.
    2839 </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430451"></a>CUPS Configuration Settings Explained</h3></div></div></div><p>
     2842</p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404706"></a>CUPS Configuration Settings Explained</h3></div></div></div><p>
    28402843Some important parameter settings in the CUPS configuration file
    28412844<code class="filename">cupsd.conf</code> are:
     
    28612864(There are also additional settings for <em class="parameter"><code>MaxJobsPerUser</code></em> and
    28622865<em class="parameter"><code>MaxJobsPerPrinter</code></em>.)
    2863 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430528"></a>Preconditions</h3></div></div></div><p>
     2866</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404783"></a>Preconditions</h3></div></div></div><p>
    28642867For everything to work as it should, you need to have three things:
    28652868</p><div class="itemizedlist"><ul type="disc"><li><p>A Samba smbd that is compiled against <code class="filename">libcups</code> (check
     
    28742877<a class="link" href="smb.conf.5.html#LPRESUMECOMMAND">lpresume command</a>) are ignored, and they should normally have no
    28752878influence whatsoever on your printing.
    2876 </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id430657"></a>Manual Configuration</h3></div></div></div><p>
     2879</p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id404913"></a>Manual Configuration</h3></div></div></div><p>
    28772880If you want to do things manually, replace the <a class="link" href="smb.conf.5.html#PRINTING">printing = cups</a>
    28782881by <a class="link" href="smb.conf.5.html#PRINTING">printing = bsd</a>. Then your manually set commands may work
    28792882(I haven't tested this), and a <a class="link" href="smb.conf.5.html#PRINTCOMMAND">print command = lp -d %P %s; rm %s</a>
    28802883may do what you need.
    2881 </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id430701"></a>Printing from CUPS to Windows-Attached Printers</h2></div></div></div><p>
    2882 <a class="indexterm" name="id430709"></a>
    2883 <a class="indexterm" name="id430715"></a>
     2884</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id404956"></a>Printing from CUPS to Windows-Attached Printers</h2></div></div></div><p>
     2885<a class="indexterm" name="id404964"></a>
     2886<a class="indexterm" name="id404971"></a>
    28842887From time to time the question arises, how can you print <span class="emphasis"><em>to</em></span> a Windows-attached printer
    28852888<span class="emphasis"><em>from</em></span> Samba? Normally the local connection from Windows host to printer would be done by
     
    29162919<code class="prompt">root# </code><strong class="userinput"><code>ln -s `which smbspool` /usr/lib/cups/backend/smb</code></strong>
    29172920</pre><p>
    2918 <a class="indexterm" name="id430824"></a>
    2919 <a class="indexterm" name="id430831"></a>
     2921<a class="indexterm" name="id405079"></a>
     2922<a class="indexterm" name="id405086"></a>
    29202923<code class="literal">smbspool</code> was written by Mike Sweet from the CUPS folks. It is included and ships with
    29212924Samba. It may also be used with print subsystems other than CUPS, to spool jobs to Windows printer shares. To
     
    29322935  -P /path/to/PPD</code></strong>
    29332936</pre><p>
    2934 <a class="indexterm" name="id430883"></a>
    2935 <a class="indexterm" name="id430890"></a>
    2936 <a class="indexterm" name="id430897"></a>
     2937<a class="indexterm" name="id405139"></a>
     2938<a class="indexterm" name="id405146"></a>
     2939<a class="indexterm" name="id405152"></a>
    29372940The PPD must be able to direct CUPS to generate the print data for the target model. For PostScript printers,
    29382941just use the PPD that would be used with the Windows NT PostScript driver. But what can you do if the printer
     
    29472950feature of CUPS and you do not necessarily need to have smbd running.
    29482951
    2949 </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id430957"></a>More CUPS Filtering Chains</h2></div></div></div><p>
     2952</p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405213"></a>More CUPS Filtering Chains</h2></div></div></div><p>
    29502953The diagrams in <a class="link" href="CUPS-printing.html#cups1" title="Figure 22.17. Filtering Chain 1.">Filtering Chain 1</a> and <a class="link" href="CUPS-printing.html#cups2" title="Figure 22.18. Filtering Chain with cupsomatic">Filtering Chain with
    29512954cupsomatic</a> show how CUPS handles print jobs.
    2952 </p><div class="figure"><a name="cups1"></a><p class="title"><b>Figure 22.17. Filtering Chain 1.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/cups1.png" alt="Filtering Chain 1."></div></div></div><br class="figure-break"><div class="figure"><a name="cups2"></a><p class="title"><b>Figure 22.18. Filtering Chain with cupsomatic</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/cups2.png" width="243" alt="Filtering Chain with cupsomatic"></div></div></div><br class="figure-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id431066"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431072"></a>Windows 9x/Me Client Can't Install Driver</h3></div></div></div><p>For Windows 9x/Me, clients require the printer names to be eight
     2955</p><div class="figure"><a name="cups1"></a><p class="title"><b>Figure 22.17. Filtering Chain 1.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/cups1.png" alt="Filtering Chain 1."></div></div></div><br class="figure-break"><div class="figure"><a name="cups2"></a><p class="title"><b>Figure 22.18. Filtering Chain with cupsomatic</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/cups2.png" width="243" alt="Filtering Chain with cupsomatic"></div></div></div><br class="figure-break"></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405322"></a>Common Errors</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405327"></a>Windows 9x/Me Client Can't Install Driver</h3></div></div></div><p>For Windows 9x/Me, clients require the printer names to be eight
    29532956        characters (or &#8220;<span class="quote">8 plus 3 chars suffix</span>&#8221;) max; otherwise, the driver files
    29542957        will not get transferred when you want to download them from Samba.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="root-ask-loop"></a>&#8220;<span class="quote">cupsaddsmb</span>&#8221; Keeps Asking for Root Password in Never-ending Loop</h3></div></div></div><p>Have you set <a class="link" href="smb.conf.5.html#SECURITY">security = user</a>? Have
     
    29612964        If the error is &#8220;<span class="quote">Tree connect failed: NT_STATUS_BAD_NETWORK_NAME</span>&#8221;,
    29622965        you may have forgotten to create the <code class="filename">/etc/samba/drivers</code> directory.
    2963         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431141"></a>&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</h3></div></div></div><p>
     2966        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405397"></a>&#8220;<span class="quote">cupsaddsmb</span>&#8221; or &#8220;<span class="quote">rpcclient addriver</span>&#8221; Emit Error</h3></div></div></div><p>
    29642967        If <code class="literal">cupsaddsmb</code>, or <code class="literal">rpcclient addriver</code> emit the error message
    29652968        WERR_BAD_PASSWORD, refer to <a class="link" href="CUPS-printing.html#root-ask-loop" title="&#8220;cupsaddsmb&#8221; Keeps Asking for Root Password in Never-ending Loop">the previous common error</a>.
    2966         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431178"></a>&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</h3></div></div></div><p>
     2969        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405434"></a>&#8220;<span class="quote">cupsaddsmb</span>&#8221; Errors</h3></div></div></div><p>
    29672970        The use of &#8220;<span class="quote">cupsaddsmb</span>&#8221; gives &#8220;<span class="quote">No PPD file for printer...</span>&#8221;
    29682971        message while PPD file is present.  What might the problem be?
     
    29752978        </p><p>Is your <em class="parameter"><code>TempDir</code></em> directive in
    29762979        <code class="filename">cupsd.conf</code> set to a valid value, and is it writable?
    2977         </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431248"></a>Client Can't Connect to Samba Printer</h3></div></div></div><p>Use <code class="literal">smbstatus</code> to check which user
     2980        </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405504"></a>Client Can't Connect to Samba Printer</h3></div></div></div><p>Use <code class="literal">smbstatus</code> to check which user
    29782981        you are from Samba's point of view. Do you have the privileges to
    29792982        write into the <em class="parameter"><code>[print$]</code></em>
    2980         share?</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431271"></a>New Account Reconnection from Windows 200x/XP Troubles</h3></div></div></div><p>
     2983        share?</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405527"></a>New Account Reconnection from Windows 200x/XP Troubles</h3></div></div></div><p>
    29812984Once you are connected as the wrong user (for example, as <code class="constant">nobody</code>, which often occurs if
    29822985you have <a class="link" href="smb.conf.5.html#MAPTOGUEST">map to guest = bad user</a>), Windows Explorer will not accept an
     
    29932996the <span class="guilabel">Network Neighborhood</span>), right-click on the printer in question, and select
    29942997<span class="guibutton">Connect....</span>.
    2995 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431352"></a>Avoid Being Connected to the Samba Server as the Wrong User</h3></div></div></div><p>
    2996 <a class="indexterm" name="id431360"></a>
     2998</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405607"></a>Avoid Being Connected to the Samba Server as the Wrong User</h3></div></div></div><p>
     2999<a class="indexterm" name="id405616"></a>
    29973000You see per <code class="literal">smbstatus</code> that you are connected as user nobody, but you want to be root or
    29983001printer admin. This is probably due to <a class="link" href="smb.conf.5.html#MAPTOGUEST">map to guest = bad user</a>, which
    29993002silently connected you under the guest account when you gave (maybe by accident) an incorrect username. Remove
    30003003<a class="link" href="smb.conf.5.html#MAPTOGUEST">map to guest</a> if you want to prevent this.
    3001 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431398"></a>Upgrading to CUPS Drivers from Adobe Drivers</h3></div></div></div><p>
     3004</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405654"></a>Upgrading to CUPS Drivers from Adobe Drivers</h3></div></div></div><p>
    30023005This information came from a mailing list posting regarding problems experienced when
    30033006upgrading from Adobe drivers to CUPS drivers on Microsoft Windows NT/200x/XP clients.
    30043007</p><p>First delete all old Adobe-using printers. Then delete all old Adobe drivers. (On Windows 200x/XP, right-click in
    30053008the background of <span class="guilabel">Printers</span> folder, select <span class="guimenuitem">Server Properties...</span>, select
    3006 tab <span class="guilabel">Drivers</span>, and delete here).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431432"></a>Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</h3></div></div></div><p>Do you use the &#8220;<span class="quote">naked</span>&#8221; root user name? Try to do it
     3009tab <span class="guilabel">Drivers</span>, and delete here).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405688"></a>Can't Use &#8220;<span class="quote">cupsaddsmb</span>&#8221; on Samba Server, Which Is a PDC</h3></div></div></div><p>Do you use the &#8220;<span class="quote">naked</span>&#8221; root user name? Try to do it
    30073010this way: <strong class="userinput"><code>cupsaddsmb -U <em class="replaceable"><code>DOMAINNAME</code></em>\\root -v
    30083011<em class="replaceable"><code>printername</code></em></code></strong>&gt; (note the two backslashes: the first one is
    3009 required to &#8220;<span class="quote">escape</span>&#8221; the second one).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431467"></a>Deleted Windows 200x Printer Driver Is Still Shown</h3></div></div></div><p>Deleting a printer on the client will not delete the
     3012required to &#8220;<span class="quote">escape</span>&#8221; the second one).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405722"></a>Deleted Windows 200x Printer Driver Is Still Shown</h3></div></div></div><p>Deleting a printer on the client will not delete the
    30103013driver too (to verify, right-click on the white background of the
    30113014<span class="guilabel">Printers</span> folder, select <span class="guimenuitem">Server Properties</span> and click on the
     
    30133016install a printer with the same name. If you want to update to a new
    30143017driver, delete the old ones first. Deletion is only possible if no
    3015 other printer uses the same driver.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431498"></a>Windows 200x/XP Local Security Policies</h3></div></div></div><a class="indexterm" name="id431504"></a><a class="indexterm" name="id431510"></a><p>Local security policies may not allow the installation of unsigned drivers  &#8220;<span class="quote">local
    3016 security policies</span>&#8221; may not allow the installation of printer drivers at all.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431529"></a>Administrator Cannot Install Printers for All Local Users</h3></div></div></div><p>
    3017 <a class="indexterm" name="id431537"></a>
    3018 <a class="indexterm" name="id431544"></a>
     3018other printer uses the same driver.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405753"></a>Windows 200x/XP Local Security Policies</h3></div></div></div><a class="indexterm" name="id405759"></a><a class="indexterm" name="id405766"></a><p>Local security policies may not allow the installation of unsigned drivers  &#8220;<span class="quote">local
     3019security policies</span>&#8221; may not allow the installation of printer drivers at all.</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405784"></a>Administrator Cannot Install Printers for All Local Users</h3></div></div></div><p>
     3020<a class="indexterm" name="id405792"></a>
     3021<a class="indexterm" name="id405799"></a>
    30193022Windows XP handles SMB printers on a &#8220;<span class="quote">per-user</span>&#8221; basis.
    30203023This means every user needs to install the printer himself or herself. To have a printer available for
     
    30223025path of <em class="parameter"><code>http://cupsserver:631/printers/printername</code></em>.  We're still looking into this one.
    30233026Maybe a logon script could automatically install printers for all users.
    3024 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431566"></a>Print Change, Notify Functions on NT Clients</h3></div></div></div><p>For print change, notify functions on NT++ clients.  These need to run the <code class="literal">Server</code>
    3025 service first (renamed to <code class="literal">File &amp; Print Sharing for MS Networks</code> in XP).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431589"></a>Win XP-SP1</h3></div></div></div><p>Win XP-SP1 introduced a Point and Print Restriction Policy (this restriction does not apply to
     3027</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405821"></a>Print Change, Notify Functions on NT Clients</h3></div></div></div><p>For print change, notify functions on NT++ clients.  These need to run the <code class="literal">Server</code>
     3028service first (renamed to <code class="literal">File &amp; Print Sharing for MS Networks</code> in XP).</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405845"></a>Windows XP SP1</h3></div></div></div><p>Windows XP SP1 introduced a Point and Print Restriction Policy (this restriction does not apply to
    30263029&#8220;<span class="quote">Administrator</span>&#8221; or &#8220;<span class="quote">Power User</span>&#8221; groups of users). In Group Policy Object Editor, go
    30273030to <span class="guimenu">User Configuration -&gt; Administrative Templates -&gt; Control Panel -&gt; Printers</span>. The policy
     
    30303033<code class="constant">Users can only Point and Print to these servers</code> to make driver downloads from Samba
    30313034possible.
    3032 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431631"></a>Print Options for All Users Can't Be Set on Windows 200x/XP</h3></div></div></div><p>How are you doing it? I bet the wrong way (it is not easy to find out, though). There are three
     3035</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id405887"></a>Print Options for All Users Can't Be Set on Windows 200x/XP</h3></div></div></div><p>How are you doing it? I bet the wrong way (it is not easy to find out, though). There are three
    30333036different ways to bring you to a dialog that <span class="emphasis"><em>seems</em></span> to set everything. All three dialogs
    30343037<span class="emphasis"><em>look</em></span> the same, yet only one of them does what you intend. You need to be Administrator or
    3035 Print Administrator to do this for all users. Here is how I do in on XP:
     3038Print Administrator to do this for all users. Here is how I do it on XP:
    30363039</p><div class="orderedlist"><ol type="A"><li><p>The first wrong way:
    30373040
     
    30633066driver (the clients can later set their own <span class="emphasis"><em>per-user defaults</em></span> by following the procedures
    30643067<span class="emphasis"><em>A</em></span> or <span class="emphasis"><em>B</em></span>).
    3065 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431898"></a>Most Common Blunders in Driver Settings on Windows Clients</h3></div></div></div><p>
     3068</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id406154"></a>Most Common Blunders in Driver Settings on Windows Clients</h3></div></div></div><p>
    30663069Don't use <em class="parameter"><code>Optimize for Speed</code></em>, but use <em class="parameter"><code>Optimize for Portability</code></em>
    30673070instead (Adobe PS Driver). Don't use <em class="parameter"><code>Page Independence: No</code></em>. Always settle with
     
    30703073Driver). For <span class="guilabel">TrueType Download Options</span> choose <code class="constant">Outline</code>. Use
    30713074PostScript Level 2 if you are having trouble with a non-PS printer and if there is a choice.
    3072 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431951"></a><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</h3></div></div></div><p>
     3075</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id406206"></a><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</h3></div></div></div><p>
    30733076Symptom: The last command of <code class="literal">cupsaddsmb</code> does not complete successfully. If the <code class="literal">cmd
    30743077= setdriver printername printername</code> result was NT_STATUS_UNSUCCESSFUL, then possibly the printer was
     
    30763079hostname -c `enumprinters'</code>? Restart smbd (or send a <code class="literal">kill -HUP</code> to all processes
    30773080listed by <code class="literal">smbstatus</code>, and try again.
    3078 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id431997"></a>Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</h3></div></div></div><p>
     3081</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id406252"></a>Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</h3></div></div></div><p>
    30793082Have you ever by accident set the CUPS spool directory to the same location (<em class="parameter"><code>RequestRoot
    30803083/var/spool/samba/</code></em> in <code class="filename">cupsd.conf</code> or the other way round:
     
    30833086/var/spool/samba</a> in the <em class="parameter"><code>[printers]</code></em> section of <code class="filename">smb.conf</code>. Otherwise,
    30843087cupsd will sanitize permissions to its spool directory with each restart and printing will not work reliably.
    3085 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id432090"></a>Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</h3></div></div></div><p>
     3088</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id406346"></a>Print Queue Called &#8220;<span class="quote">lp</span>&#8221; Mishandles Print Jobs</h3></div></div></div><p>
    30863089In this case a print queue called &#8220;<span class="quote">lp</span>&#8221; intermittently swallows jobs and
    30873090spits out completely different ones from what was sent.
    30883091</p><p>
    3089 <a class="indexterm" name="id432109"></a>
    3090 <a class="indexterm" name="id432115"></a>
    3091 <a class="indexterm" name="id432122"></a>
     3092<a class="indexterm" name="id406364"></a>
     3093<a class="indexterm" name="id406371"></a>
     3094<a class="indexterm" name="id406378"></a>
    30923095It is a bad idea to name any printer &#8220;<span class="quote">lp</span>&#8221;. This is the traditional UNIX name for the default
    30933096printer. CUPS may be set up to do an automatic creation of Implicit Classes. This means, to group all printers
     
    30983101<em class="replaceable"><code>printername@cupshost</code></em>, which gives you better control over what may happen in a
    30993102large networked environment.
    3100 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id432153"></a>Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</h3></div></div></div><p>
     3103</p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id406408"></a>Location of Adobe PostScript Driver Files for &#8220;<span class="quote">cupsaddsmb</span>&#8221;</h3></div></div></div><p>
    31013104Use <code class="literal">smbclient</code> to connect to any Windows box with a shared PostScript printer:
    31023105<code class="literal">smbclient //windowsbox/print\$ -U guest</code>. You can navigate to the
     
    31043107<code class="filename">WIN40/0</code> to do the same.  Another option is to download the <code class="filename">*.exe</code>
    31053108packaged files from the Adobe Web site.
    3106 </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id432204"></a>Overview of the CUPS Printing Processes</h2></div></div></div><p>
     3109</p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406459"></a>Overview of the CUPS Printing Processes</h2></div></div></div><p>
    31073110A complete overview of the CUPS printing processes can be found in <a class="link" href="CUPS-printing.html#a_small" title="Figure 22.19. CUPS Printing Overview.">the CUPS
    31083111Printing Overview diagram</a>.
    3109 </p><div class="figure"><a name="a_small"></a><p class="title"><b>Figure 22.19. CUPS Printing Overview.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/a_small.png" width="243" alt="CUPS Printing Overview."></div></div></div><br class="figure-break"></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id422411" href="#id422411" class="para">6</a>] </sup>See also <a class="ulink" href="http://www.cups.org/cups-help.html" target="_top">http://www.cups.org/cups-help.html</a></p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="classicalprinting.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="VFS.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. Classical Printing Support </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. Stackable VFS modules</td></tr></table></div></body></html>
     3112</p><div class="figure"><a name="a_small"></a><p class="title"><b>Figure 22.19. CUPS Printing Overview.</b></p><div class="figure-contents"><div class="mediaobject"><img src="images/a_small.png" width="243" alt="CUPS Printing Overview."></div></div></div><br class="figure-break"></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id396679" href="#id396679" class="para">6</a>] </sup>See also <a class="ulink" href="http://www.cups.org/cups-help.html" target="_top">http://www.cups.org/cups-help.html</a></p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="classicalprinting.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="VFS.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. Classical Printing Support </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. Stackable VFS modules</td></tr></table></div></body></html>
Note: See TracChangeset for help on using the changeset viewer.