diff options
Diffstat (limited to 'docs/htmldocs/Samba3-HOWTO/CUPS-printing.html')
-rw-r--r-- | docs/htmldocs/Samba3-HOWTO/CUPS-printing.html | 1072 |
1 files changed, 536 insertions, 536 deletions
diff --git a/docs/htmldocs/Samba3-HOWTO/CUPS-printing.html b/docs/htmldocs/Samba3-HOWTO/CUPS-printing.html index 34027376e3..ade3dc226a 100644 --- a/docs/htmldocs/Samba3-HOWTO/CUPS-printing.html +++ b/docs/htmldocs/Samba3-HOWTO/CUPS-printing.html @@ -1,8 +1,8 @@ -<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.75.2"><link rel="home" href="index.html" title="The Official Samba 3.5.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" title="Chapter 22. CUPS Printing Support"><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"><<a class="email" href="mailto:kpfeifle@danka.de">kpfeifle@danka.de</a>></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"><<a class="email" href="mailto:CVizitiu@gbif.org">CVizitiu@gbif.org</a>></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"><<a class="email" href="mailto:jelmer@samba.org">jelmer@samba.org</a>></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#id398816">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id398821">Features and Benefits</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id398872">Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id398982">Basic CUPS Support Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id399090">Linking smbd with libcups.so</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399316">Simple <code class="filename">smb.conf</code> Settings for CUPS</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399540">More Complex CUPS <code class="filename">smb.conf</code> Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id399900">Advanced Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id399913">Central Spooling vs. <span class="quote">“<span class="quote">Peer-to-Peer</span>”</span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399958">Raw Print Serving: Vendor Drivers on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400172">Installation of Windows Client Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-raw">Explicitly Enable <span class="quote">“<span class="quote">raw</span>”</span> Printing for <span class="emphasis"><em>application/octet-stream</em></span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400436">Driver Upload Methods</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id400547">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#id400721">Windows Drivers, GDI, and EMF</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400887">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#id401211">Ghostscript: The Software RIP for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id401352">PostScript Printer Description (PPD) Specification</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id401421">Using Windows-Formatted Vendor PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id401529">CUPS Also Uses PPDs for Non-PostScript Printers</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id401564">The CUPS Filtering Architecture</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id401781">MIME Types and CUPS Filters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402191">MIME Type Conversion Rules</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402387">Filtering Overview</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402536">Prefilters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402714">pstops</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402874">pstoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403125">imagetops and imagetoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403205">rasterto [printers specific]</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403417">CUPS Backends</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403725">The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403940">The Complete Picture</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403951"><code class="filename">mime.convs</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404012"><span class="quote">“<span class="quote">Raw</span>”</span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404112">application/octet-stream Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404373">PostScript Printer Descriptions for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404637"><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#id404951">Examples for Filtering Chains</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405353">Sources of CUPS Drivers/PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405462">Printing with Interface Scripts</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id405541">Network Printing (Purely Windows)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id405555">From Windows Clients to an NT Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405613">Driver Execution on the Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405678">Driver Execution on the Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id405777">Network Printing (Windows Clients and UNIX/Samba Print -Servers)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id405793">From Windows Clients to a CUPS/Samba Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405968">Samba Receiving Job-Files and Passing Them to CUPS</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id406040">Network PostScript RIP</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id406119">PPDs for Non-PS Printers on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406156">PPDs for Non-PS Printers on Windows</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id406216">Windows Terminal Servers (WTS) as CUPS Clients</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id406228">Printer Drivers Running in <span class="quote">“<span class="quote">Kernel Mode</span>”</span> Cause Many -Problems</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406259">Workarounds Impose Heavy Limitations</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406273">CUPS: A <span class="quote">“<span class="quote">Magical Stone</span>”</span>?</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406309">PostScript Drivers with No Major Problems, Even in Kernel -Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id406388">Configuring CUPS for Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id406406"><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406495">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#id406771">CUPS <span class="quote">“<span class="quote">PostScript Driver for Windows NT/200x/XP</span>”</span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406993">Recognizing Different Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407104">Acquiring the Adobe Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407124">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407179">Caveats to Be Considered</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407458">Windows CUPS PostScript Driver Versus Adobe Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407654">Run cupsaddsmb (Quiet Mode)</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407788">Run cupsaddsmb with Verbose Output</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407891">Understanding cupsaddsmb</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408027">How to Recognize If cupsaddsmb Completed Successfully</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408138">cupsaddsmb with a Samba PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408215">cupsaddsmb Flowchart</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408293">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#id408502">Installing PostScript Driver Files Manually Using rpcclient</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id408668">A Check of the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408828">Understanding the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408920">Producing an Example by Querying a Windows Box</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id409040">Requirements for adddriver and setdriver to Succeed</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id409251">Manual Driver Installation in 15 Steps</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id410129">Troubleshooting Revisited</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id410261">The Printing <code class="filename">*.tdb</code> Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id410460">Trivial Database Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id410522">Binary Format</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id410583">Losing <code class="filename">*.tdb</code> Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id410629">Using <code class="literal">tdbbackup</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id410740">CUPS Print Drivers from Linuxprinting.org</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id410901">foomatic-rip and Foomatic Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id411605">foomatic-rip and Foomatic PPD Download and Installation</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id412028">Page Accounting with CUPS</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id412058">Setting Up Quotas</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412109">Correct and Incorrect Accounting</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412142">Adobe and CUPS PostScript Drivers for Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412272">The page_log File Syntax</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412413">Possible Shortcomings</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412471">Future Developments</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412506">Other Accounting Tools</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id412518">Additional Material</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id412706">Autodeletion or Preservation of CUPS Spool Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id412779">CUPS Configuration Settings Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412856">Preconditions</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412984">Manual Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id413029">Printing from CUPS to Windows-Attached Printers</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id413289">More CUPS Filtering Chains</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id413398">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id413404">Windows 9x/Me Client Can't Install Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#root-ask-loop"><span class="quote">“<span class="quote">cupsaddsmb</span>”</span> Keeps Asking for Root Password in Never-ending Loop</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413474"><span class="quote">“<span class="quote">cupsaddsmb</span>”</span> or <span class="quote">“<span class="quote">rpcclient addriver</span>”</span> Emit Error</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413511"><span class="quote">“<span class="quote">cupsaddsmb</span>”</span> Errors</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413581">Client Can't Connect to Samba Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413604">New Account Reconnection from Windows 200x/XP Troubles</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413684">Avoid Being Connected to the Samba Server as the Wrong User</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413732">Upgrading to CUPS Drivers from Adobe Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413765">Can't Use <span class="quote">“<span class="quote">cupsaddsmb</span>”</span> on Samba Server, Which Is a PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413800">Deleted Windows 200x Printer Driver Is Still Shown</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413831">Windows 200x/XP Local Security Policies</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413862">Administrator Cannot Install Printers for All Local Users</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413898">Print Change, Notify Functions on NT Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413922">Windows XP SP1</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413964">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#id414232">Most Common Blunders in Driver Settings on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id414285"><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id414331">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#id414424">Print Queue Called <span class="quote">“<span class="quote">lp</span>”</span> Mishandles Print Jobs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id414487">Location of Adobe PostScript Driver Files for <span class="quote">“<span class="quote">cupsaddsmb</span>”</span></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id414538">Overview of the CUPS Printing Processes</a></span></dt></dl></div><div class="sect1" title="Introduction"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id398816"></a>Introduction</h2></div></div></div><div class="sect2" title="Features and Benefits"><div class="titlepage"><div><div><h3 class="title"><a name="id398821"></a>Features and Benefits</h3></div></div></div><p> -<a class="indexterm" name="id398829"></a> +<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.75.2"><link rel="home" href="index.html" title="The Official Samba 3.5.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" title="Chapter 22. CUPS Printing Support"><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"><<a class="email" href="mailto:kpfeifle@danka.de">kpfeifle@danka.de</a>></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"><<a class="email" href="mailto:CVizitiu@gbif.org">CVizitiu@gbif.org</a>></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"><<a class="email" href="mailto:jelmer@samba.org">jelmer@samba.org</a>></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#id398810">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id398815">Features and Benefits</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id398866">Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id398976">Basic CUPS Support Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id399084">Linking smbd with libcups.so</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399310">Simple <code class="filename">smb.conf</code> Settings for CUPS</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399534">More Complex CUPS <code class="filename">smb.conf</code> Settings</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id399894">Advanced Configuration</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id399907">Central Spooling vs. <span class="quote">“<span class="quote">Peer-to-Peer</span>”</span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id399952">Raw Print Serving: Vendor Drivers on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400166">Installation of Windows Client Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#cups-raw">Explicitly Enable <span class="quote">“<span class="quote">raw</span>”</span> Printing for <span class="emphasis"><em>application/octet-stream</em></span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400430">Driver Upload Methods</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id400541">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#id400715">Windows Drivers, GDI, and EMF</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id400881">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#id401205">Ghostscript: The Software RIP for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id401346">PostScript Printer Description (PPD) Specification</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id401414">Using Windows-Formatted Vendor PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id401523">CUPS Also Uses PPDs for Non-PostScript Printers</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id401558">The CUPS Filtering Architecture</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id401774">MIME Types and CUPS Filters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402185">MIME Type Conversion Rules</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402381">Filtering Overview</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402529">Prefilters</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402708">pstops</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id402868">pstoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403119">imagetops and imagetoraster</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403199">rasterto [printers specific]</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403411">CUPS Backends</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403719">The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403933">The Complete Picture</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id403945"><code class="filename">mime.convs</code></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404006"><span class="quote">“<span class="quote">Raw</span>”</span> Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404106">application/octet-stream Printing</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404367">PostScript Printer Descriptions for Non-PostScript Printers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id404631"><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#id404945">Examples for Filtering Chains</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405347">Sources of CUPS Drivers/PPDs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405456">Printing with Interface Scripts</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id405534">Network Printing (Purely Windows)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id405549">From Windows Clients to an NT Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405607">Driver Execution on the Client</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405672">Driver Execution on the Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id405771">Network Printing (Windows Clients and UNIX/Samba Print +Servers)</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id405787">From Windows Clients to a CUPS/Samba Print Server</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id405962">Samba Receiving Job-Files and Passing Them to CUPS</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id406034">Network PostScript RIP</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id406112">PPDs for Non-PS Printers on UNIX</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406149">PPDs for Non-PS Printers on Windows</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id406210">Windows Terminal Servers (WTS) as CUPS Clients</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id406222">Printer Drivers Running in <span class="quote">“<span class="quote">Kernel Mode</span>”</span> Cause Many +Problems</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406253">Workarounds Impose Heavy Limitations</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406267">CUPS: A <span class="quote">“<span class="quote">Magical Stone</span>”</span>?</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406303">PostScript Drivers with No Major Problems, Even in Kernel +Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id406382">Configuring CUPS for Driver Download</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id406400"><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406488">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#id406765">CUPS <span class="quote">“<span class="quote">PostScript Driver for Windows NT/200x/XP</span>”</span></a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id406987">Recognizing Different Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407098">Acquiring the Adobe Driver Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407118">ESP Print Pro PostScript Driver for Windows NT/200x/XP</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407173">Caveats to Be Considered</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407452">Windows CUPS PostScript Driver Versus Adobe Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407647">Run cupsaddsmb (Quiet Mode)</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407782">Run cupsaddsmb with Verbose Output</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id407885">Understanding cupsaddsmb</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408021">How to Recognize If cupsaddsmb Completed Successfully</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408132">cupsaddsmb with a Samba PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408209">cupsaddsmb Flowchart</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408287">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#id408496">Installing PostScript Driver Files Manually Using rpcclient</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id408662">A Check of the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408822">Understanding the rpcclient man Page</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id408914">Producing an Example by Querying a Windows Box</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id409034">Requirements for adddriver and setdriver to Succeed</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id409245">Manual Driver Installation in 15 Steps</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id410123">Troubleshooting Revisited</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id410254">The Printing <code class="filename">*.tdb</code> Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id410454">Trivial Database Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id410516">Binary Format</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id410577">Losing <code class="filename">*.tdb</code> Files</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id410623">Using <code class="literal">tdbbackup</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id410734">CUPS Print Drivers from Linuxprinting.org</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id410895">foomatic-rip and Foomatic Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id411599">foomatic-rip and Foomatic PPD Download and Installation</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id412022">Page Accounting with CUPS</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id412052">Setting Up Quotas</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412102">Correct and Incorrect Accounting</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412135">Adobe and CUPS PostScript Drivers for Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412266">The page_log File Syntax</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412406">Possible Shortcomings</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412465">Future Developments</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412500">Other Accounting Tools</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id412512">Additional Material</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id412700">Autodeletion or Preservation of CUPS Spool Files</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id412773">CUPS Configuration Settings Explained</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412850">Preconditions</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id412978">Manual Configuration</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id413023">Printing from CUPS to Windows-Attached Printers</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id413279">More CUPS Filtering Chains</a></span></dt><dt><span class="sect1"><a href="CUPS-printing.html#id413388">Common Errors</a></span></dt><dd><dl><dt><span class="sect2"><a href="CUPS-printing.html#id413394">Windows 9x/Me Client Can't Install Driver</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#root-ask-loop"><span class="quote">“<span class="quote">cupsaddsmb</span>”</span> Keeps Asking for Root Password in Never-ending Loop</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413464"><span class="quote">“<span class="quote">cupsaddsmb</span>”</span> or <span class="quote">“<span class="quote">rpcclient addriver</span>”</span> Emit Error</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413500"><span class="quote">“<span class="quote">cupsaddsmb</span>”</span> Errors</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413571">Client Can't Connect to Samba Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413594">New Account Reconnection from Windows 200x/XP Troubles</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413674">Avoid Being Connected to the Samba Server as the Wrong User</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413721">Upgrading to CUPS Drivers from Adobe Drivers</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413755">Can't Use <span class="quote">“<span class="quote">cupsaddsmb</span>”</span> on Samba Server, Which Is a PDC</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413790">Deleted Windows 200x Printer Driver Is Still Shown</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413821">Windows 200x/XP Local Security Policies</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413852">Administrator Cannot Install Printers for All Local Users</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413888">Print Change, Notify Functions on NT Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413911">Windows XP SP1</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id413953">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#id414222">Most Common Blunders in Driver Settings on Windows Clients</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id414274"><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id414320">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#id414413">Print Queue Called <span class="quote">“<span class="quote">lp</span>”</span> Mishandles Print Jobs</a></span></dt><dt><span class="sect2"><a href="CUPS-printing.html#id414476">Location of Adobe PostScript Driver Files for <span class="quote">“<span class="quote">cupsaddsmb</span>”</span></a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.html#id414527">Overview of the CUPS Printing Processes</a></span></dt></dl></div><div class="sect1" title="Introduction"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id398810"></a>Introduction</h2></div></div></div><div class="sect2" title="Features and Benefits"><div class="titlepage"><div><div><h3 class="title"><a name="id398815"></a>Features and Benefits</h3></div></div></div><p> +<a class="indexterm" name="id398823"></a> The Common UNIX Print System (<a class="ulink" href="http://www.cups.org/" target="_top">CUPS</a>) has become quite popular. All major Linux distributions now ship it as their default printing system. To many, it is still a mystical tool. Mostly, it just works. People tend to regard @@ -11,21 +11,21 @@ Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.htm <a class="link" href="classicalprinting.html" title="Chapter 21. Classical Printing Support">Classical Printing</a>, which contains much information that is also relevant to CUPS. </p><p> -<a class="indexterm" name="id398859"></a> +<a class="indexterm" name="id398853"></a> CUPS sports quite a few unique and powerful features. While its basic functions may be grasped quite easily, they are also new. Because it is different from other, more traditional printing systems, it is best not to try to apply any prior knowledge about printing to this new system. Rather, try to understand CUPS from the beginning. This documentation will lead you to a complete understanding of CUPS. Let's start with the most basic things first. - </p></div><div class="sect2" title="Overview"><div class="titlepage"><div><div><h3 class="title"><a name="id398872"></a>Overview</h3></div></div></div><p> -<a class="indexterm" name="id398880"></a> -<a class="indexterm" name="id398887"></a> + </p></div><div class="sect2" title="Overview"><div class="titlepage"><div><div><h3 class="title"><a name="id398866"></a>Overview</h3></div></div></div><p> +<a class="indexterm" name="id398874"></a> +<a class="indexterm" name="id398881"></a> +<a class="indexterm" name="id398888"></a> <a class="indexterm" name="id398894"></a> <a class="indexterm" name="id398901"></a> -<a class="indexterm" name="id398907"></a> -<a class="indexterm" name="id398917"></a> -<a class="indexterm" name="id398926"></a> -<a class="indexterm" name="id398933"></a> +<a class="indexterm" name="id398911"></a> +<a class="indexterm" name="id398920"></a> +<a class="indexterm" name="id398927"></a> CUPS is more than just a print spooling system. It is a complete printer management system that complies with the new Internet Printing Protocol (IPP). IPP is an industry and Internet Engineering Task Force (IETF) standard for network printing. Many of its functions can be managed remotely (or locally) via a Web @@ -33,19 +33,19 @@ Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="CUPS-printing.htm traditional command line and several more modern GUI interfaces (GUI interfaces developed by third parties, like KDE's overwhelming <a class="ulink" href="http://printing.kde.org/" target="_top">KDEPrint</a>). </p><p> -<a class="indexterm" name="id398954"></a> -<a class="indexterm" name="id398961"></a> +<a class="indexterm" name="id398948"></a> +<a class="indexterm" name="id398955"></a> CUPS allows creation of <span class="emphasis"><em>raw</em></span> printers (i.e., no print file format translation) as well as <span class="emphasis"><em>smart</em></span> printers (i.e., CUPS does file format conversion as required for the printer). In many ways, this gives CUPS capabilities similar to the MS Windows print monitoring system. Of course, if you are a CUPS advocate, you would argue that CUPS is better! In any case, let us now explore how to configure CUPS for interfacing with MS Windows print clients via Samba. - </p></div></div><div class="sect1" title="Basic CUPS Support Configuration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id398982"></a>Basic CUPS Support Configuration</h2></div></div></div><p> + </p></div></div><div class="sect1" title="Basic CUPS Support Configuration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id398976"></a>Basic CUPS Support Configuration</h2></div></div></div><p> +<a class="indexterm" name="id398984"></a> <a class="indexterm" name="id398990"></a> -<a class="indexterm" name="id398996"></a> -<a class="indexterm" name="id399003"></a> -<a class="indexterm" name="id399010"></a> -<a class="indexterm" name="id399017"></a> +<a class="indexterm" name="id398997"></a> +<a class="indexterm" name="id399004"></a> +<a class="indexterm" name="id399011"></a> Printing 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 parameters: <a class="link" href="smb.conf.5.html#PRINTING" target="_top">printing = cups</a> and <a class="link" href="smb.conf.5.html#PRINTCAP" target="_top">printcap = cups</a>. CUPS does not need a printcap file. However, the <code class="filename">cupsd.conf</code> configuration file knows of two related directives that control how such a @@ -55,16 +55,16 @@ Legacy programs often require the existence of a printcap file containing printe print. Make sure CUPS is set to generate and maintain a printcap file. For details, see <code class="literal">man cupsd.conf</code> and other CUPS-related documentation, like the wealth of documents regarding the CUPS server itself available from the <a class="ulink" href="http://localhost:631/documentation.html" target="_top">CUPS</a> web site. - </p><div class="sect2" title="Linking smbd with libcups.so"><div class="titlepage"><div><div><h3 class="title"><a name="id399090"></a>Linking smbd with libcups.so</h3></div></div></div><p> -<a class="indexterm" name="id399098"></a> + </p><div class="sect2" title="Linking smbd with libcups.so"><div class="titlepage"><div><div><h3 class="title"><a name="id399084"></a>Linking smbd with libcups.so</h3></div></div></div><p> +<a class="indexterm" name="id399092"></a> Samba has a special relationship to CUPS. Samba can be compiled with CUPS library support. Most recent installations have this support enabled. By default, CUPS linking is compiled into smbd and other Samba binaries. Of course, you can use CUPS even if Samba is not linked against <code class="filename">libcups.so</code> but there are some differences in required or supported configuration. </p><p> +<a class="indexterm" name="id399113"></a> <a class="indexterm" name="id399119"></a> -<a class="indexterm" name="id399125"></a> When Samba is compiled and linked with <code class="filename">libcups</code>, <a class="link" href="smb.conf.5.html#PRINTCAP" target="_top">printcap = cups</a> uses the CUPS API to list printers, submit jobs, query queues, and so on. Otherwise it maps to the System V commands with an additional <code class="literal">-oraw</code> option for printing. On a Linux @@ -79,7 +79,7 @@ libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000) [....] </pre><p> </p><p> -<a class="indexterm" name="id399190"></a> +<a class="indexterm" name="id399184"></a> The line <code class="computeroutput">libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000)</code> shows there is CUPS support compiled into this version of Samba. If this is the case, and printing = cups is set, then <span class="emphasis"><em>any otherwise manually set print command in <code class="filename">smb.conf</code> is ignored</em></span>. @@ -95,14 +95,14 @@ libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000) <a class="link" href="smb.conf.5.html#LPRMCOMMAND" target="_top">lprm command</a>, <a class="link" href="smb.conf.5.html#QUEUEPAUSECOMMAND" target="_top">queuepause command</a> and <a class="link" href="smb.conf.5.html#QUEUERESUMECOMMAND" target="_top">queue resume command</a>). - </p></div></div><div class="sect2" title="Simple smb.conf Settings for CUPS"><div class="titlepage"><div><div><h3 class="title"><a name="id399316"></a>Simple <code class="filename">smb.conf</code> Settings for CUPS</h3></div></div></div><p> + </p></div></div><div class="sect2" title="Simple smb.conf Settings for CUPS"><div class="titlepage"><div><div><h3 class="title"><a name="id399310"></a>Simple <code class="filename">smb.conf</code> Settings for CUPS</h3></div></div></div><p> 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 <code class="filename">smb.conf</code> file</a> shows the simplest printing-related setup for <code class="filename">smb.conf</code> to enable basic CUPS support: - </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 border="0" summary="Simple list" class="simplelist"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id399376"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399387"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id399399"></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="id399419"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id399431"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id399442"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td><a class="indexterm" name="id399454"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399465"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id399476"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399488"></a><em class="parameter"><code>printer admin = root, @ntadmins, @smbprintadm</code></em></td></tr></table></div></div><br class="example-break"><p> -<a class="indexterm" name="id399503"></a> + </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 border="0" summary="Simple list" class="simplelist"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id399370"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399381"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id399393"></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="id399413"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id399424"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id399436"></a><em class="parameter"><code>browseable = no</code></em></td></tr><tr><td><a class="indexterm" name="id399447"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399459"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id399470"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399482"></a><em class="parameter"><code>printer admin = root, @ntadmins, @smbprintadm</code></em></td></tr></table></div></div><br class="example-break"><p> +<a class="indexterm" name="id399497"></a> +<a class="indexterm" name="id399504"></a> <a class="indexterm" name="id399510"></a> -<a class="indexterm" name="id399517"></a> This is all you need for basic printing setup for CUPS. It will print all graphic, text, PDF, and PostScript files submitted from Windows clients. However, most of your Windows users would not know how to send these kinds of files to print without opening a GUI application. Windows clients tend to have local printer drivers @@ -112,25 +112,25 @@ libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000) hooked between the application's native format and the print data stream. If the backend printer is not a PostScript device, the print data stream is <span class="quote">“<span class="quote">binary,</span>”</span> sensible only for the target printer. Read on to learn what problem this may cause and how to avoid it. - </p></div><div class="sect2" title="More Complex CUPS smb.conf Settings"><div class="titlepage"><div><div><h3 class="title"><a name="id399540"></a>More Complex CUPS <code class="filename">smb.conf</code> Settings</h3></div></div></div><p> + </p></div><div class="sect2" title="More Complex CUPS smb.conf Settings"><div class="titlepage"><div><div><h3 class="title"><a name="id399534"></a>More Complex CUPS <code class="filename">smb.conf</code> Settings</h3></div></div></div><p> <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> is a slightly more complex printing-related setup for <code class="filename">smb.conf</code>. It enables general CUPS printing support for all printers, but defines one printer share, which is set up differently. - </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 border="0" summary="Simple list" class="simplelist"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id399594"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id399606"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id399617"></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="id399637"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id399649"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id399660"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399672"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id399683"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399695"></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="id399715"></a><em class="parameter"><code>comment = A special printer with his own settings</code></em></td></tr><tr><td><a class="indexterm" name="id399727"></a><em class="parameter"><code>path = /var/spool/samba-special</code></em></td></tr><tr><td><a class="indexterm" name="id399739"></a><em class="parameter"><code>printing = sysv</code></em></td></tr><tr><td><a class="indexterm" name="id399750"></a><em class="parameter"><code>printcap = lpstat</code></em></td></tr><tr><td><a class="indexterm" name="id399762"></a><em class="parameter"><code>print command = echo "NEW: `date`: printfile %f" >> /tmp/smbprn.log ; echo " `date`: p-%p s-%s f-%f" >> /tmp/smbprn.log ; echo " `date`: j-%j J-%J z-%z c-%c" >> /tmp/smbprn.log ; rm %f </code></em></td></tr><tr><td><a class="indexterm" name="id399776"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id399787"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id399798"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399810"></a><em class="parameter"><code>printer admin = kurt</code></em></td></tr><tr><td><a class="indexterm" name="id399821"></a><em class="parameter"><code>hosts deny = 0.0.0.0</code></em></td></tr><tr><td><a class="indexterm" name="id399833"></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> + </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 border="0" summary="Simple list" class="simplelist"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id399588"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id399599"></a><em class="parameter"><code>printcap name = cups</code></em></td></tr><tr><td><a class="indexterm" name="id399611"></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="id399631"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id399643"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id399654"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399666"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id399677"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399689"></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="id399709"></a><em class="parameter"><code>comment = A special printer with his own settings</code></em></td></tr><tr><td><a class="indexterm" name="id399721"></a><em class="parameter"><code>path = /var/spool/samba-special</code></em></td></tr><tr><td><a class="indexterm" name="id399733"></a><em class="parameter"><code>printing = sysv</code></em></td></tr><tr><td><a class="indexterm" name="id399744"></a><em class="parameter"><code>printcap = lpstat</code></em></td></tr><tr><td><a class="indexterm" name="id399756"></a><em class="parameter"><code>print command = echo "NEW: `date`: printfile %f" >> /tmp/smbprn.log ; echo " `date`: p-%p s-%s f-%f" >> /tmp/smbprn.log ; echo " `date`: j-%j J-%J z-%z c-%c" >> /tmp/smbprn.log ; rm %f </code></em></td></tr><tr><td><a class="indexterm" name="id399769"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id399781"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id399792"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id399804"></a><em class="parameter"><code>printer admin = kurt</code></em></td></tr><tr><td><a class="indexterm" name="id399815"></a><em class="parameter"><code>hosts deny = 0.0.0.0</code></em></td></tr><tr><td><a class="indexterm" name="id399827"></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> This special share is only for testing purposes. It does not write the print job to a file. It just logs the job parameters known to Samba into the <code class="filename">/tmp/smbprn.log</code> file and deletes the job-file. Moreover, the <a class="link" href="smb.conf.5.html#PRINTERADMIN" target="_top">printer admin</a> of this share is <span class="quote">“<span class="quote">kurt</span>”</span> (not the <span class="quote">“<span class="quote">@ntadmins</span>”</span> group), guest access is not allowed, the share isn't published to the Network Neighborhood (so you need to know it is there), and it 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 <a class="link" href="smb.conf.5.html#PRINTING" target="_top">printing = sysv</a> and <a class="link" href="smb.conf.5.html#PRINTCAP" target="_top">printcap = lpstat</a>. - </p></div></div><div class="sect1" title="Advanced Configuration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id399900"></a>Advanced Configuration</h2></div></div></div><p> + </p></div></div><div class="sect1" title="Advanced Configuration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id399894"></a>Advanced Configuration</h2></div></div></div><p> Before we delve into all the configuration options, let us clarify a few points. <span class="emphasis"><em>Network printing needs to be organized and set up correctly</em></span>. This frequently doesn't happen. Legacy systems or small business LAN environments often lack design and good housekeeping. - </p><div class="sect2" title="Central Spooling vs. “Peer-to-Peer” Printing"><div class="titlepage"><div><div><h3 class="title"><a name="id399913"></a>Central Spooling vs. <span class="quote">“<span class="quote">Peer-to-Peer</span>”</span> Printing</h3></div></div></div><p> -<a class="indexterm" name="id399925"></a> - <a class="indexterm" name="id399932"></a> - <a class="indexterm" name="id399941"></a> + </p><div class="sect2" title="Central Spooling vs. “Peer-to-Peer” Printing"><div class="titlepage"><div><div><h3 class="title"><a name="id399907"></a>Central Spooling vs. <span class="quote">“<span class="quote">Peer-to-Peer</span>”</span> Printing</h3></div></div></div><p> +<a class="indexterm" name="id399919"></a> + <a class="indexterm" name="id399926"></a> + <a class="indexterm" name="id399935"></a> Many small office or home networks, as well as badly organized larger environments, allow each client a direct access to available network printers. This is generally a bad idea. It often blocks one client's access to the printer when another client's job is printing. It might freeze the first client's application while it is @@ -138,9 +138,9 @@ libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000) pages mixed with each other. A better concept is the use of a print server: it routes all jobs through one central system, which responds immediately, takes jobs from multiple concurrent clients, and transfers them to the printer(s) in the correct order. - </p></div><div class="sect2" title="Raw Print Serving: Vendor Drivers on Windows Clients"><div class="titlepage"><div><div><h3 class="title"><a name="id399958"></a>Raw Print Serving: Vendor Drivers on Windows Clients</h3></div></div></div><p> - <a class="indexterm" name="id399966"></a> - <a class="indexterm" name="id399973"></a> + </p></div><div class="sect2" title="Raw Print Serving: Vendor Drivers on Windows Clients"><div class="titlepage"><div><div><h3 class="title"><a name="id399952"></a>Raw Print Serving: Vendor Drivers on Windows Clients</h3></div></div></div><p> + <a class="indexterm" name="id399960"></a> + <a class="indexterm" name="id399967"></a> Most traditionally configured UNIX print servers acting on behalf of Samba's Windows clients represented a really simple setup. Their only task was to manage the <span class="quote">“<span class="quote">raw</span>”</span> spooling of all jobs handed to them by @@ -149,8 +149,8 @@ libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000) device. In this case, a native (vendor-supplied) Windows printer driver needs to be installed on each and every client for the target device. </p><p> -<a class="indexterm" name="id399990"></a> -<a class="indexterm" name="id399997"></a> +<a class="indexterm" name="id399984"></a> +<a class="indexterm" name="id399991"></a> It is possible to configure CUPS, Samba, and your Windows clients in the same traditional and simple way. When CUPS printers are configured for raw print-through mode operation, it is the responsibility of the @@ -164,15 +164,15 @@ libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000) This is achieved by installation of the printer as if it were physically attached to the Windows client. You then redirect output to a raw network print queue. This procedure may be followed to achieve this: - </p><div class="procedure" title="Procedure 22.1. Configuration Steps for Raw CUPS Printing Support"><a name="id400015"></a><p class="title"><b>Procedure 22.1. Configuration Steps for Raw CUPS Printing Support</b></p><ol class="procedure" type="1"><li class="step" title="Step 1"><p> -<a class="indexterm" name="id400026"></a> + </p><div class="procedure" title="Procedure 22.1. Configuration Steps for Raw CUPS Printing Support"><a name="id400009"></a><p class="title"><b>Procedure 22.1. Configuration Steps for Raw CUPS Printing Support</b></p><ol class="procedure" type="1"><li class="step" title="Step 1"><p> +<a class="indexterm" name="id400020"></a> Edit <code class="filename">/etc/cups/mime.types</code> to uncomment the line near the end of the file that has: </p><pre class="screen"> #application/octet-... </pre><p> </p></li><li class="step" title="Step 2"><p> -<a class="indexterm" name="id400052"></a> +<a class="indexterm" name="id400046"></a> Do the same for the file <code class="filename">/etc/cups/mime.convs</code>. </p></li><li class="step" title="Step 3"><p> Add a raw printer using the Web interface. Point your browser at @@ -193,14 +193,14 @@ libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000) you have configured above. Example: <code class="constant">\\server\raw_q</code>. Here, the name <code class="constant">raw_q</code> is the name you gave the print queue in the CUPS environment. - </p></li></ol></div></div><div class="sect2" title="Installation of Windows Client Drivers"><div class="titlepage"><div><div><h3 class="title"><a name="id400172"></a>Installation of Windows Client Drivers</h3></div></div></div><p> + </p></li></ol></div></div><div class="sect2" title="Installation of Windows Client Drivers"><div class="titlepage"><div><div><h3 class="title"><a name="id400166"></a>Installation of Windows Client Drivers</h3></div></div></div><p> The printer drivers on the Windows clients may be installed in two functionally different ways: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Manually install the drivers locally on each client, one by one; this yields the old LanMan style printing and uses a <code class="filename">\\sambaserver\printershare</code> type of connection.</p></li><li class="listitem"><p> - <a class="indexterm" name="id400199"></a> + <a class="indexterm" name="id400193"></a> Deposit and prepare the drivers (for later download) on the print server (Samba); this enables the clients to use <span class="quote">“<span class="quote">Point'n'Print</span>”</span> to get drivers semi-automatically installed the @@ -211,9 +211,9 @@ libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000) administrative efforts and prevents that different versions of the drivers are used accidentally. </p></div><div class="sect2" title="Explicitly Enable “raw” Printing for application/octet-stream"><div class="titlepage"><div><div><h3 class="title"><a name="cups-raw"></a>Explicitly Enable <span class="quote">“<span class="quote">raw</span>”</span> Printing for <span class="emphasis"><em>application/octet-stream</em></span></h3></div></div></div><p> - <a class="indexterm" name="id400240"></a> - <a class="indexterm" name="id400247"></a> - <a class="indexterm" name="id400254"></a> + <a class="indexterm" name="id400234"></a> + <a class="indexterm" name="id400241"></a> + <a class="indexterm" name="id400248"></a> If you use the first option (drivers are installed on the client side), there is one setting to take care of: CUPS needs to be told that it should allow <span class="quote">“<span class="quote">raw</span>”</span> printing of deliberate (binary) file @@ -225,10 +225,10 @@ libcups.so.2 => /usr/lib/libcups.so.2 (0x40123000) </p><pre class="programlisting"> application/octet-stream </pre><p> - <a class="indexterm" name="id400304"></a> - <a class="indexterm" name="id400311"></a> + <a class="indexterm" name="id400298"></a> + <a class="indexterm" name="id400305"></a> In <code class="filename">/etc/cups/mime.convs</code>, have this line: - <a class="indexterm" name="id400324"></a> + <a class="indexterm" name="id400318"></a> </p><pre class="programlisting"> application/octet-stream application/vnd.cups-raw 0 - </pre><p> @@ -239,8 +239,8 @@ application/octet-stream application/vnd.cups-raw 0 - Editing the <code class="filename">mime.convs</code> and the <code class="filename">mime.types</code> file does not <span class="emphasis"><em>enforce</em></span> <span class="quote">“<span class="quote">raw</span>”</span> printing, it only <span class="emphasis"><em>allows</em></span> it. </p></div><p title="Background"><b>Background. </b> - <a class="indexterm" name="id400385"></a> -<a class="indexterm" name="id400392"></a> + <a class="indexterm" name="id400379"></a> +<a class="indexterm" name="id400386"></a> That CUPS is a more security-aware printing system than traditional ones does not by default allow a user to send deliberate (possibly binary) data to printing devices. This could be easily abused to launch a <span class="quote">“<span class="quote">Denial of Service</span>”</span> attack on your printer(s), causing at least the loss of a lot of paper and @@ -254,11 +254,11 @@ application/octet-stream application/vnd.cups-raw 0 - locally installed. If you are not interested in background information about more advanced CUPS/Samba printing, simply skip the remaining sections of this chapter. - </p></div><div class="sect2" title="Driver Upload Methods"><div class="titlepage"><div><div><h3 class="title"><a name="id400436"></a>Driver Upload Methods</h3></div></div></div><p> + </p></div><div class="sect2" title="Driver Upload Methods"><div class="titlepage"><div><div><h3 class="title"><a name="id400430"></a>Driver Upload Methods</h3></div></div></div><p> This section describes three familiar methods, plus one new one, by which printer drivers may be uploaded. </p><p> - <a class="indexterm" name="id400448"></a> + <a class="indexterm" name="id400442"></a> If you want to use the MS-RPC-type printing, you must upload the drivers onto the Samba server first (<em class="parameter"><code>[print$]</code></em> share). For a discussion on how to deposit printer drivers on the @@ -267,27 +267,27 @@ application/octet-stream application/vnd.cups-raw 0 - chapter</a> of this book. There you will find a description or reference to three methods of preparing the client drivers on the Samba server: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> - <a class="indexterm" name="id400481"></a> + <a class="indexterm" name="id400475"></a> The GUI, <span class="quote">“<span class="quote">Add Printer Wizard</span>”</span> <span class="emphasis"><em>upload-from-a-Windows-client</em></span> method. </p></li><li class="listitem"><p> The command line, <span class="quote">“<span class="quote">smbclient/rpcclient</span>”</span> upload-from-a-UNIX-workstation method. </p></li><li class="listitem"><p> - <a class="indexterm" name="id400508"></a> + <a class="indexterm" name="id400502"></a> The Imprints tool set method. </p></li></ul></div><p> -<a class="indexterm" name="id400520"></a> +<a class="indexterm" name="id400513"></a> These three methods apply to CUPS all the same. The <code class="literal">cupsaddsmb</code> utility is a new and more convenient way to load the Windows drivers into Samba and is provided if you use CUPS. </p><p> <code class="literal">cupsaddsmb</code> is discussed in much detail later in this chapter. But we first explore the CUPS filtering system and compare the Windows and UNIX printing architectures. - </p></div></div><div class="sect1" title="Advanced Intelligent Printing with PostScript Driver Download"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id400547"></a>Advanced Intelligent Printing with PostScript Driver Download</h2></div></div></div><p> - <a class="indexterm" name="id400555"></a> + </p></div></div><div class="sect1" title="Advanced Intelligent Printing with PostScript Driver Download"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id400541"></a>Advanced Intelligent Printing with PostScript Driver Download</h2></div></div></div><p> + <a class="indexterm" name="id400549"></a> We now know how to set up a <span class="quote">“<span class="quote">dump</span>”</span> print server, that is, a server that spools print jobs <span class="quote">“<span class="quote">raw</span>”</span>, leaving the print data untouched. </p><p> You might need to set up CUPS in a smarter way. The reasons could be manifold: - </p><a class="indexterm" name="id400578"></a><a class="indexterm" name="id400585"></a><a class="indexterm" name="id400591"></a><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Maybe your boss wants to get monthly statistics: Which + </p><a class="indexterm" name="id400572"></a><a class="indexterm" name="id400578"></a><a class="indexterm" name="id400585"></a><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Maybe your boss wants to get monthly statistics: Which printer did how many pages? What was the average data size of a job? What was the average print run per day? What are the typical hourly peaks in printing? Which department prints how much?</p></li><li class="listitem"><p>Maybe you are asked to set up a print quota system: @@ -303,28 +303,28 @@ application/octet-stream application/vnd.cups-raw 0 - Windows and UNIX printing, then a description of the CUPS filtering system, how it works, and how you can tweak it. </p><div class="sect2" title="GDI on Windows, PostScript on UNIX"><div class="titlepage"><div><div><h3 class="title"><a name="gdipost"></a>GDI on Windows, PostScript on UNIX</h3></div></div></div><p> + <a class="indexterm" name="id400646"></a> <a class="indexterm" name="id400652"></a> - <a class="indexterm" name="id400659"></a> Network printing is one of the most complicated and error-prone day-to-day tasks any user or administrator may encounter. This is true for all OS platforms, and there are reasons it is so. </p><p> - <a class="indexterm" name="id400670"></a> - <a class="indexterm" name="id400677"></a> -<a class="indexterm" name="id400684"></a> -<a class="indexterm" name="id400691"></a> -<a class="indexterm" name="id400698"></a> + <a class="indexterm" name="id400664"></a> + <a class="indexterm" name="id400671"></a> +<a class="indexterm" name="id400678"></a> +<a class="indexterm" name="id400685"></a> +<a class="indexterm" name="id400692"></a> You can't expect to throw just any file format at a printer and have it get printed. A file format conversion must take place. The problem is that there is no common standard for print file formats across all manufacturers and printer types. While PostScript (trademark held by Adobe) and, to an extent, PCL (trademark held by Hewlett-Packard) have developed into semi-official <span class="quote">“<span class="quote">standards</span>”</span> by being the most widely used page description languages (PDLs), there are still many manufacturers who <span class="quote">“<span class="quote">roll their own</span>”</span> (their reasons may be unacceptable license fees for using printer-embedded PostScript interpreters, and so on). - </p></div><div class="sect2" title="Windows Drivers, GDI, and EMF"><div class="titlepage"><div><div><h3 class="title"><a name="id400721"></a>Windows Drivers, GDI, and EMF</h3></div></div></div><p> - <a class="indexterm" name="id400729"></a> - <a class="indexterm" name="id400736"></a> - <a class="indexterm" name="id400743"></a> -<a class="indexterm" name="id400750"></a> + </p></div><div class="sect2" title="Windows Drivers, GDI, and EMF"><div class="titlepage"><div><div><h3 class="title"><a name="id400715"></a>Windows Drivers, GDI, and EMF</h3></div></div></div><p> + <a class="indexterm" name="id400723"></a> + <a class="indexterm" name="id400730"></a> + <a class="indexterm" name="id400737"></a> +<a class="indexterm" name="id400743"></a> In Windows OS, the format conversion job is done by the printer drivers. On MS Windows OS platforms all application programmers have at their disposal a built-in API, the graphical device interface (GDI), as part and parcel of the OS itself to base themselves on. This GDI core is used as one common unified ground for all @@ -335,21 +335,21 @@ application/octet-stream application/vnd.cups-raw 0 - the GDI, often produces a file format called Enhanced MetaFile (EMF). The EMF is processed by the printer driver and converted to the printer-specific file format. </p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> - <a class="indexterm" name="id400777"></a> -<a class="indexterm" name="id400784"></a> -<a class="indexterm" name="id400791"></a> + <a class="indexterm" name="id400771"></a> +<a class="indexterm" name="id400778"></a> +<a class="indexterm" name="id400785"></a> To the GDI foundation in MS Windows, Apple has chosen to put paper and screen output on a common foundation - for its (BSD-UNIX-based, did you know?) Mac OS X and Darwin operating <a class="indexterm" name="id400799"></a> <a class="indexterm" name="id400806"></a> - <a class="indexterm" name="id400813"></a> <a class="indexterm" name="id400819"></a> systems. + for its (BSD-UNIX-based, did you know?) Mac OS X and Darwin operating <a class="indexterm" name="id400793"></a> <a class="indexterm" name="id400800"></a> + <a class="indexterm" name="id400807"></a> <a class="indexterm" name="id400813"></a> systems. 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. </p></div><p> The example in <a class="link" href="CUPS-printing.html#f1small" title="Figure 22.1. Windows Printing to a Local Printer.">Windows Printing to a Local Printer</a> illustrates local Windows printing. - </p><div class="figure"><a name="f1small"></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" title="UNIX Printfile Conversion and GUI Basics"><div class="titlepage"><div><div><h3 class="title"><a name="id400887"></a>UNIX Printfile Conversion and GUI Basics</h3></div></div></div><p> - <a class="indexterm" name="id400895"></a> - <a class="indexterm" name="id400902"></a> + </p><div class="figure"><a name="f1small"></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" title="UNIX Printfile Conversion and GUI Basics"><div class="titlepage"><div><div><h3 class="title"><a name="id400881"></a>UNIX Printfile Conversion and GUI Basics</h3></div></div></div><p> + <a class="indexterm" name="id400889"></a> + <a class="indexterm" name="id400896"></a> + <a class="indexterm" name="id400903"></a> <a class="indexterm" name="id400909"></a> - <a class="indexterm" name="id400916"></a> In UNIX and Linux, there is no comparable layer built into the OS kernel(s) or the X (screen display) server. Every application is responsible for itself to create its print output. Fortunately, most use PostScript and that at least gives some common ground. Unfortunately, there are many different levels of quality for this @@ -363,16 +363,16 @@ application/octet-stream application/vnd.cups-raw 0 - unfavorable inheritance up to the present day by looking into the various <span class="quote">“<span class="quote">font</span>”</span> directories on your system; there are separate ones for fonts used for X display and fonts to be used on paper. </p><p title="Background"><b>Background. </b> - <a class="indexterm" name="id400956"></a> -<a class="indexterm" name="id400962"></a> -<a class="indexterm" name="id400969"></a> -<a class="indexterm" name="id400976"></a> -<a class="indexterm" name="id400983"></a> + <a class="indexterm" name="id400950"></a> +<a class="indexterm" name="id400956"></a> +<a class="indexterm" name="id400963"></a> +<a class="indexterm" name="id400970"></a> +<a class="indexterm" name="id400977"></a> +<a class="indexterm" name="id400984"></a> <a class="indexterm" name="id400990"></a> -<a class="indexterm" name="id400996"></a> -<a class="indexterm" name="id401003"></a> -<a class="indexterm" name="id401010"></a> -<a class="indexterm" name="id401017"></a> +<a class="indexterm" name="id400997"></a> +<a class="indexterm" name="id401004"></a> +<a class="indexterm" name="id401011"></a> The PostScript programming language is an <span class="quote">“<span class="quote">invention</span>”</span> by Adobe, but its specifications have been published extensively. Its strength lies in its powerful abilities to describe graphical objects (fonts, shapes, patterns, lines, curves, and dots), their attributes (color, linewidth), and the way to manipulate @@ -384,11 +384,11 @@ application/octet-stream application/vnd.cups-raw 0 - interpreted by a rasterizer. Rasterizers produce pixel images, which may be displayed on screen by a viewer program or on paper by a printer. </p></div><div class="sect2" title="PostScript and Ghostscript"><div class="titlepage"><div><div><h3 class="title"><a name="post-and-ghost"></a>PostScript and Ghostscript</h3></div></div></div><p> - <a class="indexterm" name="id401057"></a> - <a class="indexterm" name="id401064"></a> - <a class="indexterm" name="id401073"></a> -<a class="indexterm" name="id401082"></a> -<a class="indexterm" name="id401089"></a> + <a class="indexterm" name="id401051"></a> + <a class="indexterm" name="id401058"></a> + <a class="indexterm" name="id401067"></a> +<a class="indexterm" name="id401076"></a> +<a class="indexterm" name="id401083"></a> So UNIX is lacking a common ground for printing on paper and displaying on screen. Despite this unfavorable legacy for UNIX, basic printing is fairly easy if you have PostScript printers at your disposal. The reason is that these devices have a built-in PostScript language <span class="quote">“<span class="quote">interpreter,</span>”</span> also called a raster image @@ -397,31 +397,31 @@ application/octet-stream application/vnd.cups-raw 0 - commands into a bitmap picture as you see it on paper, in a resolution as done by your printer. This is no different than PostScript printing a file from a Windows origin. </p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> - <a class="indexterm" name="id401112"></a> + <a class="indexterm" name="id401106"></a> +<a class="indexterm" name="id401112"></a> <a class="indexterm" name="id401119"></a> -<a class="indexterm" name="id401125"></a> Traditional UNIX programs and printing systems while using PostScript are largely not PPD-aware. PPDs are <span class="quote">“<span class="quote">PostScript Printer Description</span>”</span> files. They enable you to specify and control all options a printer supports: duplexing, stapling, and punching. Therefore, UNIX users for a long time couldn't choose many of the supported device and job options, unlike Windows or Apple users. But now there is CUPS. as illustrated in <a class="link" href="CUPS-printing.html#f2small" title="Figure 22.2. Printing to a PostScript Printer.">Printing to a PostScript Printer</a>. </p></div><div class="figure"><a name="f2small"></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> - <a class="indexterm" name="id401199"></a> + <a class="indexterm" name="id401193"></a> However, there are other types of printers out there. These do not know how to print PostScript. They use their own PDL, often proprietary. To print to them is much more demanding. Since your UNIX applications mostly produce PostScript, and since these devices do not understand PostScript, you need to convert the print files to a format suitable for your printer on the host before you can send it away. - </p></div><div class="sect2" title="Ghostscript: The Software RIP for Non-PostScript Printers"><div class="titlepage"><div><div><h3 class="title"><a name="id401211"></a>Ghostscript: The Software RIP for Non-PostScript Printers</h3></div></div></div><p> - <a class="indexterm" name="id401220"></a> + </p></div><div class="sect2" title="Ghostscript: The Software RIP for Non-PostScript Printers"><div class="titlepage"><div><div><h3 class="title"><a name="id401205"></a>Ghostscript: The Software RIP for Non-PostScript Printers</h3></div></div></div><p> + <a class="indexterm" name="id401213"></a> Here is where Ghostscript kicks in. Ghostscript is the traditional (and quite powerful) PostScript interpreter used on UNIX platforms. It is a RIP in software, capable of doing a <span class="emphasis"><em>lot</em></span> of file format conversions for a very broad spectrum of hardware devices as well as software file formats. Ghostscript technology and drivers are what enable PostScript printing to non-PostScript hardware. This is shown in <a class="link" href="CUPS-printing.html#f3small" title="Figure 22.3. Ghostscript as a RIP for Non-PostScript Printers.">Ghostscript as a RIP for Non-PostScript Printers</a>. </p><div class="figure"><a name="f3small"></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" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p> +<a class="indexterm" name="id401280"></a> <a class="indexterm" name="id401286"></a> -<a class="indexterm" name="id401292"></a> -<a class="indexterm" name="id401299"></a> +<a class="indexterm" name="id401293"></a> Use the <span class="quote">“<span class="quote">gs -h</span>”</span> command to check for all built-in <span class="quote">“<span class="quote">devices</span>”</span> on your Ghostscript version. If you specify a parameter of <em class="parameter"><code>-sDEVICE=png256</code></em> on your Ghostscript command line, you are asking Ghostscript to convert the input into a PNG file. Naming a <span class="quote">“<span class="quote">device</span>”</span> on the @@ -429,14 +429,14 @@ application/octet-stream application/vnd.cups-raw 0 - input. New Ghostscript versions are released at fairly regular intervals, now by artofcode LLC. They are initially put under the <span class="quote">“<span class="quote">AFPL</span>”</span> license, but re-released under the GNU GPL as soon as the next AFPL version appears. GNU Ghostscript is probably the version installed on most Samba systems. But it has some - deficiencies. <a class="indexterm" name="id401332"></a> Therefore, ESP Ghostscript was developed as an enhancement over GNU Ghostscript, + deficiencies. <a class="indexterm" name="id401326"></a> Therefore, ESP Ghostscript was developed as an enhancement over GNU Ghostscript, with lots of bug-fixes, additional devices, and improvements. It is jointly maintained by developers from CUPS, Gutenprint, MandrakeSoft, SuSE, Red Hat, and Debian. It includes the <span class="quote">“<span class="quote">cups</span>”</span> device (essential to print to non-PS printers from CUPS). - </p></div></div><div class="sect2" title="PostScript Printer Description (PPD) Specification"><div class="titlepage"><div><div><h3 class="title"><a name="id401352"></a>PostScript Printer Description (PPD) Specification</h3></div></div></div><p> - <a class="indexterm" name="id401360"></a> -<a class="indexterm" name="id401366"></a> -<a class="indexterm" name="id401373"></a> + </p></div></div><div class="sect2" title="PostScript Printer Description (PPD) Specification"><div class="titlepage"><div><div><h3 class="title"><a name="id401346"></a>PostScript Printer Description (PPD) Specification</h3></div></div></div><p> + <a class="indexterm" name="id401354"></a> +<a class="indexterm" name="id401360"></a> +<a class="indexterm" name="id401367"></a> While PostScript in essence is a PDL to represent the page layout in a device-independent way, real-world print jobs are always ending up being output on hardware with device-specific features. To take care of all the differences in hardware and to allow for innovations, Adobe has specified a syntax and file format for @@ -458,17 +458,17 @@ application/octet-stream application/vnd.cups-raw 0 - PostScript, PJL, JCL, or vendor-dependent commands) into the PostScript file created by the driver. </p><div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p> - <a class="indexterm" name="id401402"></a> -<a class="indexterm" name="id401409"></a> + <a class="indexterm" name="id401396"></a> +<a class="indexterm" name="id401402"></a> A PostScript file that was created to contain device-specific commands for achieving a certain print job output (e.g., duplexed, stapled, and punched) on a specific target machine may not print as expected, or may not be printable at all on other models; it also may not be fit for further processing by software (e.g., by a PDF distilling program). - </p></div></div><div class="sect2" title="Using Windows-Formatted Vendor PPDs"><div class="titlepage"><div><div><h3 class="title"><a name="id401421"></a>Using Windows-Formatted Vendor PPDs</h3></div></div></div><p> -<a class="indexterm" name="id401428"></a> -<a class="indexterm" name="id401435"></a> -<a class="indexterm" name="id401442"></a> + </p></div></div><div class="sect2" title="Using Windows-Formatted Vendor PPDs"><div class="titlepage"><div><div><h3 class="title"><a name="id401414"></a>Using Windows-Formatted Vendor PPDs</h3></div></div></div><p> +<a class="indexterm" name="id401422"></a> +<a class="indexterm" name="id401429"></a> +<a class="indexterm" name="id401436"></a> CUPS can handle all spec-compliant PPDs as supplied by the manufacturers for their PostScript models. Even if a vendor does not mention our favorite OS in his or her manuals and brochures, you can safely trust this: <span class="emphasis"><em>If you get the Windows NT version of the PPD, you can use it unchanged in CUPS</em></span> and thus @@ -479,31 +479,31 @@ application/octet-stream application/vnd.cups-raw 0 - parsing and checking code enabled; in case of printing trouble, this online resource should be one of your first pit stops. </p></div><div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p> - <a class="indexterm" name="id401475"></a> - <a class="indexterm" name="id401482"></a> + <a class="indexterm" name="id401469"></a> + <a class="indexterm" name="id401476"></a> For real PostScript printers, <span class="emphasis"><em>do not</em></span> use the <span class="emphasis"><em>Foomatic</em></span> or <span class="emphasis"><em>cupsomatic</em></span> PPDs from Linuxprinting.org. With these devices, the original vendor-provided PPDs are always the first choice. </p></div><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p> -<a class="indexterm" name="id401506"></a> +<a class="indexterm" name="id401499"></a> If you are looking for an original vendor-provided PPD of a specific device, and you know that an NT4 box (or any other Windows box) on your LAN has the PostScript driver installed, just use <code class="literal">smbclient //NT4-box/print\$ -U username</code> to access the Windows directory where all printer driver files are stored. First look in the <code class="filename">W32X86/2</code> subdirectory for the PPD you are seeking. - </p></div></div><div class="sect2" title="CUPS Also Uses PPDs for Non-PostScript Printers"><div class="titlepage"><div><div><h3 class="title"><a name="id401529"></a>CUPS Also Uses PPDs for Non-PostScript Printers</h3></div></div></div><p> -<a class="indexterm" name="id401537"></a> -<a class="indexterm" name="id401544"></a> -<a class="indexterm" name="id401551"></a> + </p></div></div><div class="sect2" title="CUPS Also Uses PPDs for Non-PostScript Printers"><div class="titlepage"><div><div><h3 class="title"><a name="id401523"></a>CUPS Also Uses PPDs for Non-PostScript Printers</h3></div></div></div><p> +<a class="indexterm" name="id401531"></a> +<a class="indexterm" name="id401538"></a> +<a class="indexterm" name="id401545"></a> CUPS also uses specially crafted PPDs to handle non-PostScript printers. These PPDs are usually not available from the vendors (and no, you can't just take the PPD of a PostScript printer with the same model name and hope it works for the non-PostScript version too). To understand how these PPDs work for non-PS printers, we first need to dive deeply into the CUPS filtering and file format conversion architecture. Stay tuned. - </p></div></div><div class="sect1" title="The CUPS Filtering Architecture"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id401564"></a>The CUPS Filtering Architecture</h2></div></div></div><p> -<a class="indexterm" name="id401572"></a> -<a class="indexterm" name="id401579"></a> -<a class="indexterm" name="id401586"></a> + </p></div></div><div class="sect1" title="The CUPS Filtering Architecture"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id401558"></a>The CUPS Filtering Architecture</h2></div></div></div><p> +<a class="indexterm" name="id401566"></a> +<a class="indexterm" name="id401573"></a> +<a class="indexterm" name="id401580"></a> +<a class="indexterm" name="id401587"></a> <a class="indexterm" name="id401593"></a> -<a class="indexterm" name="id401600"></a> The core of the CUPS filtering system is based on Ghostscript. In addition to Ghostscript, CUPS uses some other filters of its own. You (or your OS vendor) may have plugged in even more filters. CUPS handles all data file formats under the label of various MIME types. Every incoming print file is subjected to an initial @@ -514,82 +514,82 @@ given input data format. </p><p> If CUPS rasterizes a PostScript file natively to a bitmap, this is done in two stages: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> +<a class="indexterm" name="id401616"></a> <a class="indexterm" name="id401623"></a> -<a class="indexterm" name="id401629"></a> The first stage uses a Ghostscript device named <span class="quote">“<span class="quote">cups</span>”</span> (this is since version 1.1.15) and produces a generic raster format called <span class="quote">“<span class="quote">CUPS raster</span>”</span>. </p></li><li class="listitem"><p> -<a class="indexterm" name="id401649"></a> +<a class="indexterm" name="id401643"></a> The second stage uses a <span class="quote">“<span class="quote">raster driver</span>”</span> that converts the generic CUPS raster to a device-specific raster. </p></li></ul></div><p> -<a class="indexterm" name="id401664"></a> -<a class="indexterm" name="id401671"></a> -<a class="indexterm" name="id401678"></a> +<a class="indexterm" name="id401658"></a> +<a class="indexterm" name="id401665"></a> +<a class="indexterm" name="id401672"></a> Make sure your Ghostscript version has the <span class="quote">“<span class="quote">cups</span>”</span> device compiled in (check with <code class="literal">gs -h | grep cups</code>). Otherwise you may encounter the dreaded <code class="computeroutput">Unable to convert file 0</code> in your CUPS error_log file. To have <span class="quote">“<span class="quote">cups</span>”</span> as a device in your Ghostscript, you either need to patch GNU Ghostscript and recompile or use -<a class="indexterm" name="id401706"></a><a class="ulink" href="http://www.cups.org/ghostscript.php" target="_top">ESP Ghostscript</a>. The superior alternative is ESP +<a class="indexterm" name="id401700"></a><a class="ulink" href="http://www.cups.org/ghostscript.php" target="_top">ESP Ghostscript</a>. The superior alternative is ESP Ghostscript. It supports not just CUPS, but 300 other devices (while GNU Ghostscript supports only about 180). Because of this broad output device support, ESP Ghostscript is the first choice for non-CUPS spoolers, too. It is now recommended by Linuxprinting.org for all spoolers. </p><p> +<a class="indexterm" name="id401720"></a> <a class="indexterm" name="id401726"></a> <a class="indexterm" name="id401733"></a> -<a class="indexterm" name="id401739"></a> -<a class="indexterm" name="id401746"></a> +<a class="indexterm" name="id401740"></a> CUPS printers may be set up to use external rendering paths. One of the most common is provided by the Foomatic/cupsomatic concept from <a class="ulink" href="http://www.linuxprinting.org/" target="_top">Linuxprinting.org</a>. This uses the classical Ghostscript approach, doing everything in one step. It does not use the <span class="quote">“<span class="quote">cups</span>”</span> device, but one of the many others. However, even for Foomatic/cupsomatic usage, best -results and <a class="indexterm" name="id401766"></a> broadest printer +results and <a class="indexterm" name="id401759"></a> broadest printer model support is provided by ESP Ghostscript (more about Foomatic/cupsomatic, particularly the new version called now <span class="emphasis"><em>foomatic-rip</em></span>, follows). -</p><div class="sect2" title="MIME Types and CUPS Filters"><div class="titlepage"><div><div><h3 class="title"><a name="id401781"></a>MIME Types and CUPS Filters</h3></div></div></div><p> - <a class="indexterm" name="id401788"></a> - <a class="indexterm" name="id401798"></a> -<a class="indexterm" name="id401804"></a> -<a class="indexterm" name="id401811"></a> -<a class="indexterm" name="id401818"></a> +</p><div class="sect2" title="MIME Types and CUPS Filters"><div class="titlepage"><div><div><h3 class="title"><a name="id401774"></a>MIME Types and CUPS Filters</h3></div></div></div><p> + <a class="indexterm" name="id401782"></a> + <a class="indexterm" name="id401792"></a> +<a class="indexterm" name="id401798"></a> +<a class="indexterm" name="id401805"></a> +<a class="indexterm" name="id401812"></a> CUPS reads the file <code class="filename">/etc/cups/mime.types</code> (and all other files carrying a <code class="filename">*.types</code> suffix in the same directory) upon startup. These files contain the MIME type recognition rules that are applied when CUPS runs its autotyping routines. The rule syntax is explained in the man page for <code class="filename">mime.types</code> and in the comments section of the <code class="filename">mime.types</code> file itself. A simple rule reads like this: - <a class="indexterm" name="id401851"></a> + <a class="indexterm" name="id401845"></a> </p><pre class="programlisting"> application/pdf pdf string(0,%PDF) </pre><p> -<a class="indexterm" name="id401864"></a> -<a class="indexterm" name="id401871"></a> +<a class="indexterm" name="id401858"></a> +<a class="indexterm" name="id401865"></a> This means if a filename has a <code class="filename">.pdf</code> suffix or if the magic string <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 PDF file (<em class="parameter"><code>application/pdf</code></em>). Another rule is this: </p><pre class="programlisting"> application/postscript ai eps ps string(0,%!) string(0,<04>%!) </pre><p> -<a class="indexterm" name="id401901"></a> -<a class="indexterm" name="id401908"></a> -<a class="indexterm" name="id401915"></a> -<a class="indexterm" name="id401922"></a> +<a class="indexterm" name="id401895"></a> +<a class="indexterm" name="id401902"></a> +<a class="indexterm" name="id401909"></a> +<a class="indexterm" name="id401916"></a> +<a class="indexterm" name="id401923"></a> <a class="indexterm" name="id401929"></a> -<a class="indexterm" name="id401936"></a> If the filename has one of the suffixes <code class="filename">.ai</code>, <code class="filename">.eps</code>, <code class="filename">.ps</code>, or if the file itself starts with one of the strings <span class="emphasis"><em>%!</em></span> or <span class="emphasis"><em><04>%!</em></span>, it is a generic PostScript file (<em class="parameter"><code>application/postscript</code></em>). </p><div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p> -<a class="indexterm" name="id401978"></a> +<a class="indexterm" name="id401972"></a> Don't confuse the other mime.types files your system might be using with the one in the <code class="filename">/etc/cups/</code> directory. </p></div><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> -<a class="indexterm" name="id401996"></a> -<a class="indexterm" name="id402003"></a> +<a class="indexterm" name="id401990"></a> +<a class="indexterm" name="id401997"></a> +<a class="indexterm" name="id402004"></a> <a class="indexterm" name="id402010"></a> -<a class="indexterm" name="id402016"></a> -<a class="indexterm" name="id402023"></a> +<a class="indexterm" name="id402017"></a> There is an important difference between two similar MIME types in CUPS: one is <em class="parameter"><code>application/postscript</code></em>, the other is <em class="parameter"><code>application/vnd.cups-postscript</code></em>. While <em class="parameter"><code>application/postscript</code></em> is @@ -600,32 +600,32 @@ application/postscript ai eps ps string(0,%!) string(0,<04>%!) (<em class="parameter"><code>application/vnd.cups-postscript</code></em>) is the responsibility of the CUPS <em class="parameter"><code>pstops</code></em> filter. pstops uses information contained in the PPD to do the transformation. </p></div><p> -<a class="indexterm" name="id402079"></a> -<a class="indexterm" name="id402086"></a> +<a class="indexterm" name="id402073"></a> +<a class="indexterm" name="id402080"></a> +<a class="indexterm" name="id402087"></a> <a class="indexterm" name="id402093"></a> -<a class="indexterm" name="id402099"></a> +<a class="indexterm" name="id402100"></a> <a class="indexterm" name="id402106"></a> <a class="indexterm" name="id402113"></a> -<a class="indexterm" name="id402119"></a> +<a class="indexterm" name="id402120"></a> <a class="indexterm" name="id402126"></a> -<a class="indexterm" name="id402132"></a> -<a class="indexterm" name="id402139"></a> -<a class="indexterm" name="id402146"></a> -<a class="indexterm" name="id402153"></a> -<a class="indexterm" name="id402160"></a> +<a class="indexterm" name="id402133"></a> +<a class="indexterm" name="id402140"></a> +<a class="indexterm" name="id402147"></a> +<a class="indexterm" name="id402154"></a> +<a class="indexterm" name="id402161"></a> <a class="indexterm" name="id402167"></a> <a class="indexterm" name="id402174"></a> -<a class="indexterm" name="id402180"></a> CUPS can handle ASCII text, HP-GL, PDF, PostScript, DVI, and many image formats (GIF, PNG, TIFF, JPEG, Photo-CD, SUN-Raster, PNM, PBM, SGI-RGB, and more) and their associated MIME types with its filters. - </p></div><div class="sect2" title="MIME Type Conversion Rules"><div class="titlepage"><div><div><h3 class="title"><a name="id402191"></a>MIME Type Conversion Rules</h3></div></div></div><p> - <a class="indexterm" name="id402199"></a> - <a class="indexterm" name="id402206"></a> + </p></div><div class="sect2" title="MIME Type Conversion Rules"><div class="titlepage"><div><div><h3 class="title"><a name="id402185"></a>MIME Type Conversion Rules</h3></div></div></div><p> + <a class="indexterm" name="id402193"></a> + <a class="indexterm" name="id402200"></a> +<a class="indexterm" name="id402206"></a> <a class="indexterm" name="id402213"></a> -<a class="indexterm" name="id402219"></a> -<a class="indexterm" name="id402226"></a> +<a class="indexterm" name="id402220"></a> CUPS reads the file <code class="filename">/etc/cups/mime.convs</code> (and all other files named with a <code class="filename">*.convs</code> suffix in the same directory) upon startup. These files contain @@ -636,44 +636,44 @@ application/postscript ai eps ps string(0,%!) string(0,<04>%!) </p><pre class="programlisting"> application/pdf application/postscript 33 pdftops </pre><p> -<a class="indexterm" name="id402254"></a> +<a class="indexterm" name="id402248"></a> This means that the <em class="parameter"><code>pdftops</code></em> filter will take <em class="parameter"><code>application/pdf</code></em> as input and produce <em class="parameter"><code>application/postscript</code></em> as output; the virtual cost of this operation is 33 CUPS-$. The next filter is more expensive, costing 66 CUPS-$: - <a class="indexterm" name="id402280"></a> + <a class="indexterm" name="id402274"></a> </p><pre class="programlisting"> application/vnd.hp-HPGL application/postscript 66 hpgltops </pre><p> -<a class="indexterm" name="id402293"></a> +<a class="indexterm" name="id402287"></a> This is the <em class="parameter"><code>hpgltops</code></em>, which processes HP-GL plotter files to PostScript. - <a class="indexterm" name="id402306"></a> + <a class="indexterm" name="id402300"></a> </p><pre class="programlisting"> application/octet-stream </pre><p> Here are two more examples: - <a class="indexterm" name="id402319"></a> -<a class="indexterm" name="id402326"></a> -<a class="indexterm" name="id402333"></a> -<a class="indexterm" name="id402340"></a> + <a class="indexterm" name="id402313"></a> +<a class="indexterm" name="id402320"></a> +<a class="indexterm" name="id402327"></a> +<a class="indexterm" name="id402334"></a> </p><pre class="programlisting"> application/x-shell application/postscript 33 texttops text/plain application/postscript 33 texttops </pre><p> -<a class="indexterm" name="id402353"></a> +<a class="indexterm" name="id402347"></a> The last two examples name the <em class="parameter"><code>texttops</code></em> filter to work on <em class="parameter"><code>text/plain</code></em> as well as on <em class="parameter"><code>application/x-shell</code></em>. (Hint: This differentiation is needed for the syntax highlighting feature of <em class="parameter"><code>texttops</code></em>). - </p></div><div class="sect2" title="Filtering Overview"><div class="titlepage"><div><div><h3 class="title"><a name="id402387"></a>Filtering Overview</h3></div></div></div><p> - <a class="indexterm" name="id402395"></a> + </p></div><div class="sect2" title="Filtering Overview"><div class="titlepage"><div><div><h3 class="title"><a name="id402381"></a>Filtering Overview</h3></div></div></div><p> + <a class="indexterm" name="id402389"></a> There are many more combinations named in <code class="filename">mime.convs</code>. However, you are not limited to use the ones predefined there. You can plug in any filter you like to the CUPS framework. It must meet, or must be made to meet, some minimal requirements. If you find (or write) a cool conversion filter of some kind, make sure it complies with what CUPS needs and put in the right lines in <code class="filename">mime.types</code> and <code class="filename">mime.convs</code>; then it will work seamlessly inside CUPS. - </p><div class="sect3" title="Filter Requirements"><div class="titlepage"><div><div><h4 class="title"><a name="id402424"></a>Filter Requirements</h4></div></div></div><p> + </p><div class="sect3" title="Filter Requirements"><div class="titlepage"><div><div><h4 class="title"><a name="id402418"></a>Filter Requirements</h4></div></div></div><p> The <span class="quote">“<span class="quote">CUPS requirements</span>”</span> for filters are simple. Take filenames or <code class="filename">stdin</code> as input and write to <code class="filename">stdout</code>. They should take these arguments: </p><div class="variablelist"><dl><dt><span class="term">printer</span></dt><dd><p> @@ -692,24 +692,24 @@ text/plain application/postscript 33 texttops (optionally) The print request file (if missing, filters expect data fed through <code class="filename">stdin</code>). In most cases, it is easy to write a simple wrapper script around existing filters to make them work with CUPS. - </p></dd></dl></div></div></div><div class="sect2" title="Prefilters"><div class="titlepage"><div><div><h3 class="title"><a name="id402536"></a>Prefilters</h3></div></div></div><p> - <a class="indexterm" name="id402543"></a> -<a class="indexterm" name="id402550"></a> -<a class="indexterm" name="id402557"></a> + </p></dd></dl></div></div></div><div class="sect2" title="Prefilters"><div class="titlepage"><div><div><h3 class="title"><a name="id402529"></a>Prefilters</h3></div></div></div><p> + <a class="indexterm" name="id402537"></a> +<a class="indexterm" name="id402544"></a> +<a class="indexterm" name="id402551"></a> As previously stated, PostScript is the central file format to any UNIX-based printing system. From PostScript, CUPS generates raster data to feed non-PostScript printers. </p><p> -<a class="indexterm" name="id402568"></a> -<a class="indexterm" name="id402575"></a> -<a class="indexterm" name="id402582"></a> +<a class="indexterm" name="id402562"></a> +<a class="indexterm" name="id402569"></a> +<a class="indexterm" name="id402576"></a> +<a class="indexterm" name="id402583"></a> <a class="indexterm" name="id402589"></a> -<a class="indexterm" name="id402595"></a> -<a class="indexterm" name="id402602"></a> +<a class="indexterm" name="id402596"></a> +<a class="indexterm" name="id402603"></a> <a class="indexterm" name="id402609"></a> <a class="indexterm" name="id402616"></a> -<a class="indexterm" name="id402622"></a> -<a class="indexterm" name="id402629"></a> +<a class="indexterm" name="id402623"></a> But what happens if you send one of the supported non-PS formats to print? Then CUPS runs <span class="quote">“<span class="quote">prefilters</span>”</span> on these input formats to generate PostScript first. There are prefilters to create PostScript from ASCII text, PDF, DVI, or HP-GL. The outcome of these filters is always of MIME type @@ -719,14 +719,14 @@ text/plain application/postscript 33 texttops MIME type <em class="parameter"><code>application/vnd.cups-postscript</code></em> (not application/postscript), meaning it has the print options already embedded into the file. This is shown in <a class="link" href="CUPS-printing.html#f4small" title="Figure 22.4. Prefiltering in CUPS to Form PostScript.">Prefiltering in CUPS to Form PostScript</a>. - </p><div class="figure"><a name="f4small"></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" title="pstops"><div class="titlepage"><div><div><h3 class="title"><a name="id402714"></a>pstops</h3></div></div></div><p> + </p><div class="figure"><a name="f4small"></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" title="pstops"><div class="titlepage"><div><div><h3 class="title"><a name="id402708"></a>pstops</h3></div></div></div><p> +<a class="indexterm" name="id402716"></a> <a class="indexterm" name="id402722"></a> -<a class="indexterm" name="id402728"></a> -<a class="indexterm" name="id402735"></a> -<a class="indexterm" name="id402742"></a> -<a class="indexterm" name="id402749"></a> +<a class="indexterm" name="id402729"></a> +<a class="indexterm" name="id402736"></a> +<a class="indexterm" name="id402743"></a> +<a class="indexterm" name="id402750"></a> <a class="indexterm" name="id402756"></a> -<a class="indexterm" name="id402763"></a> <span class="emphasis"><em>pstops</em></span> is a filter that is used to convert <em class="parameter"><code>application/postscript</code></em> to <em class="parameter"><code>application/vnd.cups-postscript</code></em>. As stated earlier, this filter inserts all device-specific print options (commands to the printer to ask for the duplexing of output, or stapling and @@ -742,10 +742,10 @@ text/plain application/postscript 33 texttops so-called <span class="quote">“<span class="quote">number-up</span>”</span> function). </p></li><li class="listitem"><p>Counting the pages of the job to insert the accounting information into the <code class="filename">/var/log/cups/page_log</code>. - </p></li></ul></div></div><div class="sect2" title="pstoraster"><div class="titlepage"><div><div><h3 class="title"><a name="id402874"></a>pstoraster</h3></div></div></div><p> + </p></li></ul></div></div><div class="sect2" title="pstoraster"><div class="titlepage"><div><div><h3 class="title"><a name="id402868"></a>pstoraster</h3></div></div></div><p> +<a class="indexterm" name="id402876"></a> <a class="indexterm" name="id402882"></a> <a class="indexterm" name="id402889"></a> -<a class="indexterm" name="id402895"></a> <em class="parameter"><code>pstoraster</code></em> is at the core of the CUPS filtering system. It is responsible for the first stage of the rasterization process. Its input is of MIME type application/vnd.cups-postscript; its output is application/vnd.cups-raster. This output format is not yet meant to be printable. Its aim is to serve as a @@ -753,10 +753,10 @@ text/plain application/postscript 33 texttops generate device-specific printer data. This is shown in <a class="link" href="CUPS-printing.html#cups-raster" title="Figure 22.6. PostScript to Intermediate Raster Format.">the PostScript to Intermediate Raster Format diagram</a>. </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> -<a class="indexterm" name="id402966"></a> -<a class="indexterm" name="id402973"></a> -<a class="indexterm" name="id402980"></a> -<a class="indexterm" name="id402987"></a> +<a class="indexterm" name="id402960"></a> +<a class="indexterm" name="id402967"></a> +<a class="indexterm" name="id402974"></a> +<a class="indexterm" name="id402981"></a> CUPS raster is a generic raster format with powerful features. It is able to include per-page information, color profiles, and more, to be used by the downstream raster drivers. Its MIME type is registered with IANA and its specification is, of course, completely open. It is designed to make it quite easy and inexpensive for @@ -766,10 +766,10 @@ text/plain application/postscript 33 texttops raster drivers). This is illustrated in <a class="link" href="CUPS-printing.html#cups-raster2" title="Figure 22.7. CUPS-Raster Production Using Ghostscript.">the CUPS-Raster Production Using Ghostscript illustration</a>. </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> -<a class="indexterm" name="id403052"></a> +<a class="indexterm" name="id403046"></a> +<a class="indexterm" name="id403053"></a> <a class="indexterm" name="id403059"></a> <a class="indexterm" name="id403066"></a> -<a class="indexterm" name="id403072"></a> CUPS versions before version 1.1.15 shipped a binary (or source code) standalone filter, named <em class="parameter"><code>pstoraster</code></em>. <em class="parameter"><code>pstoraster</code></em>, which was derived from GNU Ghostscript 5.50 and could be installed instead of and in addition to any GNU or AFPL Ghostscript package without @@ -780,27 +780,27 @@ text/plain application/postscript 33 texttops now a simple shell script calling <code class="literal">gs</code> with the <code class="literal">-sDEVICE=cups</code> parameter. If your Ghostscript fails when this command is executed: <code class="literal">gs -h |grep cups</code>, you might not be able to print, update your Ghostscript. - </p></div><div class="sect2" title="imagetops and imagetoraster"><div class="titlepage"><div><div><h3 class="title"><a name="id403125"></a>imagetops and imagetoraster</h3></div></div></div><p> -<a class="indexterm" name="id403133"></a> -<a class="indexterm" name="id403140"></a> + </p></div><div class="sect2" title="imagetops and imagetoraster"><div class="titlepage"><div><div><h3 class="title"><a name="id403119"></a>imagetops and imagetoraster</h3></div></div></div><p> +<a class="indexterm" name="id403127"></a> +<a class="indexterm" name="id403134"></a> In the section about prefilters, we mentioned the prefilter that generates PostScript from image formats. The <em class="parameter"><code>imagetoraster</code></em> filter is used to convert directly from image to raster, without the intermediate PostScript stage. It is used more often than the previously mentioned prefilters. We summarize in a flowchart the image file 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>. - </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" title="rasterto [printers specific]"><div class="titlepage"><div><div><h3 class="title"><a name="id403205"></a>rasterto [printers specific]</h3></div></div></div><p> -<a class="indexterm" name="id403213"></a> + </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" title="rasterto [printers specific]"><div class="titlepage"><div><div><h3 class="title"><a name="id403199"></a>rasterto [printers specific]</h3></div></div></div><p> +<a class="indexterm" name="id403207"></a> +<a class="indexterm" name="id403214"></a> <a class="indexterm" name="id403220"></a> <a class="indexterm" name="id403227"></a> -<a class="indexterm" name="id403233"></a> -<a class="indexterm" name="id403240"></a> -<a class="indexterm" name="id403247"></a> +<a class="indexterm" name="id403234"></a> +<a class="indexterm" name="id403241"></a> +<a class="indexterm" name="id403248"></a> <a class="indexterm" name="id403254"></a> <a class="indexterm" name="id403261"></a> -<a class="indexterm" name="id403267"></a> -<a class="indexterm" name="id403274"></a> -<a class="indexterm" name="id403281"></a> +<a class="indexterm" name="id403268"></a> +<a class="indexterm" name="id403275"></a> CUPS ships with quite a variety of raster drivers for processing CUPS raster. On my system, I find in /usr/lib/cups/filter/ the following: <em class="parameter"><code>rastertoalps</code></em>, <em class="parameter"><code>rastertobj</code></em>, <em class="parameter"><code>rastertoepson</code></em>, <em class="parameter"><code>rastertoescp</code></em>, <em class="parameter"><code>rastertopcl</code></em>, @@ -811,9 +811,9 @@ text/plain application/postscript 33 texttops <em class="parameter"><code>rastertoprinter</code></em>) by third-party driver development projects (such as Gutenprint) 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 Printer-Specific Formats illustration</a>. - </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" title="CUPS Backends"><div class="titlepage"><div><div><h3 class="title"><a name="id403417"></a>CUPS Backends</h3></div></div></div><p> + </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" title="CUPS Backends"><div class="titlepage"><div><div><h3 class="title"><a name="id403411"></a>CUPS Backends</h3></div></div></div><p> +<a class="indexterm" name="id403419"></a> <a class="indexterm" name="id403425"></a> -<a class="indexterm" name="id403432"></a> The last part of any CUPS filtering chain is a backend. Backends are special programs that send the print-ready file to the final device. There is a separate backend program for any transfer @@ -887,8 +887,8 @@ text/plain application/postscript 33 texttops email back to the $USER asking him or her to always specify the correct printer name.) </p><p> -<a class="indexterm" name="id403683"></a> -<a class="indexterm" name="id403690"></a> +<a class="indexterm" name="id403677"></a> +<a class="indexterm" name="id403684"></a> Not all of the mentioned backends may be present on your system or usable (depending on your hardware configuration). One test for all available CUPS backends is provided by the <span class="emphasis"><em>lpinfo</em></span> @@ -896,12 +896,12 @@ text/plain application/postscript 33 texttops all available backends: </p><pre class="screen"> <code class="prompt">$ </code><strong class="userinput"><code>lpinfo -v</code></strong> - </pre></div><div class="sect2" title="The Role of cupsomatic/foomatic"><div class="titlepage"><div><div><h3 class="title"><a name="id403725"></a>The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></h3></div></div></div><p> - <a class="indexterm" name="id403737"></a> - <a class="indexterm" name="id403744"></a> -<a class="indexterm" name="id403751"></a> + </pre></div><div class="sect2" title="The Role of cupsomatic/foomatic"><div class="titlepage"><div><div><h3 class="title"><a name="id403719"></a>The Role of <em class="parameter"><code>cupsomatic/foomatic</code></em></h3></div></div></div><p> + <a class="indexterm" name="id403731"></a> + <a class="indexterm" name="id403738"></a> +<a class="indexterm" name="id403745"></a> +<a class="indexterm" name="id403752"></a> <a class="indexterm" name="id403758"></a> -<a class="indexterm" name="id403764"></a> <em class="parameter"><code>cupsomatic</code></em> filters may be the most widely used on CUPS installations. You must be clear that these were not developed by the CUPS people. They are a third-party add-on to @@ -925,17 +925,17 @@ text/plain application/postscript 33 texttops autoconstructed from the selected PPD and command line options given to the print job. </p><p> - <a class="indexterm" name="id403822"></a> -<a class="indexterm" name="id403828"></a> -<a class="indexterm" name="id403835"></a> -<a class="indexterm" name="id403842"></a> -<a class="indexterm" name="id403849"></a> + <a class="indexterm" name="id403816"></a> +<a class="indexterm" name="id403822"></a> +<a class="indexterm" name="id403829"></a> +<a class="indexterm" name="id403836"></a> +<a class="indexterm" name="id403843"></a> +<a class="indexterm" name="id403850"></a> <a class="indexterm" name="id403856"></a> -<a class="indexterm" name="id403862"></a> -<a class="indexterm" name="id403869"></a> -<a class="indexterm" name="id403876"></a> -<a class="indexterm" name="id403883"></a> -<a class="indexterm" name="id403890"></a> +<a class="indexterm" name="id403863"></a> +<a class="indexterm" name="id403870"></a> +<a class="indexterm" name="id403877"></a> +<a class="indexterm" name="id403884"></a> However, <em class="parameter"><code>cupsomatic</code></em> is now deprecated. Its PPDs (especially the first generation of them, still in heavy use out there) are not meeting the Adobe specifications. You might also suffer difficulties when you try @@ -957,11 +957,11 @@ text/plain application/postscript 33 texttops best thing is that the new <code class="constant">foomatic-rip</code> works seamlessly with all legacy spoolers too (like LPRng, BSD-LPD, PDQ, PPR, and so on), providing for them access to use PPDs for their printing. - </p></div><div class="sect2" title="The Complete Picture"><div class="titlepage"><div><div><h3 class="title"><a name="id403940"></a>The Complete Picture</h3></div></div></div><p> + </p></div><div class="sect2" title="The Complete Picture"><div class="titlepage"><div><div><h3 class="title"><a name="id403933"></a>The Complete Picture</h3></div></div></div><p> If you want to see an overview of all the filters and how they relate to each other, the complete picture of the puzzle is at the end of this chapter. - </p></div><div class="sect2" title="mime.convs"><div class="titlepage"><div><div><h3 class="title"><a name="id403951"></a><code class="filename">mime.convs</code></h3></div></div></div><p> + </p></div><div class="sect2" title="mime.convs"><div class="titlepage"><div><div><h3 class="title"><a name="id403945"></a><code class="filename">mime.convs</code></h3></div></div></div><p> CUPS autoconstructs all possible filtering chain paths for any given MIME type and every printer installed. But how does it decide in favor of or against a specific alternative? (There may be cases @@ -971,8 +971,8 @@ text/plain application/postscript 33 texttops assigned to this filter. Every possible filtering chain will sum up to a total <span class="quote">“<span class="quote">filter cost.</span>”</span> CUPS decides for the most <span class="quote">“<span class="quote">inexpensive</span>”</span> route. </p><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p> -<a class="indexterm" name="id403978"></a> -<a class="indexterm" name="id403985"></a> +<a class="indexterm" name="id403972"></a> +<a class="indexterm" name="id403979"></a> Setting <em class="parameter"><code>FilterLimit 1000</code></em> in <code class="filename">cupsd.conf</code> will not allow more filters to run concurrently than will consume a total of 1000 virtual filter @@ -980,10 +980,10 @@ text/plain application/postscript 33 texttops server by setting an appropriate <span class="quote">“<span class="quote">FilterLimit</span>”</span> value. A FilterLimit of 200 allows roughly one job at a time, while a FilterLimit of 1000 allows approximately five jobs maximum at a time. - </p></div></div><div class="sect2" title="“Raw” Printing"><div class="titlepage"><div><div><h3 class="title"><a name="id404012"></a><span class="quote">“<span class="quote">Raw</span>”</span> Printing</h3></div></div></div><p> -<a class="indexterm" name="id404022"></a> + </p></div></div><div class="sect2" title="“Raw” Printing"><div class="titlepage"><div><div><h3 class="title"><a name="id404006"></a><span class="quote">“<span class="quote">Raw</span>”</span> Printing</h3></div></div></div><p> +<a class="indexterm" name="id404016"></a> +<a class="indexterm" name="id404023"></a> <a class="indexterm" name="id404029"></a> -<a class="indexterm" name="id404036"></a> You can tell CUPS to print (nearly) any file <span class="quote">“<span class="quote">raw</span>”</span>. <span class="quote">“<span class="quote">Raw</span>”</span> means it will not be filtered. CUPS will send the file to the printer <span class="quote">“<span class="quote">as is</span>”</span> without bothering if the printer is able to digest it. Users need to take care themselves that they send sensible data formats only. Raw printing can @@ -1001,9 +1001,9 @@ text/plain application/postscript 33 texttops if it can't find a PPD associated with the queue. However, CUPS will only send known MIME types (as defined in its own mime.types file) and refuse others. - </p></div><div class="sect2" title="application/octet-stream Printing"><div class="titlepage"><div><div><h3 class="title"><a name="id404112"></a>application/octet-stream Printing</h3></div></div></div><p> -<a class="indexterm" name="id404120"></a> -<a class="indexterm" name="id404127"></a> + </p></div><div class="sect2" title="application/octet-stream Printing"><div class="titlepage"><div><div><h3 class="title"><a name="id404106"></a>application/octet-stream Printing</h3></div></div></div><p> +<a class="indexterm" name="id404114"></a> +<a class="indexterm" name="id404121"></a> Any MIME type with no rule in the <code class="filename">/etc/cups/mime.types</code> file is regarded as unknown or <em class="parameter"><code>application/octet-stream</code></em> and will not be sent. Because CUPS refuses to print unknown MIME types by default, @@ -1016,11 +1016,11 @@ text/plain application/postscript 33 texttops To enable the printing of <em class="parameter"><code>application/octet-stream</code></em> files, edit these two files: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="filename">/etc/cups/mime.convs</code></p></li><li class="listitem"><p><code class="filename">/etc/cups/mime.types</code></p></li></ul></div><p> -<a class="indexterm" name="id404188"></a> +<a class="indexterm" name="id404181"></a> Both contain entries (at the end of the respective files) that must be uncommented to allow raw mode operation for <em class="parameter"><code>application/octet-stream</code></em>. In <code class="filename">/etc/cups/mime.types</code> make sure this line is present: - <a class="indexterm" name="id404208"></a> + <a class="indexterm" name="id404202"></a> </p><pre class="programlisting"> application/octet-stream </pre><p> @@ -1031,7 +1031,7 @@ application/octet-stream </p><pre class="programlisting"> application/octet-stream application/vnd.cups-raw 0 - </pre><p> - <a class="indexterm" name="id404240"></a> + <a class="indexterm" name="id404234"></a> This line tells CUPS to use the <span class="emphasis"><em>Null Filter</em></span> (denoted as <span class="quote">“<span class="quote">-</span>”</span>, doing nothing at all) on <em class="parameter"><code>application/octet-stream</code></em>, and tag the result as @@ -1042,10 +1042,10 @@ application/octet-stream application/vnd.cups-raw 0 - Editing the <code class="filename">mime.convs</code> and the <code class="filename">mime.types</code> file does not <span class="emphasis"><em>enforce</em></span> <span class="quote">“<span class="quote">raw</span>”</span> printing, it only <span class="emphasis"><em>allows</em></span> it. </p></div><p title="Background"><b>Background. </b> -<a class="indexterm" name="id404304"></a> +<a class="indexterm" name="id404298"></a> +<a class="indexterm" name="id404305"></a> <a class="indexterm" name="id404311"></a> <a class="indexterm" name="id404318"></a> -<a class="indexterm" name="id404324"></a> That CUPS is a more security-aware printing system than traditional ones does not by default allow one to send deliberate (possibly binary) data to printing devices. (This could be easily abused to launch a @@ -1057,13 +1057,13 @@ application/octet-stream application/vnd.cups-raw 0 - <code class="filename">/etc/cups/mime.types</code> defines the <span class="quote">“<span class="quote">rules</span>”</span> of how CUPS recognizes MIME types. The file <code class="filename">/etc/cups/mime.convs</code> decides which file conversion filter(s) may be applied to which MIME types. - </p></div><div class="sect2" title="PostScript Printer Descriptions for Non-PostScript Printers"><div class="titlepage"><div><div><h3 class="title"><a name="id404373"></a>PostScript Printer Descriptions for Non-PostScript Printers</h3></div></div></div><p> - <a class="indexterm" name="id404381"></a> + </p></div><div class="sect2" title="PostScript Printer Descriptions for Non-PostScript Printers"><div class="titlepage"><div><div><h3 class="title"><a name="id404367"></a>PostScript Printer Descriptions for Non-PostScript Printers</h3></div></div></div><p> + <a class="indexterm" name="id404375"></a> +<a class="indexterm" name="id404381"></a> <a class="indexterm" name="id404388"></a> -<a class="indexterm" name="id404394"></a> -<a class="indexterm" name="id404401"></a> +<a class="indexterm" name="id404395"></a> +<a class="indexterm" name="id404402"></a> <a class="indexterm" name="id404408"></a> -<a class="indexterm" name="id404414"></a> Originally PPDs were meant to be used for PostScript printers only. Here, they help to send device-specific commands and settings to the RIP, which processes the job file. CUPS has extended this @@ -1076,7 +1076,7 @@ application/octet-stream application/vnd.cups-raw 0 - </p><p> PPDs for a non-PostScript printer have a few lines that are unique to CUPS. The most important one looks similar to this: - <a class="indexterm" name="id404431"></a> + <a class="indexterm" name="id404425"></a> </p><pre class="programlisting"> *cupsFilter: application/vnd.cups-raster 66 rastertoprinter </pre><p> @@ -1094,14 +1094,14 @@ application/octet-stream application/vnd.cups-raw 0 - several hundred printer models. You may not be able to control different paper trays, or you may get larger margins than your specific model supports. See Table 21.1<a class="link" href="CUPS-printing.html#cups-ppds" title="Table 22.1. PPDs Shipped with CUPS">“PPDs Shipped with CUPS”</a> for summary information. - </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" title="cupsomatic/foomatic-rip Versus Native CUPS Printing"><div class="titlepage"><div><div><h3 class="title"><a name="id404637"></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> + </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" title="cupsomatic/foomatic-rip Versus Native CUPS Printing"><div class="titlepage"><div><div><h3 class="title"><a name="id404631"></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> + <a class="indexterm" name="id404644"></a> <a class="indexterm" name="id404651"></a> - <a class="indexterm" name="id404657"></a> Native CUPS rasterization works in two steps: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> -<a class="indexterm" name="id404671"></a> +<a class="indexterm" name="id404665"></a> First is the <em class="parameter"><code>pstoraster</code></em> step. It uses the special CUPS - <a class="indexterm" name="id404684"></a> + <a class="indexterm" name="id404678"></a> device from ESP Ghostscript 7.05.x as its tool. </p></li><li class="listitem"><p> Second is the <em class="parameter"><code>rasterdriver</code></em> step. It uses various @@ -1116,7 +1116,7 @@ application/octet-stream application/vnd.cups-raw 0 - One other method is the <em class="parameter"><code>cupsomatic/foomatic-rip</code></em> way. Note that <em class="parameter"><code>cupsomatic</code></em> is <span class="emphasis"><em>not</em></span> made by the CUPS developers. It is an independent contribution to printing development, - made by people from Linuxprinting.org.<sup>[<a name="id404779" href="#ftn.id404779" class="footnote">6</a>]</sup> + made by people from Linuxprinting.org.<sup>[<a name="id404773" href="#ftn.id404773" class="footnote">6</a>]</sup> <em class="parameter"><code>cupsomatic</code></em> is no longer developed, maintained, or supported. It now been replaced by <em class="parameter"><code>foomatic-rip</code></em>. <em class="parameter"><code>foomatic-rip</code></em> is a complete rewrite of the old <em class="parameter"><code>cupsomatic</code></em> idea, but very much improved and generalized to @@ -1124,8 +1124,8 @@ application/octet-stream application/vnd.cups-raw 0 - advised, especially if you are upgrading to a recent version of CUPS, too. </p><p> + <a class="indexterm" name="id404820"></a> <a class="indexterm" name="id404826"></a> - <a class="indexterm" name="id404832"></a> Like the old <em class="parameter"><code>cupsomatic</code></em> method, the <em class="parameter"><code>foomatic-rip</code></em> (new) method from Linuxprinting.org uses the traditional Ghostscript print file processing, doing everything in a single step. It therefore relies on all the other devices built into Ghostscript. The quality is as good (or bad) as @@ -1135,12 +1135,12 @@ application/octet-stream application/vnd.cups-raw 0 - Of course, you can use both methods side by side on one system (and even for one printer, if you set up different queues) and find out which works best for you. </p><p> +<a class="indexterm" name="id404856"></a> <a class="indexterm" name="id404863"></a> -<a class="indexterm" name="id404869"></a> -<a class="indexterm" name="id404876"></a> -<a class="indexterm" name="id404883"></a> +<a class="indexterm" name="id404870"></a> +<a class="indexterm" name="id404877"></a> +<a class="indexterm" name="id404884"></a> <a class="indexterm" name="id404890"></a> -<a class="indexterm" name="id404897"></a> <em class="parameter"><code>cupsomatic</code></em> kidnaps the print file after the <em class="parameter"><code>application/vnd.cups-postscript</code></em> stage and deviates it through the CUPS-external, systemwide Ghostscript installation. Therefore, the print file bypasses the <em class="parameter"><code>pstoraster</code></em> @@ -1149,14 +1149,14 @@ application/octet-stream application/vnd.cups-raw 0 - backend. <a class="link" href="CUPS-printing.html#cupsomatic-dia" title="Figure 22.10. cupsomatic/foomatic Processing Versus Native CUPS.">cupsomatic/foomatic Processing Versus Native CUPS</a>, illustrates the difference between native CUPS rendering and the <em class="parameter"><code>Foomatic/cupsomatic</code></em> method. - </p></div><div class="sect2" title="Examples for Filtering Chains"><div class="titlepage"><div><div><h3 class="title"><a name="id404951"></a>Examples for Filtering Chains</h3></div></div></div><p> + </p></div><div class="sect2" title="Examples for Filtering Chains"><div class="titlepage"><div><div><h3 class="title"><a name="id404945"></a>Examples for Filtering Chains</h3></div></div></div><p> Here are a few examples of commonly occurring filtering chains to illustrate the workings of CUPS. </p><p> -<a class="indexterm" name="id404963"></a> -<a class="indexterm" name="id404970"></a> -<a class="indexterm" name="id404977"></a> -<a class="indexterm" name="id404984"></a> +<a class="indexterm" name="id404957"></a> +<a class="indexterm" name="id404964"></a> +<a class="indexterm" name="id404971"></a> +<a class="indexterm" name="id404978"></a> Assume you want to print a PDF file to an HP JetDirect-connected PostScript printer, but you want to print pages 3-5, 7, and 11-13 only, and you want to print them <span class="quote">“<span class="quote">two-up</span>”</span> and <span class="quote">“<span class="quote">duplex</span>”</span>: @@ -1175,10 +1175,10 @@ application/octet-stream application/vnd.cups-raw 0 - backend, which transfers the job to the printers.</p></li></ul></div><p> 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 illustration</a>. - </p><a class="indexterm" name="id405086"></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> -<a class="indexterm" name="id405134"></a> -<a class="indexterm" name="id405141"></a> -<a class="indexterm" name="id405148"></a> + </p><a class="indexterm" name="id405080"></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> +<a class="indexterm" name="id405128"></a> +<a class="indexterm" name="id405135"></a> +<a class="indexterm" name="id405142"></a> Assume you want to print the same filter to an USB-connected Epson Stylus Photo Printer installed with the CUPS <code class="filename">stphoto2.ppd</code>. The first few filtering stages are nearly the same: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> @@ -1188,14 +1188,14 @@ application/octet-stream application/vnd.cups-raw 0 - The (complete) PDF file is sent to CUPS and autotyped as <em class="parameter"><code>application/pdf</code></em>. </p></li><li class="listitem"><p> +<a class="indexterm" name="id405179"></a> <a class="indexterm" name="id405185"></a> -<a class="indexterm" name="id405192"></a> The file must first pass the <em class="parameter"><code>pdftops</code></em> prefilter, which produces PostScript MIME type <em class="parameter"><code>application/postscript</code></em> (a preview here would still show all pages of the original PDF). </p></li><li class="listitem"><p> -<a class="indexterm" name="id405215"></a> -<a class="indexterm" name="id405222"></a> +<a class="indexterm" name="id405209"></a> +<a class="indexterm" name="id405216"></a> The file then passes the <span class="quote">“<span class="quote">pstops</span>”</span> filter that applies the command line options: it selects the pages 2-5, 7, and 11-13, creates the imposed layout <span class="quote">“<span class="quote">two pages on one sheet,</span>”</span> and inserts the @@ -1207,7 +1207,7 @@ application/octet-stream application/vnd.cups-raw 0 - The file then passes the <em class="parameter"><code>pstoraster</code></em> stage and becomes MIME type <em class="parameter"><code>application/cups-raster</code></em>. </p></li><li class="listitem"><p> -<a class="indexterm" name="id405273"></a> +<a class="indexterm" name="id405267"></a> Finally, the <em class="parameter"><code>rastertoepson</code></em> filter does its work (as indicated in the printer's PPD), creating the printer-specific raster data and embedding any user-selected @@ -1217,11 +1217,11 @@ application/octet-stream application/vnd.cups-raw 0 - </p></li></ul></div><p> 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 illustration</a>. - </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" title="Sources of CUPS Drivers/PPDs"><div class="titlepage"><div><div><h3 class="title"><a name="id405353"></a>Sources of CUPS Drivers/PPDs</h3></div></div></div><p> + </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" title="Sources of CUPS Drivers/PPDs"><div class="titlepage"><div><div><h3 class="title"><a name="id405347"></a>Sources of CUPS Drivers/PPDs</h3></div></div></div><p> On the Internet you can now find many thousands of CUPS-PPD files (with their companion filters), in many national languages supporting more than 1,000 non-PostScript models. - </p><div class="itemizedlist"><a class="indexterm" name="id405366"></a><a class="indexterm" name="id405375"></a><ul class="itemizedlist" type="disc"><li class="listitem"><p> + </p><div class="itemizedlist"><a class="indexterm" name="id405360"></a><a class="indexterm" name="id405369"></a><ul class="itemizedlist" type="disc"><li class="listitem"><p> <a class="ulink" href="http://www.easysw.com/printpro/" target="_top">ESP PrintPro</a> (commercial, non-free) is packaged with more than 3,000 PPDs, ready for successful use <span class="quote">“<span class="quote">out of the box</span>”</span> on Linux, Mac OS X, IBM-AIX, @@ -1249,9 +1249,9 @@ application/octet-stream application/vnd.cups-raw 0 - <a class="ulink" href="http://www.linuxprinting.org/" target="_top">Foomatic/cupsomatic </a> (LPGL, free) from Linuxprinting.org provide PPDs for practically every Ghostscript filter known to the world (including Omni, Gutenprint, and HPIJS). - </p></li></ul></div></div><div class="sect2" title="Printing with Interface Scripts"><div class="titlepage"><div><div><h3 class="title"><a name="id405462"></a>Printing with Interface Scripts</h3></div></div></div><p> + </p></li></ul></div></div><div class="sect2" title="Printing with Interface Scripts"><div class="titlepage"><div><div><h3 class="title"><a name="id405456"></a>Printing with Interface Scripts</h3></div></div></div><p> +<a class="indexterm" name="id405464"></a> <a class="indexterm" name="id405470"></a> -<a class="indexterm" name="id405476"></a> CUPS also supports the use of <span class="quote">“<span class="quote">interface scripts</span>”</span> as known from System V AT&T printing systems. These are often used for PCL printers, from applications that generate PCL print jobs. Interface @@ -1273,16 +1273,16 @@ application/octet-stream application/vnd.cups-raw 0 - use of interface scripts is found at <a class="ulink" href="http://playground.sun.com/printing/documentation/interface.html" target="_top"> http://playground.sun.com/printing/documentation/interface.html</a>). - </p></div></div><div class="sect1" title="Network Printing (Purely Windows)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405541"></a>Network Printing (Purely Windows)</h2></div></div></div><p> + </p></div></div><div class="sect1" title="Network Printing (Purely Windows)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405534"></a>Network Printing (Purely Windows)</h2></div></div></div><p> Network printing covers a lot of ground. To understand what exactly goes on with Samba when it is printing on behalf of its Windows clients, let's first look at a <span class="quote">“<span class="quote">purely Windows</span>”</span> setup: Windows clients with a Windows NT print server. -</p><div class="sect2" title="From Windows Clients to an NT Print Server"><div class="titlepage"><div><div><h3 class="title"><a name="id405555"></a>From Windows Clients to an NT Print Server</h3></div></div></div><p> +</p><div class="sect2" title="From Windows Clients to an NT Print Server"><div class="titlepage"><div><div><h3 class="title"><a name="id405549"></a>From Windows Clients to an NT Print Server</h3></div></div></div><p> Windows clients printing to an NT-based print server have two options. They may: +<a class="indexterm" name="id405558"></a> <a class="indexterm" name="id405564"></a> -<a class="indexterm" name="id405570"></a> </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Execute the driver locally and render the GDI output (EMF) into the printer-specific format on their own. </p></li><li class="listitem"><p>Send the GDI output (EMF) to the server, where the @@ -1291,7 +1291,7 @@ options. They may: Both print paths are shown in the flowcharts in <a class="link" href="CUPS-printing.html#small11" title="Figure 22.13. Print Driver Execution on the Client."> Print Driver Execution on the Client</a>, and <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>. -</p></div><div class="sect2" title="Driver Execution on the Client"><div class="titlepage"><div><div><h3 class="title"><a name="id405613"></a>Driver Execution on the Client</h3></div></div></div><p> +</p></div><div class="sect2" title="Driver Execution on the Client"><div class="titlepage"><div><div><h3 class="title"><a name="id405607"></a>Driver Execution on the Client</h3></div></div></div><p> In the first case, the print server must spool the file as raw, meaning it shouldn't touch the job file and try to convert it in any way. This is what a traditional UNIX-based print server can do too, and at a better performance and more reliably than an NT print server. This is what most Samba administrators probably are @@ -1299,12 +1299,12 @@ familiar with. One advantage of this setup is that this <span class="quote">R even if no driver(s) for UNIX is available. It is sufficient to have the Windows client drivers available and installed 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 Client diagram</a>. -</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" title="Driver Execution on the Server"><div class="titlepage"><div><div><h3 class="title"><a name="id405678"></a>Driver Execution on the Server</h3></div></div></div><p> -<a class="indexterm" name="id405686"></a> +</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" title="Driver Execution on the Server"><div class="titlepage"><div><div><h3 class="title"><a name="id405672"></a>Driver Execution on the Server</h3></div></div></div><p> +<a class="indexterm" name="id405680"></a> +<a class="indexterm" name="id405687"></a> <a class="indexterm" name="id405693"></a> -<a class="indexterm" name="id405699"></a> +<a class="indexterm" name="id405700"></a> <a class="indexterm" name="id405706"></a> -<a class="indexterm" name="id405713"></a> The other path executes the printer driver on the server. The client transfers print files in EMF format to the server. The server uses the PostScript, PCL, ESC/P, or other driver to convert the EMF file into the printer-specific language. It is not possible for UNIX to do the same. Currently, there is no program or @@ -1312,14 +1312,14 @@ method to convert a Windows client's GDI output on a UNIX server into something This is illustrated in <a class="link" href="CUPS-printing.html#small12" title="Figure 22.14. Print Driver Execution on the Server.">the Print Driver Execution on the Server diagram</a>. </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> However, something similar is possible with CUPS, so read on. -</p></div></div><div class="sect1" title="Network Printing (Windows Clients and UNIX/Samba Print Servers)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405777"></a>Network Printing (Windows Clients and UNIX/Samba Print +</p></div></div><div class="sect1" title="Network Printing (Windows Clients and UNIX/Samba Print Servers)"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id405771"></a>Network Printing (Windows Clients and UNIX/Samba Print Servers)</h2></div></div></div><p> Since UNIX print servers <span class="emphasis"><em>cannot</em></span> execute the Win32 program code on their platform, the picture is somewhat different. However, this does not limit your options all that much. On the contrary, you may have a way here to implement printing features that are not possible otherwise. -</p><div class="sect2" title="From Windows Clients to a CUPS/Samba Print Server"><div class="titlepage"><div><div><h3 class="title"><a name="id405793"></a>From Windows Clients to a CUPS/Samba Print Server</h3></div></div></div><p> +</p><div class="sect2" title="From Windows Clients to a CUPS/Samba Print Server"><div class="titlepage"><div><div><h3 class="title"><a name="id405787"></a>From Windows Clients to a CUPS/Samba Print Server</h3></div></div></div><p> Here is a simple recipe showing how you can take advantage of CUPS's powerful features for the benefit of your Windows network printing clients: @@ -1331,7 +1331,7 @@ driver on the CUPS server. </p><p> First, to enable CUPS-based printing through Samba, the following options should be set in your <code class="filename">smb.conf</code> file <em class="parameter"><code>[global]</code></em> section: -</p><table border="0" summary="Simple list" class="simplelist"><tr><td><a class="indexterm" name="id405843"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id405854"></a><em class="parameter"><code>printcap = cups</code></em></td></tr></table><p> +</p><table border="0" summary="Simple list" class="simplelist"><tr><td><a class="indexterm" name="id405836"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id405848"></a><em class="parameter"><code>printcap = cups</code></em></td></tr></table><p> When these parameters are specified, all manually set print directives (like <a class="link" href="smb.conf.5.html#PRINTCOMMAND" target="_top">print command</a> or <a class="link" href="smb.conf.5.html#LPPAUSECOMMAND" target="_top">lppause command</a>) in <code class="filename">smb.conf</code> (as well as in Samba itself) will be ignored. Instead, Samba will directly interface with CUPS through its application program interface (API), as long as Samba has been compiled with CUPS library (libcups) support. If Samba has not been compiled with CUPS @@ -1339,7 +1339,7 @@ support, and if no other print commands are set up, then printing will use the < AT&T command set, with the -oraw option automatically passing through (if you want your own defined print commands to work with a Samba server that has CUPS support compiled in, simply use <a class="link" href="smb.conf.5.html#CLASSICALPRINTING" target="_top">classicalprinting = sysv</a>). This is illustrated in <a class="link" href="CUPS-printing.html#f13small" title="Figure 22.15. Printing via CUPS/Samba Server.">the Printing via CUPS/Samba Server diagram</a>. -</p><div class="figure"><a name="f13small"></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" title="Samba Receiving Job-Files and Passing Them to CUPS"><div class="titlepage"><div><div><h3 class="title"><a name="id405968"></a>Samba Receiving Job-Files and Passing Them to CUPS</h3></div></div></div><p> +</p><div class="figure"><a name="f13small"></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" title="Samba Receiving Job-Files and Passing Them to CUPS"><div class="titlepage"><div><div><h3 class="title"><a name="id405962"></a>Samba Receiving Job-Files and Passing Them to CUPS</h3></div></div></div><p> Samba <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" target="_top">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 into the spool directory of CUPS (the CUPS spool directory is set by the <em class="parameter"><code>RequestRoot</code></em> directive in a line that defaults to <em class="parameter"><code>RequestRoot /var/spool/cups</code></em>). CUPS checks the @@ -1351,13 +1351,13 @@ A Windows user authenticates only to Samba (by whatever means is configured). If Samba runs on the same host as CUPS, you only need to allow <span class="quote">“<span class="quote">localhost</span>”</span> to print. If it runs on different machines, you need to make sure the Samba host gets access to printing on CUPS. -</p></div></div><div class="sect1" title="Network PostScript RIP"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406040"></a>Network PostScript RIP</h2></div></div></div><p> +</p></div></div><div class="sect1" title="Network PostScript RIP"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406034"></a>Network PostScript RIP</h2></div></div></div><p> This section discusses the use of CUPS filters on the server configuration where clients make use of a PostScript driver with CUPS-PPDs. </p><p> -<a class="indexterm" name="id406055"></a> -<a class="indexterm" name="id406060"></a> -<a class="indexterm" name="id406067"></a> +<a class="indexterm" name="id406048"></a> +<a class="indexterm" name="id406054"></a> +<a class="indexterm" name="id406061"></a> PPDs can control all print device options. They are usually provided by the manufacturer if you own a PostScript printer, that is. PPD files are always a component of PostScript printer drivers on MS Windows or Apple Mac OS systems. They are ASCII files containing user-selectable print options, mapped to appropriate @@ -1370,8 +1370,8 @@ and handle the options. There is a Web browser interface to the print options (s lpoptions</code> or see if you have <code class="literal">lphelp</code> on your system). There are also some different GUI front-ends on Linux/UNIX, which can present PPD options to users. PPD options are normally meant to be evaluated by the PostScript RIP on the real PostScript printer. -</p><div class="sect2" title="PPDs for Non-PS Printers on UNIX"><div class="titlepage"><div><div><h3 class="title"><a name="id406119"></a>PPDs for Non-PS Printers on UNIX</h3></div></div></div><p> -<a class="indexterm" name="id406126"></a> +</p><div class="sect2" title="PPDs for Non-PS Printers on UNIX"><div class="titlepage"><div><div><h3 class="title"><a name="id406112"></a>PPDs for Non-PS Printers on UNIX</h3></div></div></div><p> +<a class="indexterm" name="id406120"></a> CUPS does not limit itself to <span class="quote">“<span class="quote">real</span>”</span> PostScript printers in its use of PPDs. The CUPS developers have extended the scope of the PPD concept to also describe available device and driver options for non-PostScript printers through CUPS-PPDs. @@ -1383,8 +1383,8 @@ All CUPS-PPDs geared to non-PostScript printers contain an additional line, star for the interpretation of the supplied PostScript. Thus CUPS lets all its printers appear as PostScript devices to its clients, because it can act as a PostScript RIP for those printers, processing the received PostScript code into a proper raster print format. -</p></div><div class="sect2" title="PPDs for Non-PS Printers on Windows"><div class="titlepage"><div><div><h3 class="title"><a name="id406156"></a>PPDs for Non-PS Printers on Windows</h3></div></div></div><p> -<a class="indexterm" name="id406163"></a> +</p></div><div class="sect2" title="PPDs for Non-PS Printers on Windows"><div class="titlepage"><div><div><h3 class="title"><a name="id406149"></a>PPDs for Non-PS Printers on Windows</h3></div></div></div><p> +<a class="indexterm" name="id406157"></a> CUPS-PPDs can also be used on Windows clients, on top of a <span class="quote">“<span class="quote">core</span>”</span> PostScript driver (now recommended is the CUPS PostScript Driver for Windows NT/200x/XP; you can also use the Adobe one, with limitations). This feature enables CUPS to do a few tricks no other spooler can do: @@ -1398,11 +1398,11 @@ limitations). This feature enables CUPS to do a few tricks no other spooler can Enable clients to consolidate on a single PostScript driver, even for many different target printers. </p></li></ul></div><p> Using CUPS PPDs on Windows clients enables them to control all print job settings just as a UNIX client can do. -</p></div></div><div class="sect1" title="Windows Terminal Servers (WTS) as CUPS Clients"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406216"></a>Windows Terminal Servers (WTS) as CUPS Clients</h2></div></div></div><p> +</p></div></div><div class="sect1" title="Windows Terminal Servers (WTS) as CUPS Clients"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406210"></a>Windows Terminal Servers (WTS) as CUPS Clients</h2></div></div></div><p> This setup may be of special interest to people experiencing major problems in WTS environments. WTS often need a multitude of non-PostScript drivers installed to run their clients' variety of different printer models. This often imposes the price of much increased instability. -</p><div class="sect2" title="Printer Drivers Running in “Kernel Mode” Cause Many Problems"><div class="titlepage"><div><div><h3 class="title"><a name="id406228"></a>Printer Drivers Running in <span class="quote">“<span class="quote">Kernel Mode</span>”</span> Cause Many +</p><div class="sect2" title="Printer Drivers Running in “Kernel Mode” Cause Many Problems"><div class="titlepage"><div><div><h3 class="title"><a name="id406222"></a>Printer Drivers Running in <span class="quote">“<span class="quote">Kernel Mode</span>”</span> Cause Many Problems</h3></div></div></div><p> Windows NT printer drivers, which run in <span class="quote">“<span class="quote">kernel mode</span>”</span>, introduce a high risk for the stability of the system if the driver is not really stable and well-tested. And there are a lot of bad drivers out @@ -1414,14 +1414,14 @@ PostScript drivers are generally well-tested. They are not known to cause any pr run in kernel mode. This might be because until now there have been only two different PostScript drivers: the one from Adobe and the one from Microsoft. Both are well-tested and are as stable as you can imagine on Windows. The CUPS driver is derived from the Microsoft one. -</p></div><div class="sect2" title="Workarounds Impose Heavy Limitations"><div class="titlepage"><div><div><h3 class="title"><a name="id406259"></a>Workarounds Impose Heavy Limitations</h3></div></div></div><p> +</p></div><div class="sect2" title="Workarounds Impose Heavy Limitations"><div class="titlepage"><div><div><h3 class="title"><a name="id406253"></a>Workarounds Impose Heavy Limitations</h3></div></div></div><p> In an attempt to work around problems, site administrators have resorted to restricting the allowed drivers installed on their WTS to one generic PCL and one PostScript driver. This, however, restricts the number of printer options available for clients to use. Often they can't get out more than simplex prints from one standard paper tray, while their devices could do much better if driven by a different driver! -</p></div><div class="sect2" title="CUPS: A “Magical Stone”?"><div class="titlepage"><div><div><h3 class="title"><a name="id406273"></a>CUPS: A <span class="quote">“<span class="quote">Magical Stone</span>”</span>?</h3></div></div></div><p> +</p></div><div class="sect2" title="CUPS: A “Magical Stone”?"><div class="titlepage"><div><div><h3 class="title"><a name="id406267"></a>CUPS: A <span class="quote">“<span class="quote">Magical Stone</span>”</span>?</h3></div></div></div><p> +<a class="indexterm" name="id406278"></a> <a class="indexterm" name="id406284"></a> -<a class="indexterm" name="id406291"></a> Using a PostScript driver, enabled with a CUPS-PPD, seems to be a very elegant way to overcome all these shortcomings. There are, depending on the version of Windows OS you use, up to three different PostScript drivers now available: Adobe, Microsoft, and CUPS PostScript drivers. None of them is known to cause major @@ -1430,14 +1430,14 @@ paper trays, duplex printing, and other settings. However, there is a certain pr server acting as a PostScript RIP for its clients requires more CPU and RAM than when just acting as a <span class="quote">“<span class="quote">raw spooling</span>”</span> device. Plus, this setup is not yet widely tested, although the first feedbacks look very promising. -</p></div><div class="sect2" title="PostScript Drivers with No Major Problems, Even in Kernel Mode"><div class="titlepage"><div><div><h3 class="title"><a name="id406309"></a>PostScript Drivers with No Major Problems, Even in Kernel +</p></div><div class="sect2" title="PostScript Drivers with No Major Problems, Even in Kernel Mode"><div class="titlepage"><div><div><h3 class="title"><a name="id406303"></a>PostScript Drivers with No Major Problems, Even in Kernel Mode</h3></div></div></div><p> +<a class="indexterm" name="id406311"></a> <a class="indexterm" name="id406318"></a> -<a class="indexterm" name="id406324"></a> -<a class="indexterm" name="id406331"></a> -<a class="indexterm" name="id406338"></a> -<a class="indexterm" name="id406345"></a> -<a class="indexterm" name="id406352"></a> +<a class="indexterm" name="id406325"></a> +<a class="indexterm" name="id406332"></a> +<a class="indexterm" name="id406339"></a> +<a class="indexterm" name="id406346"></a> More recent printer drivers on W200x and XP no longer run in kernel mode (unlike Windows NT). However, both operating systems can still use the NT drivers, running in kernel mode (you can roughly tell which is which as the drivers in subdirectory <span class="quote">“<span class="quote">2</span>”</span> of <span class="quote">“<span class="quote">W32X86</span>”</span> are <span class="quote">“<span class="quote">old</span>”</span> ones). As was @@ -1449,13 +1449,13 @@ it for their own driver development efforts. This is what the CUPS people have d allow them to publish the whole of the source code. However, they have released the <span class="quote">“<span class="quote">diff</span>”</span> under the GPL, and if you are the owner of an <span class="quote">“<span class="quote">MS DDK for Windows NT,</span>”</span> you can check the driver yourself. -</p></div></div><div class="sect1" title="Configuring CUPS for Driver Download"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406388"></a>Configuring CUPS for Driver Download</h2></div></div></div><p> +</p></div></div><div class="sect1" title="Configuring CUPS for Driver Download"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id406382"></a>Configuring CUPS for Driver Download</h2></div></div></div><p> As we have said before, all previously known methods to prepare client printer drivers on the Samba server for download and Point'n'Print convenience of Windows workstations are working with CUPS, too. These methods were described in <a class="link" href="classicalprinting.html" title="Chapter 21. Classical Printing Support">Classical Printing</a>. In reality, this is a pure Samba business and relates only to the Samba-Windows client relationship. -</p><div class="sect2" title="cupsaddsmb: The Unknown Utility"><div class="titlepage"><div><div><h3 class="title"><a name="id406406"></a><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</h3></div></div></div><p> -<a class="indexterm" name="id406416"></a> +</p><div class="sect2" title="cupsaddsmb: The Unknown Utility"><div class="titlepage"><div><div><h3 class="title"><a name="id406400"></a><span class="emphasis"><em>cupsaddsmb</em></span>: The Unknown Utility</h3></div></div></div><p> +<a class="indexterm" name="id406410"></a> The <em class="parameter"><code>cupsaddsmb</code></em> utility (shipped with all current CUPS versions) is an alternative method to transfer printer drivers into the Samba <em class="parameter"><code>[print$]</code></em> share. Remember, this share is where clients expect drivers deposited and set up for download and installation. It makes the sharing @@ -1472,11 +1472,11 @@ number of advantages: However, currently only Windows NT, 2000, and XP are supported by the CUPS drivers. You will also need to get the respective part of the Adobe driver if you need to support Windows 95, 98, and Me clients. -</p></div><div class="sect2" title="Prepare Your smb.conf for cupsaddsmb"><div class="titlepage"><div><div><h3 class="title"><a name="id406495"></a>Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></h3></div></div></div><p> +</p></div><div class="sect2" title="Prepare Your smb.conf for cupsaddsmb"><div class="titlepage"><div><div><h3 class="title"><a name="id406488"></a>Prepare Your <code class="filename">smb.conf</code> for <code class="literal">cupsaddsmb</code></h3></div></div></div><p> Prior to running <code class="literal">cupsaddsmb</code>, you need the settings in <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>. -</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 border="0" summary="Simple list" class="simplelist"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id406563"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id406575"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id406586"></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="id406607"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id406618"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id406630"></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="id406645"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id406656"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id406668"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id406679"></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="id406700"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id406711"></a><em class="parameter"><code>path = /etc/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id406723"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id406734"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id406746"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id406757"></a><em class="parameter"><code>write list = root, @smbprintadm</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" title="CUPS “PostScript Driver for Windows NT/200x/XP”"><div class="titlepage"><div><div><h3 class="title"><a name="id406771"></a>CUPS <span class="quote">“<span class="quote">PostScript Driver for Windows NT/200x/XP</span>”</span></h3></div></div></div><p> -<a class="indexterm" name="id406782"></a> +</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 border="0" summary="Simple list" class="simplelist"><tr><td> </td></tr><tr><td><em class="parameter"><code>[global]</code></em></td></tr><tr><td><a class="indexterm" name="id406557"></a><em class="parameter"><code>load printers = yes</code></em></td></tr><tr><td><a class="indexterm" name="id406569"></a><em class="parameter"><code>printing = cups</code></em></td></tr><tr><td><a class="indexterm" name="id406580"></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="id406600"></a><em class="parameter"><code>comment = All Printers</code></em></td></tr><tr><td><a class="indexterm" name="id406612"></a><em class="parameter"><code>path = /var/spool/samba</code></em></td></tr><tr><td><a class="indexterm" name="id406623"></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="id406638"></a><em class="parameter"><code>guest ok = yes</code></em></td></tr><tr><td><a class="indexterm" name="id406650"></a><em class="parameter"><code>writable = no</code></em></td></tr><tr><td><a class="indexterm" name="id406661"></a><em class="parameter"><code>printable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id406673"></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="id406694"></a><em class="parameter"><code>comment = Printer Drivers</code></em></td></tr><tr><td><a class="indexterm" name="id406705"></a><em class="parameter"><code>path = /etc/samba/drivers</code></em></td></tr><tr><td><a class="indexterm" name="id406717"></a><em class="parameter"><code>browseable = yes</code></em></td></tr><tr><td><a class="indexterm" name="id406728"></a><em class="parameter"><code>guest ok = no</code></em></td></tr><tr><td><a class="indexterm" name="id406740"></a><em class="parameter"><code>read only = yes</code></em></td></tr><tr><td><a class="indexterm" name="id406751"></a><em class="parameter"><code>write list = root, @smbprintadm</code></em></td></tr></table></div></div><br class="example-break"></div><div class="sect2" title="CUPS “PostScript Driver for Windows NT/200x/XP”"><div class="titlepage"><div><div><h3 class="title"><a name="id406765"></a>CUPS <span class="quote">“<span class="quote">PostScript Driver for Windows NT/200x/XP</span>”</span></h3></div></div></div><p> +<a class="indexterm" name="id406775"></a> CUPS 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 from the CUPS-based software files, tagged as CUPS 1.1.x Windows NT/200x/XP Printer Driver for Samba (tar.gz, 192k). The filename to download is <code class="filename">cups-samba-1.1.x.tar.gz</code>. Upon untar and unzipping, it @@ -1489,8 +1489,8 @@ cups-samba.readme cups-samba.remove cups-samba.ss </pre><p> -<a class="indexterm" name="id406824"></a> -<a class="indexterm" name="id406833"></a> +<a class="indexterm" name="id406818"></a> +<a class="indexterm" name="id406827"></a> These have been packaged with the ESP meta-packager software EPM. The <code class="filename">*.install</code> and <code class="filename">*.remove</code> files are simple shell scripts, which untar the <code class="filename">*.ss</code> (the <code class="filename">*.ss</code> is nothing else but a tar archive, which can be untarred by <span class="quote">“<span class="quote">tar</span>”</span> too). @@ -1522,32 +1522,32 @@ into<code class="filename">/usr/share/drivers/</code> instead of <code class="fi around this, copy/move the file (after running the <code class="literal">./cups-samba.install</code> script) manually to the correct place. </p></div><p> -<a class="indexterm" name="id406976"></a> +<a class="indexterm" name="id406970"></a> This new CUPS PostScript driver is currently binary only, but free of charge. No complete source code is provided (yet). The reason is that it has been developed with the help of the Microsoft DDK and compiled with Microsoft Visual Studio 6. Driver developers are not allowed to distribute the whole of the source code as free software. However, CUPS developers released the <span class="quote">“<span class="quote">diff</span>”</span> in source code under the GPL, so anybody with a license for Visual Studio and a DDK will be able to compile for himself or herself. -</p></div><div class="sect2" title="Recognizing Different Driver Files"><div class="titlepage"><div><div><h3 class="title"><a name="id406993"></a>Recognizing Different Driver Files</h3></div></div></div><p> +</p></div><div class="sect2" title="Recognizing Different Driver Files"><div class="titlepage"><div><div><h3 class="title"><a name="id406987"></a>Recognizing Different Driver Files</h3></div></div></div><p> The CUPS drivers do not support the older Windows 95/98/Me, but only the Windows NT/2000/XP client. </p><p>Windows NT, 2000, and XP are supported by:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>cups.hlp</p></li><li class="listitem"><p>cupsdrvr.dll</p></li><li class="listitem"><p>cupsui.dll</p></li></ul></div><p> Adobe drivers are available for the older Windows 95/98/Me as well as for Windows NT/2000/XP clients. The set of files is different from the different platforms. </p><p>Windows 95, 98, and ME are supported by:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>ADFONTS.MFM</p></li><li class="listitem"><p>ADOBEPS4.DRV</p></li><li class="listitem"><p>ADOBEPS4.HLP</p></li><li class="listitem"><p>DEFPRTR2.PPD</p></li><li class="listitem"><p>ICONLIB.DLL</p></li><li class="listitem"><p>PSMON.DLL</p></li></ul></div><p>Windows NT, 2000, and XP are supported by:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>ADOBEPS5.DLL</p></li><li class="listitem"><p>ADOBEPSU.DLL</p></li><li class="listitem"><p>ADOBEPSU.HLP</p></li></ul></div><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> -<a class="indexterm" name="id407086"></a> +<a class="indexterm" name="id407080"></a> If both the Adobe driver files and the CUPS driver files for the support of Windows NT/200x/XP are presently installed on the server, the Adobe files will be ignored and the CUPS files will be used. If you prefer for whatever reason to use Adobe-only drivers, move away the three CUPS driver files. The Windows 9x/Me clients use the Adobe drivers in any case. -</p></div></div><div class="sect2" title="Acquiring the Adobe Driver Files"><div class="titlepage"><div><div><h3 class="title"><a name="id407104"></a>Acquiring the Adobe Driver Files</h3></div></div></div><p> +</p></div></div><div class="sect2" title="Acquiring the Adobe Driver Files"><div class="titlepage"><div><div><h3 class="title"><a name="id407098"></a>Acquiring the Adobe Driver Files</h3></div></div></div><p> Acquiring the Adobe driver files seems to be unexpectedly difficult for many users. They are not available on the Adobe Web site as single files, and the self-extracting and/or self-installing Windows-.exe is not easy to locate either. You probably need to use the included native installer and run the installation process on one client once. This will install the drivers (and one generic PostScript printer) locally on the client. When they 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. -</p></div><div class="sect2" title="ESP Print Pro PostScript Driver for Windows NT/200x/XP"><div class="titlepage"><div><div><h3 class="title"><a name="id407124"></a>ESP Print Pro PostScript Driver for Windows NT/200x/XP</h3></div></div></div><p> -<a class="indexterm" name="id407132"></a> +</p></div><div class="sect2" title="ESP Print Pro PostScript Driver for Windows NT/200x/XP"><div class="titlepage"><div><div><h3 class="title"><a name="id407118"></a>ESP Print Pro PostScript Driver for Windows NT/200x/XP</h3></div></div></div><p> +<a class="indexterm" name="id407126"></a> Users of the ESP Print Pro software are able to install the ESP print drivers package as an alternative to the Adobe PostScript drivers. To do so, retrieve the driver files from the normal download area of the ESP Print Pro software at <a class="ulink" href="http://www.easysw.com/software.html" target="_top">Easy Software</a> web site. @@ -1557,19 +1557,19 @@ highlighting the printer in the Printer Manager GUI and selecting <span class="g the menu. Of course, you need to have prepared Samba beforehand to handle the driver files; that is, set up the <em class="parameter"><code>[print$]</code></em> share, and so on. The ESP Print Pro package includes the CUPS driver files as well as a (licensed) set of Adobe drivers for the Windows 95/98/Me client family. -</p></div><div class="sect2" title="Caveats to Be Considered"><div class="titlepage"><div><div><h3 class="title"><a name="id407179"></a>Caveats to Be Considered</h3></div></div></div><p> +</p></div><div class="sect2" title="Caveats to Be Considered"><div class="titlepage"><div><div><h3 class="title"><a name="id407173"></a>Caveats to Be Considered</h3></div></div></div><p> +<a class="indexterm" name="id407181"></a> <a class="indexterm" name="id407187"></a> <a class="indexterm" name="id407194"></a> -<a class="indexterm" name="id407200"></a> -<a class="indexterm" name="id407207"></a> +<a class="indexterm" name="id407201"></a> Once you have run the install script (and possibly manually moved the <code class="filename">cups.hlp</code> file to <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 subdirectory tree with <span class="emphasis"><em>WIN40</em></span> and <span class="emphasis"><em>W32X86</em></span> branches). You do this by running <code class="literal">cupsaddsmb</code> (see also <code class="literal">man cupsaddsmb</code> for CUPS since release 1.1.16). </p><div class="tip" title="Tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p> -<a class="indexterm" name="id407263"></a> -<a class="indexterm" name="id407270"></a> +<a class="indexterm" name="id407257"></a> +<a class="indexterm" name="id407264"></a> You may need to put root into the smbpasswd file by running <code class="literal">smbpasswd</code>; this is especially important if you should run this whole procedure for the first time and are not working in an environment where everything is configured for <span class="emphasis"><em>single sign-on</em></span> to a Windows Domain Controller. @@ -1584,8 +1584,8 @@ It is not harmful if you still have the <code class="filename">ADOBE*.*</code> d in the <code class="filename">/usr/share/cups/drivers/</code> directory. The new <code class="literal">cupsaddsmb</code> (from 1.1.16) will automatically prefer its own drivers if it finds both. </p></div><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> -<a class="indexterm" name="id407339"></a> -<a class="indexterm" name="id407346"></a> +<a class="indexterm" name="id407333"></a> +<a class="indexterm" name="id407340"></a> Should your Windows clients have had the old <code class="filename">ADOBE*.*</code> files for the Adobe PostScript driver installed, the download and installation of the new CUPS PostScript driver for Windows NT/200x/XP will fail at first. You need to wipe the old driver from the clients first. It is not enough to @@ -1599,43 +1599,43 @@ there is not one single printer left that uses that particular driver. You need printers using this driver in the <span class="guilabel">Printers</span> folder first. You will need Administrator privileges to do this. </p></div><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> -<a class="indexterm" name="id407413"></a> -<a class="indexterm" name="id407422"></a> +<a class="indexterm" name="id407407"></a> +<a class="indexterm" name="id407416"></a> Once you have successfully downloaded the CUPS PostScript driver to a client, you can easily switch all printers to this one by proceeding as described in <a class="link" href="classicalprinting.html" title="Chapter 21. Classical Printing Support">Classical Printing Support</a>. Either change a driver for an existing printer by running the <span class="guilabel">Printer Properties</span> dialog, or use <code class="literal">rpcclient</code> with the <code class="literal">setdriver</code> subcommand. -</p></div></div><div class="sect2" title="Windows CUPS PostScript Driver Versus Adobe Driver"><div class="titlepage"><div><div><h3 class="title"><a name="id407458"></a>Windows CUPS PostScript Driver Versus Adobe Driver</h3></div></div></div><p> +</p></div></div><div class="sect2" title="Windows CUPS PostScript Driver Versus Adobe Driver"><div class="titlepage"><div><div><h3 class="title"><a name="id407452"></a>Windows CUPS PostScript Driver Versus Adobe Driver</h3></div></div></div><p> Are you interested in a comparison between the CUPS and the Adobe PostScript drivers? For our purposes, these are the most important items that weigh in favor of CUPS: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>No hassle with the Adobe EULA.</p></li><li class="listitem"><p>No hassle with the question, <span class="quote">“<span class="quote">Where do I get the ADOBE*.* driver files?</span>”</span></p></li><li class="listitem"><p> - <a class="indexterm" name="id407486"></a> + <a class="indexterm" name="id407480"></a> The Adobe drivers (on request of the printer PPD associated with them) often put a PJL header in front of the main PostScript part of the print file. Thus, the print file starts with <em class="parameter"><code><1B >%-12345X</code></em> or <em class="parameter"><code><escape>%-12345X</code></em> instead of <em class="parameter"><code>%!PS</code></em>. This leads to the CUPS daemon autotyping the incoming file as a print-ready file, not initiating a pass through the <em class="parameter"><code>pstops</code></em> filter (to speak more technically, it is not - regarded as the generic MIME-type <a class="indexterm" name="id407520"></a> + regarded as the generic MIME-type <a class="indexterm" name="id407514"></a> <em class="parameter"><code>application/postscript</code></em>, but as the more special MIME type - <a class="indexterm" name="id407533"></a> + <a class="indexterm" name="id407527"></a> <em class="parameter"><code>application/cups.vnd-postscript</code></em>), which therefore also leads to the page accounting in <em class="parameter"><code>/var/log/cups/page_log</code></em> not receiving the exact number of pages; instead the dummy page number of <span class="quote">“<span class="quote">1</span>”</span> is logged in a standard setup). </p></li><li class="listitem"><p>The Adobe driver has more options to misconfigure the -<a class="indexterm" name="id407562"></a> +<a class="indexterm" name="id407556"></a> PostScript generated by it (like setting it inadvertently to <span class="guilabel">Optimize for Speed</span> instead of <span class="guilabel">Optimize for Portability</span>, which could lead to CUPS being unable to process it).</p></li><li class="listitem"><p>The CUPS PostScript driver output sent by Windows -<a class="indexterm" name="id407586"></a> +<a class="indexterm" name="id407580"></a> clients to the CUPS server is guaranteed to autotype as the generic MIME type <em class="parameter"><code>application/postscript</code></em>, thus passing through the CUPS <em class="parameter"><code>pstops</code></em> filter and logging the correct number of pages in the <code class="filename">page_log</code> for accounting and quota purposes.</p></li><li class="listitem"><p> - <a class="indexterm" name="id407617"></a> + <a class="indexterm" name="id407611"></a> The CUPS PostScript driver supports the sending of additional standard (IPP) print options by Windows NT/200x/XP clients. Such additional print options are naming the CUPS standard <span class="emphasis"><em>banner pages</em></span> (or the custom ones, should they be installed at the time of driver download), using the CUPS @@ -1648,9 +1648,9 @@ are the most important items that weigh in favor of CUPS: not disturb any other applications because they will regard it as a comment and simply ignore it).</p></li><li class="listitem"><p>The CUPS PostScript driver will be the heart of the fully fledged CUPS IPP client for Windows NT/200x/XP to be released soon - (probably alongside the first beta release for CUPS 1.2).</p></li></ul></div></div><div class="sect2" title="Run cupsaddsmb (Quiet Mode)"><div class="titlepage"><div><div><h3 class="title"><a name="id407654"></a>Run cupsaddsmb (Quiet Mode)</h3></div></div></div><p> -<a class="indexterm" name="id407661"></a> -<a class="indexterm" name="id407668"></a> + (probably alongside the first beta release for CUPS 1.2).</p></li></ul></div></div><div class="sect2" title="Run cupsaddsmb (Quiet Mode)"><div class="titlepage"><div><div><h3 class="title"><a name="id407647"></a>Run cupsaddsmb (Quiet Mode)</h3></div></div></div><p> +<a class="indexterm" name="id407655"></a> +<a class="indexterm" name="id407662"></a> The <code class="literal">cupsaddsmb</code> command copies the needed files into your <em class="parameter"><code>[print$]</code></em> share. Additionally, the PPD associated with this printer is copied from <code class="filename">/etc/cups/ppd/</code> to <em class="parameter"><code>[print$]</code></em>. There the files wait for convenient Windows client installations via @@ -1658,26 +1658,26 @@ Point'n'Print. Before we can run the command successfully, we need to be sure th Samba. If you have a small network, you are probably using user-level security (<a class="link" href="smb.conf.5.html#SECURITY" target="_top">security = user</a>). </p><p> Here is an example of a successfully run <code class="literal">cupsaddsmb</code> command: -<a class="indexterm" name="id407723"></a> -<a class="indexterm" name="id407730"></a> +<a class="indexterm" name="id407717"></a> +<a class="indexterm" name="id407724"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>cupsaddsmb -U root infotec_IS2027</code></strong> Password for root required to access localhost via Samba: <strong class="userinput"><code>['secret']</code></strong> </pre><p> -<a class="indexterm" name="id407761"></a> +<a class="indexterm" name="id407755"></a> To share <span class="emphasis"><em>all</em></span> printers and drivers, use the <code class="option">-a</code> parameter instead of a printer name. Since <code class="literal">cupsaddsmb</code> <span class="quote">“<span class="quote">exports</span>”</span> the printer drivers to Samba, it should be obvious that it only works for queues with a CUPS driver associated. -</p></div><div class="sect2" title="Run cupsaddsmb with Verbose Output"><div class="titlepage"><div><div><h3 class="title"><a name="id407788"></a>Run cupsaddsmb with Verbose Output</h3></div></div></div><p> -<a class="indexterm" name="id407796"></a> +</p></div><div class="sect2" title="Run cupsaddsmb with Verbose Output"><div class="titlepage"><div><div><h3 class="title"><a name="id407782"></a>Run cupsaddsmb with Verbose Output</h3></div></div></div><p> +<a class="indexterm" name="id407790"></a> Probably you want to see what's going on. Use the <code class="option">-v</code> parameter to get a more verbose output. The output below was edited for better readability: all <span class="quote">“<span class="quote">\</span>”</span> at the end of a line indicate that I inserted an artificial line break plus some indentation here: -<a class="indexterm" name="id407811"></a> -<a class="indexterm" name="id407820"></a> +<a class="indexterm" name="id407805"></a> +<a class="indexterm" name="id407814"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>cupsaddsmb -U root -v infotec_2105</code></strong> Password for root required to access localhost via GANDALF: @@ -1746,17 +1746,17 @@ If you look closely, you'll discover your root password was transferred unencryp Also, if you look further, you may discover error messages like NT_STATUS_OBJECT_NAME_COLLISION in the output. This will occur when the directories WIN40 and W32X86 already existed in the <em class="parameter"><code>[print$]</code></em> driver download share (from a previous driver installation). These are harmless warning messages. -</p></div><div class="sect2" title="Understanding cupsaddsmb"><div class="titlepage"><div><div><h3 class="title"><a name="id407891"></a>Understanding cupsaddsmb</h3></div></div></div><p> -<a class="indexterm" name="id407899"></a> +</p></div><div class="sect2" title="Understanding cupsaddsmb"><div class="titlepage"><div><div><h3 class="title"><a name="id407885"></a>Understanding cupsaddsmb</h3></div></div></div><p> +<a class="indexterm" name="id407892"></a> What has happened? What did <code class="literal">cupsaddsmb</code> do? There are five stages of the procedure: </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p> - <a class="indexterm" name="id407923"></a> + <a class="indexterm" name="id407917"></a> Call the CUPS server via IPP and request the driver files and the PPD file for the named printer.</p></li><li class="listitem"><p>Store the files temporarily in the local TEMPDIR (as defined in <code class="filename">cupsd.conf</code>).</p></li><li class="listitem"><p>Connect via smbclient to the Samba server's <em class="parameter"><code>[print$]</code></em> share and put the files into the share's WIN40 (for Windows 9x/Me) and W32X86 (for Windows NT/200x/XP) subdirectories.</p></li><li class="listitem"><p> - <a class="indexterm" name="id407957"></a> + <a class="indexterm" name="id407951"></a> Connect via rpcclient to the Samba server and execute the <code class="literal">adddriver</code> command with the correct parameters. </p></li><li class="listitem"><p> - <a class="indexterm" name="id407977"></a> + <a class="indexterm" name="id407971"></a> 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" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> You can run the <code class="literal">cupsaddsmb</code> utility with parameters to specify one remote host as Samba host and a second remote host as CUPS host. Especially if you want to get a deeper understanding, it is a good idea @@ -1765,7 +1765,7 @@ Samba servers run on the same host): </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>cupsaddsmb -H sambaserver -h cupsserver -v printer</code></strong> </pre><p> -</p></div></div><div class="sect2" title="How to Recognize If cupsaddsmb Completed Successfully"><div class="titlepage"><div><div><h3 class="title"><a name="id408027"></a>How to Recognize If cupsaddsmb Completed Successfully</h3></div></div></div><p> +</p></div></div><div class="sect2" title="How to Recognize If cupsaddsmb Completed Successfully"><div class="titlepage"><div><div><h3 class="title"><a name="id408021"></a>How to Recognize If cupsaddsmb Completed Successfully</h3></div></div></div><p> You <span class="emphasis"><em>must</em></span> always check if the utility completed successfully in all fields. You need at minimum these three messages among the output: @@ -1794,9 +1794,9 @@ the <em class="parameter"><code>use client driver</code></em>. It is impossible to see any diagnostic output if you do not run <code class="literal">cupsaddsmb</code> in verbose mode. Therefore, we strongly recommend against use of the default quiet mode. It will hide any problems from you that might occur. -</p></div></div><div class="sect2" title="cupsaddsmb with a Samba PDC"><div class="titlepage"><div><div><h3 class="title"><a name="id408138"></a>cupsaddsmb with a Samba PDC</h3></div></div></div><p> -<a class="indexterm" name="id408146"></a> -<a class="indexterm" name="id408153"></a> +</p></div></div><div class="sect2" title="cupsaddsmb with a Samba PDC"><div class="titlepage"><div><div><h3 class="title"><a name="id408132"></a>cupsaddsmb with a Samba PDC</h3></div></div></div><p> +<a class="indexterm" name="id408140"></a> +<a class="indexterm" name="id408147"></a> Can't get the standard <code class="literal">cupsaddsmb</code> command to run on a Samba PDC? Are you asked for the password credential again and again, and the command just will not take off at all? Try one of these variations: @@ -1806,20 +1806,20 @@ variations: <code class="prompt">root# </code><strong class="userinput"><code>cupsaddsmb -H SAURON -U MIDEARTH\\root -h cups-server -v printername</code></strong> </pre><p> (Note the two backslashes: the first one is required to <span class="quote">“<span class="quote">escape</span>”</span> the second one). -</p></div><div class="sect2" title="cupsaddsmb Flowchart"><div class="titlepage"><div><div><h3 class="title"><a name="id408215"></a>cupsaddsmb Flowchart</h3></div></div></div><p> -<a class="indexterm" name="id408223"></a> -<a class="indexterm" name="id408230"></a> +</p></div><div class="sect2" title="cupsaddsmb Flowchart"><div class="titlepage"><div><div><h3 class="title"><a name="id408209"></a>cupsaddsmb Flowchart</h3></div></div></div><p> +<a class="indexterm" name="id408217"></a> +<a class="indexterm" name="id408224"></a> <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 data flows of the <code class="literal">cupaddsmb</code> command. Note again: cupsaddsmb is not intended to, and does not work with, raw print queues! -</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" title="Installing the PostScript Driver on a Client"><div class="titlepage"><div><div><h3 class="title"><a name="id408293"></a>Installing the PostScript Driver on a Client</h3></div></div></div><p> -<a class="indexterm" name="id408301"></a> -<a class="indexterm" name="id408308"></a> +</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" title="Installing the PostScript Driver on a Client"><div class="titlepage"><div><div><h3 class="title"><a name="id408287"></a>Installing the PostScript Driver on a Client</h3></div></div></div><p> +<a class="indexterm" name="id408295"></a> +<a class="indexterm" name="id408302"></a> After <code class="literal">cupsaddsmb</code> is completed, your driver is prepared for the clients to use. Here are the steps you must perform to download and install it via Point'n'Print. From a Windows client, browse to the CUPS/Samba server: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> - <a class="indexterm" name="id408329"></a> + <a class="indexterm" name="id408323"></a> Open the <span class="guilabel">Printers</span> share of Samba in Network Neighborhood.</p></li><li class="listitem"><p>Right-click on the printer in question.</p></li><li class="listitem"><p>From the opening context menu select <span class="guimenuitem">Install...</span> or <span class="guimenuitem">Connect...</span> (depending on the Windows version you use).</p></li></ul></div><p> @@ -1830,9 +1830,9 @@ you want to test it and send your first job from an application like Microsoft W the new printer appears in a <code class="filename">\\SambaServer\PrinterName</code> entry in the drop-down list of available printers. </p><p> -<a class="indexterm" name="id408393"></a> -<a class="indexterm" name="id408400"></a> -<a class="indexterm" name="id408407"></a> +<a class="indexterm" name="id408387"></a> +<a class="indexterm" name="id408394"></a> +<a class="indexterm" name="id408401"></a> <code class="literal">cupsaddsmb</code> will only reliably work with CUPS version 1.1.15 or higher and with Samba version 2.2.4, or later. If it does not work, or if the automatic printer driver download to the clients does not succeed, you can still manually install the CUPS printer PPD on top of the Adobe PostScript driver on @@ -1861,34 +1861,34 @@ with the output your client driver settings produce. Treat it well: Sometimes you can choose PostScript Language Level: in case of problems try 2 instead of 3 (the latest ESP Ghostscript package handles Level 3 PostScript very well; Adobe). </p></li><li class="listitem"><p> - Say Yes to PostScript Error Handler (Adobe).</p></li></ul></div></div></div><div class="sect1" title="Installing PostScript Driver Files Manually Using rpcclient"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id408502"></a>Installing PostScript Driver Files Manually Using rpcclient</h2></div></div></div><p> + Say Yes to PostScript Error Handler (Adobe).</p></li></ul></div></div></div><div class="sect1" title="Installing PostScript Driver Files Manually Using rpcclient"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id408496"></a>Installing PostScript Driver Files Manually Using rpcclient</h2></div></div></div><p> Of course, you can run all the commands that are embedded into the cupsaddsmb convenience utility yourself, one by one, and upload and prepare the driver files for future client downloads. </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Prepare Samba (a CUPS print queue with the name of the printer should be there. We are providing the driver now).</p></li><li class="listitem"><p>Copy all files to <em class="parameter"><code>[print$]</code></em>.</p></li><li class="listitem"><p> - <a class="indexterm" name="id408538"></a> + <a class="indexterm" name="id408532"></a> Run <code class="literal">rpcclient adddriver</code> (for each client architecture you want to support).</p></li><li class="listitem"><p> - <a class="indexterm" name="id408558"></a> + <a class="indexterm" name="id408552"></a> Run <code class="literal">rpcclient setdriver.</code></p></li></ol></div><p> -<a class="indexterm" name="id408577"></a> -<a class="indexterm" name="id408586"></a> -<a class="indexterm" name="id408595"></a> -<a class="indexterm" name="id408604"></a> -<a class="indexterm" name="id408614"></a> +<a class="indexterm" name="id408571"></a> +<a class="indexterm" name="id408580"></a> +<a class="indexterm" name="id408589"></a> +<a class="indexterm" name="id408598"></a> +<a class="indexterm" name="id408607"></a> We are going to do this now. First, read the man page on <em class="parameter"><code>rpcclient</code></em> to get a first idea. Look at all the printing-related subcommands: <code class="literal">enumprinters</code>, <code class="literal">enumdrivers</code>, <code class="literal">enumports</code>, <code class="literal">adddriver</code>, and <code class="literal">setdriver</code> are among the most interesting ones. <em class="parameter"><code>rpcclient</code></em> implements an important part of the MS-RPC protocol. You can use it to query (and command) a Windows NT (or 200x/XP) PC, too. MS-RPC is used by Windows clients, among other things, to benefit from the Point'n'Print features. Samba can now mimic this as well. -</p><div class="sect2" title="A Check of the rpcclient man Page"><div class="titlepage"><div><div><h3 class="title"><a name="id408668"></a>A Check of the rpcclient man Page</h3></div></div></div><p> +</p><div class="sect2" title="A Check of the rpcclient man Page"><div class="titlepage"><div><div><h3 class="title"><a name="id408662"></a>A Check of the rpcclient man Page</h3></div></div></div><p> First let's check the <em class="parameter"><code>rpcclient</code></em> man page. Here are two relevant passages: </p><p> +<a class="indexterm" name="id408680"></a> <a class="indexterm" name="id408686"></a> <a class="indexterm" name="id408693"></a> -<a class="indexterm" name="id408699"></a> <code class="literal">adddriver <arch> <config></code> Execute an <code class="literal">AddPrinterDriver()</code> RPC to install the printer driver information on the server. The driver files should already exist in the directory returned by <code class="literal">getdriverdir</code>. Possible values for <em class="parameter"><code>arch</code></em> are the @@ -1911,18 +1911,18 @@ drivers can use a bidirectional link for communication. This field should be <sp NT print server, the print monitor for a driver must already be installed before adding the driver or else the RPC will fail. </p><p> +<a class="indexterm" name="id408764"></a> <a class="indexterm" name="id408770"></a> -<a class="indexterm" name="id408777"></a> <code class="literal">setdriver <printername> <drivername></code> Execute a <code class="literal">SetPrinter()</code> command to update the printer driver associated with an installed printer. The printer driver must already be correctly installed on the print server. </p><p> -<a class="indexterm" name="id408800"></a> -<a class="indexterm" name="id408807"></a> +<a class="indexterm" name="id408794"></a> +<a class="indexterm" name="id408801"></a> See also the <code class="literal">enumprinters</code> and <code class="literal">enumdrivers</code> commands to obtain a list of installed printers and drivers. -</p></div><div class="sect2" title="Understanding the rpcclient man Page"><div class="titlepage"><div><div><h3 class="title"><a name="id408828"></a>Understanding the rpcclient man Page</h3></div></div></div><p> -<a class="indexterm" name="id408836"></a> +</p></div><div class="sect2" title="Understanding the rpcclient man Page"><div class="titlepage"><div><div><h3 class="title"><a name="id408822"></a>Understanding the rpcclient man Page</h3></div></div></div><p> +<a class="indexterm" name="id408830"></a> The <span class="emphasis"><em>exact</em></span> format isn't made too clear by the man page, since you have to deal with some parameters containing spaces. Here is a better description for it. We have line-broken the command and indicated the breaks with <span class="quote">“<span class="quote">\</span>”</span>. Usually you would type the command in one line without the line @@ -1946,9 +1946,9 @@ printer presents the files to us. Remember that this whole procedure has to be d listening to the traffic caused by Windows computers on the wire. We may as well turn to a Windows box now and access it from a UNIX workstation. We will query it with <code class="literal">rpcclient</code> to see what it tells us and try to understand the man page more clearly. -</p></div><div class="sect2" title="Producing an Example by Querying a Windows Box"><div class="titlepage"><div><div><h3 class="title"><a name="id408920"></a>Producing an Example by Querying a Windows Box</h3></div></div></div><p> -<a class="indexterm" name="id408928"></a> -<a class="indexterm" name="id408938"></a> +</p></div><div class="sect2" title="Producing an Example by Querying a Windows Box"><div class="titlepage"><div><div><h3 class="title"><a name="id408914"></a>Producing an Example by Querying a Windows Box</h3></div></div></div><p> +<a class="indexterm" name="id408922"></a> +<a class="indexterm" name="id408932"></a> We could run <code class="literal">rpcclient</code> with a <code class="literal">getdriver</code> or a <code class="literal">getprinter</code> subcommand (in level 3 verbosity) against it. Just sit down at a UNIX or Linux workstation with the Samba utilities installed, then type the following command: @@ -1956,7 +1956,7 @@ workstation with the Samba utilities installed, then type the following command: <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -U'user%secret' NT-SERVER -c 'getdriver printername 3'</code></strong> </pre><p> From the result it should become clear which is which. Here is an example from my installation: -<a class="indexterm" name="id408986"></a> +<a class="indexterm" name="id408980"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -U'Danka%xxxx' W200xSERVER \ -c'getdriver "DANKA InfoStream Virtual Printer" 3'</code></strong> @@ -1987,10 +1987,10 @@ Some printer drivers list additional files under the label <em class="parameter" would go into the last field <em class="parameter"><code>ListOfFiles,Comma-separated</code></em>. For the CUPS PostScript drivers, we do not need any (nor would we for the Adobe PostScript driver); therefore, the field will get a <span class="quote">“<span class="quote">NULL</span>”</span> entry. -</p></div><div class="sect2" title="Requirements for adddriver and setdriver to Succeed"><div class="titlepage"><div><div><h3 class="title"><a name="id409040"></a>Requirements for adddriver and setdriver to Succeed</h3></div></div></div><p> -<a class="indexterm" name="id409048"></a> -<a class="indexterm" name="id409057"></a> -<a class="indexterm" name="id409064"></a> +</p></div><div class="sect2" title="Requirements for adddriver and setdriver to Succeed"><div class="titlepage"><div><div><h3 class="title"><a name="id409034"></a>Requirements for adddriver and setdriver to Succeed</h3></div></div></div><p> +<a class="indexterm" name="id409042"></a> +<a class="indexterm" name="id409051"></a> +<a class="indexterm" name="id409058"></a> From the man page (and from the quoted output of <code class="literal">cupsaddsmb</code> above) it becomes clear that you need to have certain conditions in order to make the manual uploading and initializing of the driver files succeed. The two <code class="literal">rpcclient</code> subcommands (<code class="literal">adddriver</code> and @@ -2007,19 +2007,19 @@ succeed. The two <code class="literal">rpcclient</code> subcommands (<code class the <em class="parameter"><code>[print$]</code></em> share and create subdirectories.</p></li><li class="listitem"><p>The printer you are going to set up for the Windows clients needs to be installed in CUPS already.</p></li><li class="listitem"><p> - <a class="indexterm" name="id409208"></a> - <a class="indexterm" name="id409217"></a> + <a class="indexterm" name="id409202"></a> + <a class="indexterm" name="id409211"></a> The CUPS printer must be known to Samba; otherwise the <code class="literal">setdriver</code> subcommand fails with an NT_STATUS_UNSUCCESSFUL error. To check if the printer is known by Samba, you may use the <code class="literal">enumprinters</code> subcommand to <code class="literal">rpcclient</code>. A long-standing bug prevented a proper update of the printer list until every smbd process had received a SIGHUP or was restarted. Remember this in case you've created the CUPS printer just recently and encounter problems: try restarting Samba. - </p></li></ul></div></div><div class="sect2" title="Manual Driver Installation in 15 Steps"><div class="titlepage"><div><div><h3 class="title"><a name="id409251"></a>Manual Driver Installation in 15 Steps</h3></div></div></div><p> + </p></li></ul></div></div><div class="sect2" title="Manual Driver Installation in 15 Steps"><div class="titlepage"><div><div><h3 class="title"><a name="id409245"></a>Manual Driver Installation in 15 Steps</h3></div></div></div><p> We are going to install a printer driver now by manually executing all required commands. Because this may seem a rather complicated process at first, we go through the procedure step by step, explaining every single action item as it comes up. -</p><div class="procedure" title="Procedure 22.2. Manual Driver Installation"><a name="id409262"></a><p class="title"><b>Procedure 22.2. Manual Driver Installation</b></p><ol class="procedure" type="1"><li class="step" title="Install the printer on CUPS."><p class="title"><b>Install the printer on CUPS.</b></p><pre class="screen"> +</p><div class="procedure" title="Procedure 22.2. Manual Driver Installation"><a name="id409256"></a><p class="title"><b>Procedure 22.2. Manual Driver Installation</b></p><ol class="procedure" type="1"><li class="step" title="Install the printer on CUPS."><p class="title"><b>Install the printer on CUPS.</b></p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>lpadmin -p mysmbtstprn -v socket://10.160.51.131:9100 -E \ -P canonIR85.ppd</code></strong> </pre><p> @@ -2028,7 +2028,7 @@ single action item as it comes up. (a.k.a. JetDirect or Direct TCP/IP) connection. You need to be root for this step. </p></li><li class="step" title="(Optional.) Check if the printer is recognized by Samba."><p class="title"><b>(Optional.) Check if the printer is recognized by Samba.</b></p><p> - <a class="indexterm" name="id409316"></a> + <a class="indexterm" name="id409310"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'enumprinters' localhost \ | grep -C2 mysmbtstprn</code></strong> @@ -2048,8 +2048,8 @@ comment:[mysmbtstprn] of the following steps. Alternatively, you can authenticate as one of the users from the <span class="quote">“<span class="quote">write list</span>”</span> as defined in <code class="filename">smb.conf</code> for <em class="parameter"><code>[print$]</code></em>. </p></li><li class="step" title="(Optional.) Check if Samba knows a driver for the printer."><p class="title"><b>(Optional.) Check if Samba knows a driver for the printer.</b></p><p> - <a class="indexterm" name="id409407"></a> - <a class="indexterm" name="id409416"></a> + <a class="indexterm" name="id409401"></a> + <a class="indexterm" name="id409410"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'getprinter mysmbtstprn 2'\ localhost | grep driver </code></strong> @@ -2105,7 +2105,7 @@ drwxr-sr-x 2 root ntadmin 670 May 16 03:15 3 The driver files now are in the W32X86 architecture <span class="quote">“<span class="quote">root</span>”</span> of <em class="parameter"><code>[print$]</code></em>. </p></li><li class="step" title="Tell Samba that these are driver files (adddriver)."><p class="title"><b>Tell Samba that these are driver files (<code class="literal">adddriver</code>).</b></p><p> -<a class="indexterm" name="id409587"></a> +<a class="indexterm" name="id409581"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'adddriver "Windows NT x86" \ "mydrivername:cupsdrvr.dll:mysmbtstprn.PPD: \ @@ -2136,7 +2136,7 @@ total 5039 Notice how step 6 also moved the driver files to the appropriate subdirectory. Compare this with the situation after step 5. </p></li><li class="step" title="(Optional.) Verify if Samba now recognizes the driver."><p class="title"><b>(Optional.) Verify if Samba now recognizes the driver.</b></p><p> -<a class="indexterm" name="id409681"></a> +<a class="indexterm" name="id409675"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'enumdrivers 3' \ localhost | grep -B2 -A5 mydrivername</code></strong> @@ -2152,7 +2152,7 @@ Helpfile: [\\kde-bitshop\print$\W32X86\2\cups.hlp] Remember, this command greps for the name you chose for the driver in step 6. This command must succeed before you can proceed. </p></li><li class="step" title="Tell Samba which printer should use these driver files (setdriver)."><p class="title"><b>Tell Samba which printer should use these driver files (<code class="literal">setdriver</code>).</b></p><p> -<a class="indexterm" name="id409731"></a> +<a class="indexterm" name="id409725"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'setdriver mysmbtstprn mydrivername' \ localhost</code></strong> @@ -2163,9 +2163,9 @@ queues that use the same driver. You do not need to repeat all the previous step succeed. The only preconditions are that <code class="literal">enumdrivers</code> must find the driver and <code class="literal">enumprinters</code> must find the printer. </p></li><li class="step" title="(Optional) Verify if Samba has recognized this association."><p class="title"><b>(Optional) Verify if Samba has recognized this association.</b></p><p> -<a class="indexterm" name="id409786"></a> -<a class="indexterm" name="id409796"></a> -<a class="indexterm" name="id409805"></a> +<a class="indexterm" name="id409780"></a> +<a class="indexterm" name="id409790"></a> +<a class="indexterm" name="id409799"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>rpcclient -Uroot%xxxx -c 'getprinter mysmbtstprn 2' localhost \ | grep driver</code></strong> @@ -2205,13 +2205,13 @@ Printer Driver Info 3: comment:[mysmbtstprn] </pre><p> -<a class="indexterm" name="id409873"></a> +<a class="indexterm" name="id409867"></a> Compare these results with the ones from steps 2 and 3. Every one of these commands show the driver is installed. Even the <code class="literal">enumprinters</code> command now lists the driver on the <span class="quote">“<span class="quote">description</span>”</span> line. </p></li><li class="step" title="(Optional.) Tickle the driver into a correct device mode."><p class="title"><b>(Optional.) Tickle the driver into a correct device mode.</b></p><p> -<a class="indexterm" name="id409906"></a> +<a class="indexterm" name="id409899"></a> You certainly know how to install the driver on the client. In case you are not particularly familiar with Windows, here is a short recipe: Browse the Network Neighborhood, go to the Samba server, and look @@ -2234,12 +2234,12 @@ into the <span class="quote">“<span class="quote">DOS box</span>”</s Change any printer setting once (like changing <span class="emphasis"><em><span class="guilabel">portrait</span> to <span class="guilabel">landscape</span></em></span>), click on <span class="guibutton">Apply</span>, and change the setting back. </p></li><li class="step" title="Install the printer on a client (Point'n'Print)."><p class="title"><b>Install the printer on a client (Point'n'Print).</b></p><p> -<a class="indexterm" name="id410014"></a> +<a class="indexterm" name="id410008"></a> </p><pre class="screen"> <code class="prompt">C:\> </code><strong class="userinput"><code>rundll32 printui.dll,PrintUIEntry /in /n "\\sambaserver\mysmbtstprn"</code></strong> </pre><p> If it does not work, it could be a permissions problem with the <em class="parameter"><code>[print$]</code></em> share. -</p></li><li class="step" title="(Optional) Print a test page."><p class="title"><b>(Optional) Print a test page.</b></p><a class="indexterm" name="id410054"></a><pre class="screen"> +</p></li><li class="step" title="(Optional) Print a test page."><p class="title"><b>(Optional) Print a test page.</b></p><a class="indexterm" name="id410048"></a><pre class="screen"> <code class="prompt">C:\> </code><strong class="userinput"><code>rundll32 printui.dll,PrintUIEntry /p /n "\\sambaserver\mysmbtstprn"</code></strong> </pre><p> Then hit [TAB] five times, [ENTER] twice, [TAB] once, and [ENTER] again, and march to the printer. @@ -2249,10 +2249,10 @@ Just put it in a frame and bolt it to the wall with the heading "MY FIRST RPCCLI why not just throw it away! </p></li><li class="step" title="(Obligatory.) Enjoy. Jump. Celebrate your success."><p class="title"><b>(Obligatory.) Enjoy. Jump. Celebrate your success.</b></p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>echo "Cheeeeerioooooo! Success..." >> /var/log/samba/log.smbd</code></strong> -</pre></li></ol></div></div><div class="sect2" title="Troubleshooting Revisited"><div class="titlepage"><div><div><h3 class="title"><a name="id410129"></a>Troubleshooting Revisited</h3></div></div></div><p> -<a class="indexterm" name="id410137"></a> +</pre></li></ol></div></div><div class="sect2" title="Troubleshooting Revisited"><div class="titlepage"><div><div><h3 class="title"><a name="id410123"></a>Troubleshooting Revisited</h3></div></div></div><p> +<a class="indexterm" name="id410131"></a> The setdriver command will fail if in Samba's mind the queue is not -already there. A successful installation displys the promising message that the: +already there. A successful installation displays the promising message that the: </p><pre class="screen"> Printer Driver ABC successfully installed. </pre><p> @@ -2261,20 +2261,20 @@ a disappointing message like this one: <code class="computeroutput"> result was NT_STATUS_UNSUCCESSFUL </code></p><p> -<a class="indexterm" name="id410166"></a> -<a class="indexterm" name="id410173"></a> +<a class="indexterm" name="id410160"></a> +<a class="indexterm" name="id410167"></a> It is not good enough that you can see the queue in CUPS, using the <code class="literal">lpstat -p ir85wm</code> command. A bug in most recent versions of Samba prevents the proper update of the queue list. The recognition of newly installed CUPS printers fails unless you restart Samba or send a HUP to all smbd processes. To verify if this is the reason why Samba does not execute the <code class="literal">setdriver</code> command successfully, check if Samba <span class="quote">“<span class="quote">sees</span>”</span> the printer: -<a class="indexterm" name="id410198"></a> +<a class="indexterm" name="id410192"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>rpcclient transmeta -N -U'root%xxxx' -c 'enumprinters 0'|grep ir85wm</code></strong> printername:[ir85wm] </pre><p> An alternate command could be this: -<a class="indexterm" name="id410227"></a> +<a class="indexterm" name="id410221"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>rpcclient transmeta -N -U'root%secret' -c 'getprinter ir85wm' </code></strong> cmd = getprinter ir85wm @@ -2284,28 +2284,28 @@ An alternate command could be this: comment:[CUPS PostScript-Treiber for Windows NT/200x/XP] </pre><p> By the way, you can use these commands, plus a few more, of course, to install drivers on remote Windows NT print servers too! -</p></div></div><div class="sect1" title="The Printing *.tdb Files"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id410261"></a>The Printing <code class="filename">*.tdb</code> Files</h2></div></div></div><p> -<a class="indexterm" name="id410274"></a> -<a class="indexterm" name="id410281"></a> -<a class="indexterm" name="id410290"></a> -<a class="indexterm" name="id410299"></a> -<a class="indexterm" name="id410308"></a> -<a class="indexterm" name="id410317"></a> -<a class="indexterm" name="id410326"></a> -<a class="indexterm" name="id410334"></a> -<a class="indexterm" name="id410343"></a> -<a class="indexterm" name="id410352"></a> -<a class="indexterm" name="id410361"></a> -<a class="indexterm" name="id410370"></a> -<a class="indexterm" name="id410379"></a> +</p></div></div><div class="sect1" title="The Printing *.tdb Files"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id410254"></a>The Printing <code class="filename">*.tdb</code> Files</h2></div></div></div><p> +<a class="indexterm" name="id410268"></a> +<a class="indexterm" name="id410275"></a> +<a class="indexterm" name="id410284"></a> +<a class="indexterm" name="id410293"></a> +<a class="indexterm" name="id410302"></a> +<a class="indexterm" name="id410310"></a> +<a class="indexterm" name="id410319"></a> +<a class="indexterm" name="id410328"></a> +<a class="indexterm" name="id410337"></a> +<a class="indexterm" name="id410346"></a> +<a class="indexterm" name="id410355"></a> +<a class="indexterm" name="id410364"></a> +<a class="indexterm" name="id410373"></a> Some mystery is associated with the series of files with a tdb suffix appearing in every Samba installation. They are <code class="filename">connections.tdb</code>, <code class="filename">printing.tdb</code>, <code class="filename">share_info.tdb</code>, <code class="filename">ntdrivers.tdb</code>, <code class="filename">unexpected.tdb</code>, <code class="filename">brlock.tdb</code>, <code class="filename">locking.tdb</code>, <code class="filename">ntforms.tdb</code>, <code class="filename">messages.tdb</code> , <code class="filename">ntprinters.tdb</code>, <code class="filename">sessionid.tdb</code>, and <code class="filename">secrets.tdb</code>. What is their purpose? -</p><div class="sect2" title="Trivial Database Files"><div class="titlepage"><div><div><h3 class="title"><a name="id410460"></a>Trivial Database Files</h3></div></div></div><p> -<a class="indexterm" name="id410468"></a> +</p><div class="sect2" title="Trivial Database Files"><div class="titlepage"><div><div><h3 class="title"><a name="id410454"></a>Trivial Database Files</h3></div></div></div><p> +<a class="indexterm" name="id410462"></a> A Windows NT (print) server keeps track of all information needed to serve its duty toward its clients by storing entries in the Windows registry. Client queries are answered by reading from the registry, Administrator or user configuration settings that are saved by writing into the registry. Samba and UNIX @@ -2314,7 +2314,7 @@ of <code class="filename">*.tdb</code> files. (TDB stands for trivial data base) <code class="filename">/var/lib/samba/</code> or <code class="filename">/var/lock/samba/</code>. The printing-related files are <code class="filename">ntprinters.tdb</code>, <code class="filename">printing.tdb</code>,<code class="filename">ntforms.tdb</code>, and <code class="filename">ntdrivers.tdb</code>. -</p></div><div class="sect2" title="Binary Format"><div class="titlepage"><div><div><h3 class="title"><a name="id410522"></a>Binary Format</h3></div></div></div><p> +</p></div><div class="sect2" title="Binary Format"><div class="titlepage"><div><div><h3 class="title"><a name="id410516"></a>Binary Format</h3></div></div></div><p> <code class="filename">*.tdb</code> files are not human readable. They are written in a binary format. <span class="quote">“<span class="quote">Why not ASCII?</span>”</span>, you may ask. <span class="quote">“<span class="quote">After all, ASCII configuration files are a good and proven tradition on UNIX.</span>”</span> The reason for this design decision by the Samba Team is mainly performance. Samba needs to be @@ -2323,16 +2323,16 @@ thousands of them. Some of these <code class="literal">smbds</code> might need t <code class="filename">*.tdb</code> file <span class="emphasis"><em>at the same time</em></span>. The file format of Samba's <code class="filename">*.tdb</code> files allows for this provision. Many smbd processes may write to the same <code class="filename">*.tdb</code> file at the same time. This wouldn't be possible with pure ASCII files. -</p></div><div class="sect2" title="Losing *.tdb Files"><div class="titlepage"><div><div><h3 class="title"><a name="id410583"></a>Losing <code class="filename">*.tdb</code> Files</h3></div></div></div><p> +</p></div><div class="sect2" title="Losing *.tdb Files"><div class="titlepage"><div><div><h3 class="title"><a name="id410577"></a>Losing <code class="filename">*.tdb</code> Files</h3></div></div></div><p> It is very important that all <code class="filename">*.tdb</code> files remain consistent over all write and read accesses. However, it may happen that these files <span class="emphasis"><em>do</em></span> get corrupted. (A <code class="literal">kill -9 `pidof smbd'</code> while a write access is in progress could do the damage, as could a power interruption, etc.). In cases of trouble, a deletion of the old printing-related <code class="filename">*.tdb</code> files may be the only option. After that, you need to re-create all print-related setups unless you have made a backup of the <code class="filename">*.tdb</code> files in time. -</p></div><div class="sect2" title="Using tdbbackup"><div class="titlepage"><div><div><h3 class="title"><a name="id410629"></a>Using <code class="literal">tdbbackup</code></h3></div></div></div><p> -<a class="indexterm" name="id410642"></a> -<a class="indexterm" name="id410653"></a> +</p></div><div class="sect2" title="Using tdbbackup"><div class="titlepage"><div><div><h3 class="title"><a name="id410623"></a>Using <code class="literal">tdbbackup</code></h3></div></div></div><p> +<a class="indexterm" name="id410636"></a> +<a class="indexterm" name="id410647"></a> Samba ships with a little utility that helps the root user of your system to backup your <code class="filename">*.tdb</code> files. If you run it with no argument, it prints a usage message: </p><pre class="screen"> @@ -2359,10 +2359,10 @@ ntprinters.tdb sessionid.tdb -rw------- 1 root root 40960 May 2 03:44 printing.tdb -rw------- 1 root root 40960 May 2 03:44 printing.tdb.bak -</pre></div></div><div class="sect1" title="CUPS Print Drivers from Linuxprinting.org"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id410740"></a>CUPS Print Drivers from Linuxprinting.org</h2></div></div></div><p> -<a class="indexterm" name="id410748"></a> +</pre></div></div><div class="sect1" title="CUPS Print Drivers from Linuxprinting.org"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id410734"></a>CUPS Print Drivers from Linuxprinting.org</h2></div></div></div><p> +<a class="indexterm" name="id410742"></a> CUPS ships with good support for HP LaserJet-type printers. You can install the generic driver as follows: -<a class="indexterm" name="id410756"></a> +<a class="indexterm" name="id410750"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>lpadmin -p laserjet4plus -v parallel:/dev/lp0 -E -m laserjet.ppd</code></strong> </pre><p> @@ -2378,9 +2378,9 @@ excellent recommendations about which driver is best used for each printer. Its the tireless work of Till Kamppeter from Mandrakesoft, who is also the principal author of the <code class="literal">foomatic-rip</code> utility. </p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> -<a class="indexterm" name="id410837"></a> -<a class="indexterm" name="id410844"></a> -<a class="indexterm" name="id410851"></a> +<a class="indexterm" name="id410831"></a> +<a class="indexterm" name="id410838"></a> +<a class="indexterm" name="id410845"></a> The former <code class="literal">cupsomatic</code> concept is now being replaced by the new successor, a much more powerful <code class="literal">foomatic-rip</code>. <code class="literal">cupsomatic</code> is no longer maintained. Here is the new URL to the <a class="ulink" href="http://www.linuxprinting.org/driver_list.cgi" target="_top">Foomatic-3.0</a> @@ -2389,9 +2389,9 @@ for your Foomatic-driven printers. foomatic-rip will not work with PPDs generate <code class="literal">cupsomatic</code>. The new-style PPDs are 100% compliant with the Adobe PPD specification. They are also intended to be used by Samba and the cupsaddsmb utility, to provide the driver files for the Windows clients! -</p></div><div class="sect2" title="foomatic-rip and Foomatic Explained"><div class="titlepage"><div><div><h3 class="title"><a name="id410901"></a>foomatic-rip and Foomatic Explained</h3></div></div></div><p> +</p></div><div class="sect2" title="foomatic-rip and Foomatic Explained"><div class="titlepage"><div><div><h3 class="title"><a name="id410895"></a>foomatic-rip and Foomatic Explained</h3></div></div></div><p> +<a class="indexterm" name="id410903"></a> <a class="indexterm" name="id410909"></a> -<a class="indexterm" name="id410916"></a> Nowadays, 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 (which, by the way, works on all UNIXes and on Mac OS X and Darwin, too). The utilities from this sire have a very end-user-friendly interface that allows for an easy update of drivers and PPDs for all supported models, @@ -2402,8 +2402,8 @@ Recently, Foomatic has achieved the astonishing milestone of <a class="ulink" hr Linuxprinting.org keeps all the important facts about printer drivers, supported models, and which options are available 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 various models, and many models may be driven by different drivers its your choice! -</p><div class="sect3" title="690 “Perfect” Printers"><div class="titlepage"><div><div><h4 class="title"><a name="id410962"></a>690 <span class="quote">“<span class="quote">Perfect</span>”</span> Printers</h4></div></div></div><p> -<a class="indexterm" name="id410974"></a> +</p><div class="sect3" title="690 “Perfect” Printers"><div class="titlepage"><div><div><h4 class="title"><a name="id410956"></a>690 <span class="quote">“<span class="quote">Perfect</span>”</span> Printers</h4></div></div></div><p> +<a class="indexterm" name="id410967"></a> At present, there are 690 devices dubbed as working perfectly: 181 are <span class="emphasis"><em>mostly</em></span> perfect, 96 are <span class="emphasis"><em>partially</em></span> perfect, and 46 are paperweights. Keeping in mind that most of these are non-PostScript models (PostScript printers are automatically supported by CUPS to perfection by using their @@ -2411,7 +2411,7 @@ own manufacturer-provided Windows PPD), and that a multifunctional device never if it does not also scan and copy and fax under GNU/Linux then this is a truly astonishing achievement! Three years ago the number was not more than 500, and Linux or UNIX printing at the time wasn't anywhere near the quality it is today. -</p></div><div class="sect3" title="How the Printing HOWTO Started It All"><div class="titlepage"><div><div><h4 class="title"><a name="id410998"></a>How the Printing HOWTO Started It All</h4></div></div></div><p> +</p></div><div class="sect3" title="How the Printing HOWTO Started It All"><div class="titlepage"><div><div><h4 class="title"><a name="id410991"></a>How the Printing HOWTO Started It All</h4></div></div></div><p> A few years ago <a class="ulink" href="http://www2.picante.com/" target="_top">Grant Taylor</a> started it all. The roots 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 side-project to this document, which served many Linux users and admins to guide their first steps in this @@ -2420,8 +2420,8 @@ distinct patterns of ink or toner particles on paper substrates</span>”</s Postgres database with information about the hardware and driver zoo that made up Linux printing of the time. This database became the core component of today's Foomatic collection of tools and data. In the meantime, it has moved to an XML representation of the data. -</p></div><div class="sect3" title="Foomatic's Strange Name"><div class="titlepage"><div><div><h4 class="title"><a name="id411028"></a>Foomatic's Strange Name</h4></div></div></div><p> -<a class="indexterm" name="id411036"></a> +</p></div><div class="sect3" title="Foomatic's Strange Name"><div class="titlepage"><div><div><h4 class="title"><a name="id411022"></a>Foomatic's Strange Name</h4></div></div></div><p> +<a class="indexterm" name="id411030"></a> <span class="quote">“<span class="quote">Why the funny name?</span>”</span> you ask. When it really took off, around spring 2000, CUPS was far less popular than today, and most systems used LPD, LPRng, or even PDQ to print. CUPS shipped with a few generic drivers (good for a few hundred different printer models). These didn't support many device-specific options. @@ -2439,10 +2439,10 @@ several birds with one stone: to CUPS users (because often the traditional Ghostscript way of printing was the only one available).</p></li><li class="listitem"><p>It gave all the advanced CUPS options (Web interface, GUI driver configurations) to users wanting (or needing) to use - Ghostscript filters.</p></li></ul></div></div><div class="sect3" title="cupsomatic, pdqomatic, lpdomatic, directomatic"><div class="titlepage"><div><div><h4 class="title"><a name="id411092"></a>cupsomatic, pdqomatic, lpdomatic, directomatic</h4></div></div></div><p> + Ghostscript filters.</p></li></ul></div></div><div class="sect3" title="cupsomatic, pdqomatic, lpdomatic, directomatic"><div class="titlepage"><div><div><h4 class="title"><a name="id411086"></a>cupsomatic, pdqomatic, lpdomatic, directomatic</h4></div></div></div><p> +<a class="indexterm" name="id411094"></a> <a class="indexterm" name="id411100"></a> -<a class="indexterm" name="id411106"></a> -<a class="indexterm" name="id411113"></a> +<a class="indexterm" name="id411107"></a> CUPS worked through a quickly hacked-up filter script named <a class="ulink" href="http://www.linuxprinting.org/download.cgi?filename=cupsomatic&show=0" target="_top">cupsomatic</a>. cupsomatic ran the printfile through Ghostscript, constructing automatically the rather complicated command line needed. It just needed to be copied into the CUPS system to make it work. To configure the way cupsomatic controls the @@ -2463,8 +2463,8 @@ So, to answer your question, <span class="quote">“<span class="quote">Foom behind the <span class="quote">“<span class="quote">*omatic</span>”</span> scripts. Foomatic, up to versions 2.0.x, required (ugly) Perl data structures attached to Linuxprinting.org PPDs for CUPS. It had a different <span class="quote">“<span class="quote">*omatic</span>”</span> script for every spooler, as well as different printer configuration files. -</p></div><div class="sect3" title="The Grand Unification Achieved"><div class="titlepage"><div><div><h4 class="title"><a name="id411230"></a>The <span class="emphasis"><em>Grand Unification</em></span> Achieved</h4></div></div></div><p> -<a class="indexterm" name="id411242"></a> +</p></div><div class="sect3" title="The Grand Unification Achieved"><div class="titlepage"><div><div><h4 class="title"><a name="id411224"></a>The <span class="emphasis"><em>Grand Unification</em></span> Achieved</h4></div></div></div><p> +<a class="indexterm" name="id411235"></a> This has all changed in Foomatic versions 2.9 (beta) and released as <span class="quote">“<span class="quote">stable</span>”</span> 3.0. It has now achieved 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&show=0" target="_top">foomatic-rip</a>. This single script is the unification of the previously different spooler-specific *omatic scripts. @@ -2473,18 +2473,18 @@ PostScript printer PPDs and the Linuxprinting.org-generated ones), all of a sudd have the power of PPDs at their disposal. Users only need to plug foomatic-rip into their system. For users there is improved media type and source support paper sizes and trays are easier to configure. </p><p> +<a class="indexterm" name="id411264"></a> <a class="indexterm" name="id411270"></a> <a class="indexterm" name="id411276"></a> -<a class="indexterm" name="id411282"></a> Also, the new generation of Linuxprinting.org PPDs no longer contains Perl data structures. If you are a distro maintainer and have used the previous version of Foomatic, you may want to give the new one a spin, but remember to generate a new-version set of PPDs via the new <a class="ulink" href="http://www.linuxprinting.org/download/foomatic/foomatic-db-engine-3.0.0beta1.tar.gz" target="_top">foomatic-db-engine!</a>. Individual users just need to generate a single new PPD specific to their model by <a class="ulink" href="http://www.linuxprinting.org/kpfeifle/LinuxKongress2002/Tutorial/II.Foomatic-User/II.tutorial-handout-foomatic-user.html" target="_top">following the steps</a> outlined in the Foomatic tutorial or in this chapter. This new development is truly amazing. </p><p> +<a class="indexterm" name="id411303"></a> <a class="indexterm" name="id411310"></a> -<a class="indexterm" name="id411316"></a> -<a class="indexterm" name="id411323"></a> +<a class="indexterm" name="id411317"></a> foomatic-rip is a very clever wrapper around the need to run Ghostscript with a different syntax, options, device selections, and/or filters for each different printer or spooler. At the same time, it can read the PPD associated with a print queue and modify the print job according to the user selections. Together with this @@ -2492,8 +2492,8 @@ comes the 100% compliance of the new Foomatic PPDs with the Adobe spec. Some inn Foomatic concept may surprise users. It will support custom paper sizes for many printers and will support printing on media drawn from different paper trays within the same job (in both cases, even where there is no support for this from Windows-based vendor printer drivers). -</p></div><div class="sect3" title="Driver Development Outside"><div class="titlepage"><div><div><h4 class="title"><a name="id411338"></a>Driver Development Outside</h4></div></div></div><p> -<a class="indexterm" name="id411346"></a> +</p></div><div class="sect3" title="Driver Development Outside"><div class="titlepage"><div><div><h4 class="title"><a name="id411332"></a>Driver Development Outside</h4></div></div></div><p> +<a class="indexterm" name="id411340"></a> Most driver development itself does not happen within Linuxprinting.org. Drivers are written by independent maintainers. Linuxprinting.org just pools all the information and stores it in its database. In addition, it also provides the Foomatic glue to integrate the many drivers into any modern (or legacy) printing system @@ -2501,25 +2501,25 @@ known to the world. </p><p> Speaking of the different driver development groups, most of the work is currently done in three projects: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> -<a class="indexterm" name="id411366"></a> +<a class="indexterm" name="id411360"></a> <a class="ulink" href="http://www-124.ibm.com/developerworks/oss/linux/projects/omni/" target="_top">Omni</a> a free software project by IBM that tries to convert its printer driver knowledge from good-ol' OS/2 times into a modern, modular, universal driver architecture for Linux/UNIX (still beta). This currently supports 437 models.</p></li><li class="listitem"><p> -<a class="indexterm" name="id411389"></a> +<a class="indexterm" name="id411383"></a> <a class="ulink" href="http://hpinkjet.sf.net/" target="_top">HPIJS</a> a free software project by HP to provide the support for its own range of models (very mature, printing in most cases is perfect and provides true photo quality). This currently supports 369 models.</p></li><li class="listitem"><p> -<a class="indexterm" name="id411410"></a> +<a class="indexterm" name="id411404"></a> <a class="ulink" href="http://gimp-print.sourceforge.net/" target="_top">Gutenprint</a> a free software effort, started by Michael Sweet (also lead developer for CUPS), now directed by Robert Krawitz, which has achieved an amazing level of photo print quality (many Epson users swear that its quality is better than the vendor drivers provided by Epson for the Microsoft - platforms). This currently supports 522 models.</p></li></ul></div></div><div class="sect3" title="Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)"><div class="titlepage"><div><div><h4 class="title"><a name="id411431"></a>Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</h4></div></div></div><p> + platforms). This currently supports 522 models.</p></li></ul></div></div><div class="sect3" title="Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)"><div class="titlepage"><div><div><h4 class="title"><a name="id411425"></a>Forums, Downloads, Tutorials, Howtos (Also for Mac OS X and Commercial UNIX)</h4></div></div></div><p> Linuxprinting.org today is the one-stop shop to download printer drivers. Look for printer information and <a class="ulink" href="http://www.linuxprinting.org//kpfeifle/LinuxKongress2002/Tutorial/" target="_top">tutorials</a> or solve printing problems in its popular <a class="ulink" href="http://www.linuxprinting.org/newsportal/" target="_top">forums</a>. This @@ -2528,9 +2528,9 @@ commercial UNIX systems</a> are also going there, and the relatively new <a class="ulink" href="http://www.linuxprinting.org/newsportal/thread.php3?name=linuxprinting.macosx.general" target="_top">Mac OS X forum</a> has turned out to be one of the most frequented forums after only a few weeks. </p><p> +<a class="indexterm" name="id411464"></a> <a class="indexterm" name="id411470"></a> <a class="indexterm" name="id411477"></a> -<a class="indexterm" name="id411483"></a> Linuxprinting.org and the Foomatic driver wrappers around Ghostscript are now a standard tool-chain for printing on all the important distros. Most of them also have CUPS underneath. While in recent years most printer data had been added by Kamppeter, many additional contributions came from engineers with SuSE, Red @@ -2539,16 +2539,16 @@ and Conectiva have merged and are now called Mandriva. </p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p> Till Kamppeter from Mandrakesoft is doing an excellent job in his spare time to maintain Linuxprinting.org and Foomatic. So if you use it often, please send him a note showing your appreciation. -</p></div></div><div class="sect3" title="Foomatic Database-Generated PPDs"><div class="titlepage"><div><div><h4 class="title"><a name="id411502"></a>Foomatic Database-Generated PPDs</h4></div></div></div><p> -<a class="indexterm" name="id411510"></a> -<a class="indexterm" name="id411517"></a> -<a class="indexterm" name="id411524"></a> +</p></div></div><div class="sect3" title="Foomatic Database-Generated PPDs"><div class="titlepage"><div><div><h4 class="title"><a name="id411496"></a>Foomatic Database-Generated PPDs</h4></div></div></div><p> +<a class="indexterm" name="id411504"></a> +<a class="indexterm" name="id411511"></a> +<a class="indexterm" name="id411518"></a> +<a class="indexterm" name="id411525"></a> <a class="indexterm" name="id411531"></a> <a class="indexterm" name="id411538"></a> -<a class="indexterm" name="id411544"></a> -<a class="indexterm" name="id411551"></a> +<a class="indexterm" name="id411545"></a> +<a class="indexterm" name="id411552"></a> <a class="indexterm" name="id411558"></a> -<a class="indexterm" name="id411564"></a> The Foomatic database is an amazing piece of ingenuity in itself. Not only does it keep the printer and driver information, but it is organized in a way that it can generate PPD files on the fly from its internal XML-based datasets. While these PPDs are modeled to the Adobe specification of PPDs, the @@ -2563,7 +2563,7 @@ ask from Ghostscript to convert the PostScript print job into a raster format re This usage of PPDs to describe the options of non-PostScript printers was the invention of the CUPS developers. 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 this information to present the available settings to the user as an intuitive menu selection. -</p></div></div><div class="sect2" title="foomatic-rip and Foomatic PPD Download and Installation"><div class="titlepage"><div><div><h3 class="title"><a name="id411605"></a>foomatic-rip and Foomatic PPD Download and Installation</h3></div></div></div><p> +</p></div></div><div class="sect2" title="foomatic-rip and Foomatic PPD Download and Installation"><div class="titlepage"><div><div><h3 class="title"><a name="id411599"></a>foomatic-rip and Foomatic PPD Download and Installation</h3></div></div></div><p> Here are the steps to install a foomatic-rip-driven LaserJet 4 Plus-compatible printer in CUPS (note that recent distributions of SuSE, UnitedLinux and Mandrake may ship with a complete package of Foomatic-PPDs plus the @@ -2656,8 +2656,8 @@ how the resulting raster data should look and which printer commands to embed in fit for your printer model's consumption.</p></li><li class="listitem"><p>Ghostscript <span class="emphasis"><em>must</em></span> (depending on the driver/model) contain support for a certain device representing the selected driver for your model (as shown by <code class="literal">gs -h</code>).</p></li><li class="listitem"><p>foomatic-rip needs a new version of PPDs (PPD versions - produced for cupsomatic do not work with foomatic-rip).</p></li></ul></div></div></div><div class="sect1" title="Page Accounting with CUPS"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id412028"></a>Page Accounting with CUPS</h2></div></div></div><p> -<a class="indexterm" name="id412036"></a> + produced for cupsomatic do not work with foomatic-rip).</p></li></ul></div></div></div><div class="sect1" title="Page Accounting with CUPS"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id412022"></a>Page Accounting with CUPS</h2></div></div></div><p> +<a class="indexterm" name="id412030"></a> Often there are questions regarding print quotas where Samba users (that is, Windows clients) should not be able to print beyond a certain number of pages or data volume per day, week, or month. This feature is dependent on the real print subsystem you're using. Samba's part is always to receive the job files from the @@ -2665,18 +2665,18 @@ clients (filtered <span class="emphasis"><em>or</em></span> unfiltered) and hand </p><p> Of course one could hack things with one's own scripts. But then there is CUPS. CUPS supports quotas that can be based on the size of jobs or on the number of pages or both, and can span any time period you want. -</p><div class="sect2" title="Setting Up Quotas"><div class="titlepage"><div><div><h3 class="title"><a name="id412058"></a>Setting Up Quotas</h3></div></div></div><p> -<a class="indexterm" name="id412066"></a> +</p><div class="sect2" title="Setting Up Quotas"><div class="titlepage"><div><div><h3 class="title"><a name="id412052"></a>Setting Up Quotas</h3></div></div></div><p> +<a class="indexterm" name="id412060"></a> This is an example command of how root would set a print quota in CUPS, assuming an existing printer named <span class="quote">“<span class="quote">quotaprinter</span>”</span>: -<a class="indexterm" name="id412080"></a> +<a class="indexterm" name="id412073"></a> </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>lpadmin -p quotaprinter -o job-quota-period=604800 \ -o job-k-limit=1024 -o job-page-limit=100</code></strong> </pre><p> This would limit every single user to print no more than 100 pages or 1024 KB of data (whichever comes first) within the last 604,800 seconds ( = 1 week). -</p></div><div class="sect2" title="Correct and Incorrect Accounting"><div class="titlepage"><div><div><h3 class="title"><a name="id412109"></a>Correct and Incorrect Accounting</h3></div></div></div><p> +</p></div><div class="sect2" title="Correct and Incorrect Accounting"><div class="titlepage"><div><div><h3 class="title"><a name="id412102"></a>Correct and Incorrect Accounting</h3></div></div></div><p> For CUPS to count correctly, the printfile needs to pass the CUPS pstops filter; otherwise it uses a dummy count of <span class="quote">“<span class="quote">one</span>”</span>. Some print files do not pass it (e.g., image files), but then those are mostly one-page jobs anyway. This also means that proprietary drivers for the target printer running on the client @@ -2687,12 +2687,12 @@ You need to send PostScript from the clients (i.e., run a PostScript driver ther accounting done. If the printer is a non-PostScript model, you need to let CUPS do the job to convert the file to a print-ready format for the target printer. This is currently working for about a thousand different printer models. Linuxprinting.org has a driver <a class="ulink" href="http://www.linuxprinting.org/printer_list.cgi" target="_top">list</a>. -</p></div><div class="sect2" title="Adobe and CUPS PostScript Drivers for Windows Clients"><div class="titlepage"><div><div><h3 class="title"><a name="id412142"></a>Adobe and CUPS PostScript Drivers for Windows Clients</h3></div></div></div><p> +</p></div><div class="sect2" title="Adobe and CUPS PostScript Drivers for Windows Clients"><div class="titlepage"><div><div><h3 class="title"><a name="id412135"></a>Adobe and CUPS PostScript Drivers for Windows Clients</h3></div></div></div><p> +<a class="indexterm" name="id412143"></a> <a class="indexterm" name="id412150"></a> -<a class="indexterm" name="id412156"></a> -<a class="indexterm" name="id412163"></a> +<a class="indexterm" name="id412157"></a> +<a class="indexterm" name="id412164"></a> <a class="indexterm" name="id412170"></a> -<a class="indexterm" name="id412176"></a> Before CUPS 1.1.16, your only option was to use the Adobe PostScript driver on the Windows clients. The output of this driver was not always passed through the <code class="literal">pstops</code> filter on the CUPS/Samba side, and therefore was not counted correctly (the reason is that it often, depending on the PPD being used, wrote a @@ -2703,13 +2703,13 @@ From CUPS 1.1.16 and later releases, you can use the CUPS PostScript driver for clients (which is tagged in the download area of <code class="filename">http://www.cups.org/</code> as the <code class="filename">cups-samba-1.1.16.tar.gz</code> package). It does <span class="emphasis"><em>not</em></span> work for Windows 9x/Me clients, but it guarantees: -</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> <a class="indexterm" name="id412231"></a> To not write a PJL-header.</p></li><li class="listitem"><p>To still read and support all PJL-options named in the +</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p> <a class="indexterm" name="id412225"></a> To not write a PJL-header.</p></li><li class="listitem"><p>To still read and support all PJL-options named in the driver PPD with its own means.</p></li><li class="listitem"><p>That the file will pass through the <code class="literal">pstops</code> filter on the CUPS/Samba server.</p></li><li class="listitem"><p>To page-count correctly the print file.</p></li></ul></div><p> You can read more about the setup of this combination in the man page for <code class="literal">cupsaddsmb</code> (which is only present with CUPS installed, and only current from CUPS 1.1.16). -</p></div><div class="sect2" title="The page_log File Syntax"><div class="titlepage"><div><div><h3 class="title"><a name="id412272"></a>The page_log File Syntax</h3></div></div></div><p> -<a class="indexterm" name="id412280"></a> +</p></div><div class="sect2" title="The page_log File Syntax"><div class="titlepage"><div><div><h3 class="title"><a name="id412266"></a>The page_log File Syntax</h3></div></div></div><p> +<a class="indexterm" name="id412274"></a> These are the items CUPS logs in the <code class="filename">page_log</code> for every page of a job: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Printer name</p></li><li class="listitem"><p>User name</p></li><li class="listitem"><p>Job ID</p></li><li class="listitem"><p>Time of printing</p></li><li class="listitem"><p>Page number</p></li><li class="listitem"><p>Number of copies</p></li><li class="listitem"><p>A billing information string (optional)</p></li><li class="listitem"><p>The host that sent the job (included since version 1.1.19)</p></li></ul></div><p> Here is an extract of my CUPS server's <code class="filename">page_log</code> file to illustrate the @@ -2727,7 +2727,7 @@ by user <em class="parameter"><code>kurt</code></em>, a 64-page job printed in t The next job had ID <em class="parameter"><code>402</code></em>, was sent by user <em class="parameter"><code>boss</code></em> from IP address <code class="constant">10.160.51.33</code>, printed from one page 440 copies, and is set to be billed to <em class="parameter"><code>finance-dep</code></em>. -</p></div><div class="sect2" title="Possible Shortcomings"><div class="titlepage"><div><div><h3 class="title"><a name="id412413"></a>Possible Shortcomings</h3></div></div></div><p> +</p></div><div class="sect2" title="Possible Shortcomings"><div class="titlepage"><div><div><h3 class="title"><a name="id412406"></a>Possible Shortcomings</h3></div></div></div><p> What flaws or shortcomings are there with this quota system? </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The ones named above (wrongly logged job in case of printer hardware failure, and so on).</p></li><li class="listitem"><p>In reality, CUPS counts the job pages that are being @@ -2741,7 +2741,7 @@ What flaws or shortcomings are there with this quota system? <span class="quote">“<span class="quote">used-up</span>”</span> number of current quota.</p></li><li class="listitem"><p>A user having used up 99 sheets of a 100 quota will still be able to send and print a 1,000 sheet job.</p></li><li class="listitem"><p>A user being denied a job because of a filled-up quota does not get a meaningful error message from CUPS other than - <span class="quote">“<span class="quote">client-error-not-possible</span>”</span>.</p></li></ul></div></div><div class="sect2" title="Future Developments"><div class="titlepage"><div><div><h3 class="title"><a name="id412471"></a>Future Developments</h3></div></div></div><p> + <span class="quote">“<span class="quote">client-error-not-possible</span>”</span>.</p></li></ul></div></div><div class="sect2" title="Future Developments"><div class="titlepage"><div><div><h3 class="title"><a name="id412465"></a>Future Developments</h3></div></div></div><p> This is the best system currently available, and there are huge improvements under development for CUPS 1.2: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Page counting will go into the backends (these talk @@ -2749,10 +2749,10 @@ improvements under development for CUPS 1.2: actual printing process; thus, a jam at the fifth sheet will lead to a stop in the counting).</p></li><li class="listitem"><p>Quotas will be handled more flexibly.</p></li><li class="listitem"><p>Probably there will be support for users to inquire about their accounts in advance.</p></li><li class="listitem"><p>Probably there will be support for some other tools - around this topic.</p></li></ul></div></div><div class="sect2" title="Other Accounting Tools"><div class="titlepage"><div><div><h3 class="title"><a name="id412506"></a>Other Accounting Tools</h3></div></div></div><p> + around this topic.</p></li></ul></div></div><div class="sect2" title="Other Accounting Tools"><div class="titlepage"><div><div><h3 class="title"><a name="id412500"></a>Other Accounting Tools</h3></div></div></div><p> Other accounting tools that can be used includes: PrintAnalyzer, pyKota, printbill, LogReport. For more information regarding these tools you can try a Google search. -</p></div></div><div class="sect1" title="Additional Material"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id412518"></a>Additional Material</h2></div></div></div><p> +</p></div></div><div class="sect1" title="Additional Material"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id412512"></a>Additional Material</h2></div></div></div><p> A printer queue with <span class="emphasis"><em>no</em></span> PPD associated to it is a <span class="quote">“<span class="quote">raw</span>”</span> printer, and all files will go directly there as received by the spooler. The exceptions are file types <em class="parameter"><code>application/octet-stream</code></em> @@ -2831,15 +2831,15 @@ the jobs of hundreds of users on some big machine, where no user is allowed to have direct access (such as when the operators often need to load the proper paper type before running the 10,000 page job requested by marketing for the mailing, and so on). -</p></div><div class="sect1" title="Autodeletion or Preservation of CUPS Spool Files"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id412706"></a>Autodeletion or Preservation of CUPS Spool Files</h2></div></div></div><p> -<a class="indexterm" name="id412714"></a> -<a class="indexterm" name="id412721"></a> -<a class="indexterm" name="id412728"></a> +</p></div><div class="sect1" title="Autodeletion or Preservation of CUPS Spool Files"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id412700"></a>Autodeletion or Preservation of CUPS Spool Files</h2></div></div></div><p> +<a class="indexterm" name="id412708"></a> +<a class="indexterm" name="id412715"></a> +<a class="indexterm" name="id412722"></a> Samba print files pass through two spool directories. One is the incoming directory managed by Samba (set in the <a class="link" href="smb.conf.5.html#PATH" target="_top">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 CUPS it is normally <code class="filename">/var/spool/cups/</code>, as set by the <code class="filename">cupsd.conf</code> directive <code class="filename">RequestRoot /var/spool/cups</code>. -</p><div class="sect2" title="CUPS Configuration Settings Explained"><div class="titlepage"><div><div><h3 class="title"><a name="id412779"></a>CUPS Configuration Settings Explained</h3></div></div></div><p> +</p><div class="sect2" title="CUPS Configuration Settings Explained"><div class="titlepage"><div><div><h3 class="title"><a name="id412773"></a>CUPS Configuration Settings Explained</h3></div></div></div><p> Some important parameter settings in the CUPS configuration file <code class="filename">cupsd.conf</code> are: </p><div class="variablelist"><dl><dt><span class="term">PreserveJobHistory Yes</span></dt><dd><p> @@ -2863,7 +2863,7 @@ Some important parameter settings in the CUPS configuration file </p></dd></dl></div><p> (There are also additional settings for <em class="parameter"><code>MaxJobsPerUser</code></em> and <em class="parameter"><code>MaxJobsPerPrinter</code></em>.) -</p></div><div class="sect2" title="Preconditions"><div class="titlepage"><div><div><h3 class="title"><a name="id412856"></a>Preconditions</h3></div></div></div><p> +</p></div><div class="sect2" title="Preconditions"><div class="titlepage"><div><div><h3 class="title"><a name="id412850"></a>Preconditions</h3></div></div></div><p> For everything to work as it should, you need to have three things: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>A Samba smbd that is compiled against <code class="filename">libcups</code> (check on Linux by running <strong class="userinput"><code>ldd `which smbd'</code></strong>).</p></li><li class="listitem"><p>A Samba-<code class="filename">smb.conf</code> setting of @@ -2876,14 +2876,14 @@ In this case, all other manually set printing-related commands (like <a class="link" href="smb.conf.5.html#LPPAUSECOMMAND" target="_top">lppause command</a>, and <a class="link" href="smb.conf.5.html#LPRESUMECOMMAND" target="_top">lpresume command</a>) are ignored, and they should normally have no influence whatsoever on your printing. -</p></div></div><div class="sect2" title="Manual Configuration"><div class="titlepage"><div><div><h3 class="title"><a name="id412984"></a>Manual Configuration</h3></div></div></div><p> +</p></div></div><div class="sect2" title="Manual Configuration"><div class="titlepage"><div><div><h3 class="title"><a name="id412978"></a>Manual Configuration</h3></div></div></div><p> If you want to do things manually, replace the <a class="link" href="smb.conf.5.html#PRINTING" target="_top">printing = cups</a> by <a class="link" href="smb.conf.5.html#PRINTING" target="_top">printing = bsd</a>. Then your manually set commands may work (I haven't tested this), and a <a class="link" href="smb.conf.5.html#PRINTCOMMAND" target="_top">print command = lp -d %P %s; rm %s</a> may do what you need. -</p></div></div><div class="sect1" title="Printing from CUPS to Windows-Attached Printers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id413029"></a>Printing from CUPS to Windows-Attached Printers</h2></div></div></div><p> +</p></div></div><div class="sect1" title="Printing from CUPS to Windows-Attached Printers"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id413023"></a>Printing from CUPS to Windows-Attached Printers</h2></div></div></div><p> +<a class="indexterm" name="id413031"></a> <a class="indexterm" name="id413037"></a> -<a class="indexterm" name="id413044"></a> From time to time the question arises, how can you print <span class="emphasis"><em>to</em></span> a Windows-attached printer <span class="emphasis"><em>from</em></span> Samba? Normally the local connection from Windows host to printer would be done by USB or parallel cable, but this does not matter to Samba. From here only an SMB connection needs to be opened @@ -2918,8 +2918,8 @@ If this symlink does not exist, create it: </p><pre class="screen"> <code class="prompt">root# </code><strong class="userinput"><code>ln -s `which smbspool` /usr/lib/cups/backend/smb</code></strong> </pre><p> -<a class="indexterm" name="id413152"></a> -<a class="indexterm" name="id413159"></a> +<a class="indexterm" name="id413146"></a> +<a class="indexterm" name="id413153"></a> <code class="literal">smbspool</code> was written by Mike Sweet from the CUPS folks. It is included and ships with Samba. It may also be used with print subsystems other than CUPS, to spool jobs to Windows printer shares. To set up printer <em class="replaceable"><code>winprinter</code></em> on CUPS, you need to have a driver for it. Essentially @@ -2934,9 +2934,9 @@ To install a printer with the <em class="parameter"><code>smb</code></em> backen <code class="prompt">root# </code><strong class="userinput"><code>lpadmin -p winprinter -v smb://WINDOWSNETBIOSNAME/printersharename \ -P /path/to/PPD</code></strong> </pre><p> -<a class="indexterm" name="id413216"></a> -<a class="indexterm" name="id413222"></a> -<a class="indexterm" name="id413229"></a> +<a class="indexterm" name="id413205"></a> +<a class="indexterm" name="id413212"></a> +<a class="indexterm" name="id413218"></a> The PPD must be able to direct CUPS to generate the print data for the target model. For PostScript printers, just use the PPD that would be used with the Windows NT PostScript driver. But what can you do if the printer is only accessible with a password? Or if the printer's host is part of another workgroup? This is provided @@ -2949,10 +2949,10 @@ if you want to protect your passwords. Better share the printer in a way that do Printing will only work if you have a working NetBIOS name resolution up and running. Note that this is a feature of CUPS and you do not necessarily need to have smbd running. -</p></div><div class="sect1" title="More CUPS Filtering Chains"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id413289"></a>More CUPS Filtering Chains</h2></div></div></div><p> +</p></div><div class="sect1" title="More CUPS Filtering Chains"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id413279"></a>More CUPS Filtering Chains</h2></div></div></div><p> The 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 cupsomatic</a> show how CUPS handles print jobs. -</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" title="Common Errors"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id413398"></a>Common Errors</h2></div></div></div><div class="sect2" title="Windows 9x/Me Client Can't Install Driver"><div class="titlepage"><div><div><h3 class="title"><a name="id413404"></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 +</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" title="Common Errors"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id413388"></a>Common Errors</h2></div></div></div><div class="sect2" title="Windows 9x/Me Client Can't Install Driver"><div class="titlepage"><div><div><h3 class="title"><a name="id413394"></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 characters (or <span class="quote">“<span class="quote">8 plus 3 chars suffix</span>”</span>) max; otherwise, the driver files will not get transferred when you want to download them from Samba.</p></div><div class="sect2" title="“cupsaddsmb” Keeps Asking for Root Password in Never-ending Loop"><div class="titlepage"><div><div><h3 class="title"><a name="root-ask-loop"></a><span class="quote">“<span class="quote">cupsaddsmb</span>”</span> 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" target="_top">security = user</a>? Have you used <code class="literal">smbpasswd</code> to give root a Samba account? @@ -2963,10 +2963,10 @@ cupsomatic</a> show how CUPS handles print jobs. password).</p><p> If the error is <span class="quote">“<span class="quote">Tree connect failed: NT_STATUS_BAD_NETWORK_NAME</span>”</span>, you may have forgotten to create the <code class="filename">/etc/samba/drivers</code> directory. - </p></div><div class="sect2" title="“cupsaddsmb” or “rpcclient addriver” Emit Error"><div class="titlepage"><div><div><h3 class="title"><a name="id413474"></a><span class="quote">“<span class="quote">cupsaddsmb</span>”</span> or <span class="quote">“<span class="quote">rpcclient addriver</span>”</span> Emit Error</h3></div></div></div><p> + </p></div><div class="sect2" title="“cupsaddsmb” or “rpcclient addriver” Emit Error"><div class="titlepage"><div><div><h3 class="title"><a name="id413464"></a><span class="quote">“<span class="quote">cupsaddsmb</span>”</span> or <span class="quote">“<span class="quote">rpcclient addriver</span>”</span> Emit Error</h3></div></div></div><p> If <code class="literal">cupsaddsmb</code>, or <code class="literal">rpcclient addriver</code> emit the error message WERR_BAD_PASSWORD, refer to <a class="link" href="CUPS-printing.html#root-ask-loop" title="“cupsaddsmb” Keeps Asking for Root Password in Never-ending Loop">the previous common error</a>. - </p></div><div class="sect2" title="“cupsaddsmb” Errors"><div class="titlepage"><div><div><h3 class="title"><a name="id413511"></a><span class="quote">“<span class="quote">cupsaddsmb</span>”</span> Errors</h3></div></div></div><p> + </p></div><div class="sect2" title="“cupsaddsmb” Errors"><div class="titlepage"><div><div><h3 class="title"><a name="id413500"></a><span class="quote">“<span class="quote">cupsaddsmb</span>”</span> Errors</h3></div></div></div><p> The use of <span class="quote">“<span class="quote">cupsaddsmb</span>”</span> gives <span class="quote">“<span class="quote">No PPD file for printer...</span>”</span> message while PPD file is present. What might the problem be? </p><p> @@ -2977,10 +2977,10 @@ cupsomatic</a> show how CUPS handles print jobs. <strong class="userinput"><code>cupsaddsmb -H sambaserver -h cupsserver -v printername</code></strong>. </p><p>Is your <em class="parameter"><code>TempDir</code></em> directive in <code class="filename">cupsd.conf</code> set to a valid value, and is it writable? - </p></div><div class="sect2" title="Client Can't Connect to Samba Printer"><div class="titlepage"><div><div><h3 class="title"><a name="id413581"></a>Client Can't Connect to Samba Printer</h3></div></div></div><p>Use <code class="literal">smbstatus</code> to check which user + </p></div><div class="sect2" title="Client Can't Connect to Samba Printer"><div class="titlepage"><div><div><h3 class="title"><a name="id413571"></a>Client Can't Connect to Samba Printer</h3></div></div></div><p>Use <code class="literal">smbstatus</code> to check which user you are from Samba's point of view. Do you have the privileges to write into the <em class="parameter"><code>[print$]</code></em> - share?</p></div><div class="sect2" title="New Account Reconnection from Windows 200x/XP Troubles"><div class="titlepage"><div><div><h3 class="title"><a name="id413604"></a>New Account Reconnection from Windows 200x/XP Troubles</h3></div></div></div><p> + share?</p></div><div class="sect2" title="New Account Reconnection from Windows 200x/XP Troubles"><div class="titlepage"><div><div><h3 class="title"><a name="id413594"></a>New Account Reconnection from Windows 200x/XP Troubles</h3></div></div></div><p> Once you are connected as the wrong user (for example, as <code class="constant">nobody</code>, which often occurs if you have <a class="link" href="smb.conf.5.html#MAPTOGUEST" target="_top">map to guest = bad user</a>), Windows Explorer will not accept an attempt to connect again as a different user. There will not be any bytes transferred on the wire to Samba, @@ -2995,44 +2995,44 @@ user. The best method is to use a DOS terminal window and <span class="emphasis" connected under a different account. Now open the <span class="guilabel">Printers</span> folder (on the Samba server in the <span class="guilabel">Network Neighborhood</span>), right-click on the printer in question, and select <span class="guibutton">Connect....</span>. -</p></div><div class="sect2" title="Avoid Being Connected to the Samba Server as the Wrong User"><div class="titlepage"><div><div><h3 class="title"><a name="id413684"></a>Avoid Being Connected to the Samba Server as the Wrong User</h3></div></div></div><p> -<a class="indexterm" name="id413692"></a> +</p></div><div class="sect2" title="Avoid Being Connected to the Samba Server as the Wrong User"><div class="titlepage"><div><div><h3 class="title"><a name="id413674"></a>Avoid Being Connected to the Samba Server as the Wrong User</h3></div></div></div><p> +<a class="indexterm" name="id413682"></a> You see per <code class="literal">smbstatus</code> that you are connected as user nobody, but you want to be root or printer admin. This is probably due to <a class="link" href="smb.conf.5.html#MAPTOGUEST" target="_top">map to guest = bad user</a>, which silently connected you under the guest account when you gave (maybe by accident) an incorrect username. Remove <a class="link" href="smb.conf.5.html#MAPTOGUEST" target="_top">map to guest</a> if you want to prevent this. -</p></div><div class="sect2" title="Upgrading to CUPS Drivers from Adobe Drivers"><div class="titlepage"><div><div><h3 class="title"><a name="id413732"></a>Upgrading to CUPS Drivers from Adobe Drivers</h3></div></div></div><p> +</p></div><div class="sect2" title="Upgrading to CUPS Drivers from Adobe Drivers"><div class="titlepage"><div><div><h3 class="title"><a name="id413721"></a>Upgrading to CUPS Drivers from Adobe Drivers</h3></div></div></div><p> This information came from a mailing list posting regarding problems experienced when upgrading from Adobe drivers to CUPS drivers on Microsoft Windows NT/200x/XP clients. </p><p>First delete all old Adobe-using printers. Then delete all old Adobe drivers. (On Windows 200x/XP, right-click in the background of <span class="guilabel">Printers</span> folder, select <span class="guimenuitem">Server Properties...</span>, select -tab <span class="guilabel">Drivers</span>, and delete here).</p></div><div class="sect2" title="Can't Use “cupsaddsmb” on Samba Server, Which Is a PDC"><div class="titlepage"><div><div><h3 class="title"><a name="id413765"></a>Can't Use <span class="quote">“<span class="quote">cupsaddsmb</span>”</span> on Samba Server, Which Is a PDC</h3></div></div></div><p>Do you use the <span class="quote">“<span class="quote">naked</span>”</span> root user name? Try to do it +tab <span class="guilabel">Drivers</span>, and delete here).</p></div><div class="sect2" title="Can't Use “cupsaddsmb” on Samba Server, Which Is a PDC"><div class="titlepage"><div><div><h3 class="title"><a name="id413755"></a>Can't Use <span class="quote">“<span class="quote">cupsaddsmb</span>”</span> on Samba Server, Which Is a PDC</h3></div></div></div><p>Do you use the <span class="quote">“<span class="quote">naked</span>”</span> root user name? Try to do it this way: <strong class="userinput"><code>cupsaddsmb -U <em class="replaceable"><code>DOMAINNAME</code></em>\\root -v <em class="replaceable"><code>printername</code></em></code></strong>> (note the two backslashes: the first one is -required to <span class="quote">“<span class="quote">escape</span>”</span> the second one).</p></div><div class="sect2" title="Deleted Windows 200x Printer Driver Is Still Shown"><div class="titlepage"><div><div><h3 class="title"><a name="id413800"></a>Deleted Windows 200x Printer Driver Is Still Shown</h3></div></div></div><p>Deleting a printer on the client will not delete the +required to <span class="quote">“<span class="quote">escape</span>”</span> the second one).</p></div><div class="sect2" title="Deleted Windows 200x Printer Driver Is Still Shown"><div class="titlepage"><div><div><h3 class="title"><a name="id413790"></a>Deleted Windows 200x Printer Driver Is Still Shown</h3></div></div></div><p>Deleting a printer on the client will not delete the driver too (to verify, right-click on the white background of the <span class="guilabel">Printers</span> folder, select <span class="guimenuitem">Server Properties</span> and click on the <span class="guilabel">Drivers</span> tab). These same old drivers will be re-used when you try to install a printer with the same name. If you want to update to a new driver, delete the old ones first. Deletion is only possible if no -other printer uses the same driver.</p></div><div class="sect2" title="Windows 200x/XP Local Security Policies"><div class="titlepage"><div><div><h3 class="title"><a name="id413831"></a>Windows 200x/XP Local Security Policies</h3></div></div></div><a class="indexterm" name="id413837"></a><a class="indexterm" name="id413844"></a><p>Local security policies may not allow the installation of unsigned drivers <span class="quote">“<span class="quote">local -security policies</span>”</span> may not allow the installation of printer drivers at all.</p></div><div class="sect2" title="Administrator Cannot Install Printers for All Local Users"><div class="titlepage"><div><div><h3 class="title"><a name="id413862"></a>Administrator Cannot Install Printers for All Local Users</h3></div></div></div><p> -<a class="indexterm" name="id413870"></a> -<a class="indexterm" name="id413876"></a> +other printer uses the same driver.</p></div><div class="sect2" title="Windows 200x/XP Local Security Policies"><div class="titlepage"><div><div><h3 class="title"><a name="id413821"></a>Windows 200x/XP Local Security Policies</h3></div></div></div><a class="indexterm" name="id413826"></a><a class="indexterm" name="id413833"></a><p>Local security policies may not allow the installation of unsigned drivers <span class="quote">“<span class="quote">local +security policies</span>”</span> may not allow the installation of printer drivers at all.</p></div><div class="sect2" title="Administrator Cannot Install Printers for All Local Users"><div class="titlepage"><div><div><h3 class="title"><a name="id413852"></a>Administrator Cannot Install Printers for All Local Users</h3></div></div></div><p> +<a class="indexterm" name="id413860"></a> +<a class="indexterm" name="id413866"></a> Windows XP handles SMB printers on a <span class="quote">“<span class="quote">per-user</span>”</span> basis. This means every user needs to install the printer himself or herself. To have a printer available for everybody, you might want to use the built-in IPP client capabilities of Win XP. Add a printer with the print path of <em class="parameter"><code>http://cupsserver:631/printers/printername</code></em>. We're still looking into this one. Maybe a logon script could automatically install printers for all users. -</p></div><div class="sect2" title="Print Change, Notify Functions on NT Clients"><div class="titlepage"><div><div><h3 class="title"><a name="id413898"></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> -service first (renamed to <code class="literal">File & Print Sharing for MS Networks</code> in XP).</p></div><div class="sect2" title="Windows XP SP1"><div class="titlepage"><div><div><h3 class="title"><a name="id413922"></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 +</p></div><div class="sect2" title="Print Change, Notify Functions on NT Clients"><div class="titlepage"><div><div><h3 class="title"><a name="id413888"></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> +service first (renamed to <code class="literal">File & Print Sharing for MS Networks</code> in XP).</p></div><div class="sect2" title="Windows XP SP1"><div class="titlepage"><div><div><h3 class="title"><a name="id413911"></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 <span class="quote">“<span class="quote">Administrator</span>”</span> or <span class="quote">“<span class="quote">Power User</span>”</span> groups of users). In Group Policy Object Editor, go to <span class="guimenu">User Configuration -> Administrative Templates -> Control Panel -> Printers</span>. The policy is automatically set to <code class="constant">Enabled</code> and the <code class="constant">Users can only Point and Print to machines in their Forest</code> . You probably need to change it to <code class="constant">Disabled</code> or <code class="constant">Users can only Point and Print to these servers</code> to make driver downloads from Samba possible. -</p></div><div class="sect2" title="Print Options for All Users Can't Be Set on Windows 200x/XP"><div class="titlepage"><div><div><h3 class="title"><a name="id413964"></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 +</p></div><div class="sect2" title="Print Options for All Users Can't Be Set on Windows 200x/XP"><div class="titlepage"><div><div><h3 class="title"><a name="id413953"></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 different ways to bring you to a dialog that <span class="emphasis"><em>seems</em></span> to set everything. All three dialogs <span class="emphasis"><em>look</em></span> the same, yet only one of them does what you intend. You need to be Administrator or Print Administrator to do this for all users. Here is how I do it on XP: @@ -3065,33 +3065,33 @@ all clients to get the same defaults, you need to conduct these steps <span clas (<a class="link" href="smb.conf.5.html#PRINTERADMIN" target="_top">printer admin</a> in <code class="filename">smb.conf</code>) <span class="emphasis"><em>before</em></span> a client downloads the driver (the clients can later set their own <span class="emphasis"><em>per-user defaults</em></span> by following the procedures <span class="emphasis"><em>A</em></span> or <span class="emphasis"><em>B</em></span>). -</p></div><div class="sect2" title="Most Common Blunders in Driver Settings on Windows Clients"><div class="titlepage"><div><div><h3 class="title"><a name="id414232"></a>Most Common Blunders in Driver Settings on Windows Clients</h3></div></div></div><p> +</p></div><div class="sect2" title="Most Common Blunders in Driver Settings on Windows Clients"><div class="titlepage"><div><div><h3 class="title"><a name="id414222"></a>Most Common Blunders in Driver Settings on Windows Clients</h3></div></div></div><p> Don't use <em class="parameter"><code>Optimize for Speed</code></em>, but use <em class="parameter"><code>Optimize for Portability</code></em> instead (Adobe PS Driver). Don't use <em class="parameter"><code>Page Independence: No</code></em>. Always settle with <em class="parameter"><code>Page Independence: Yes</code></em> (Microsoft PS Driver and CUPS PS Driver for Windows NT/200x/XP). If there are problems with fonts, use <em class="parameter"><code>Download as Softfont into printer</code></em> (Adobe PS Driver). For <span class="guilabel">TrueType Download Options</span> choose <code class="constant">Outline</code>. Use PostScript Level 2 if you are having trouble with a non-PS printer and if there is a choice. -</p></div><div class="sect2" title="cupsaddsmb Does Not Work with Newly Installed Printer"><div class="titlepage"><div><div><h3 class="title"><a name="id414285"></a><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</h3></div></div></div><p> +</p></div><div class="sect2" title="cupsaddsmb Does Not Work with Newly Installed Printer"><div class="titlepage"><div><div><h3 class="title"><a name="id414274"></a><code class="literal">cupsaddsmb</code> Does Not Work with Newly Installed Printer</h3></div></div></div><p> Symptom: The last command of <code class="literal">cupsaddsmb</code> does not complete successfully. If the <code class="literal">cmd = setdriver printername printername</code> result was NT_STATUS_UNSUCCESSFUL, then possibly the printer was not yet recognized by Samba. Did it show up in Network Neighborhood? Did it show up in <code class="literal">rpcclient hostname -c `enumprinters'</code>? Restart smbd (or send a <code class="literal">kill -HUP</code> to all processes listed by <code class="literal">smbstatus</code>, and try again. -</p></div><div class="sect2" title="Permissions on /var/spool/samba/ Get Reset After Each Reboot"><div class="titlepage"><div><div><h3 class="title"><a name="id414331"></a>Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</h3></div></div></div><p> +</p></div><div class="sect2" title="Permissions on /var/spool/samba/ Get Reset After Each Reboot"><div class="titlepage"><div><div><h3 class="title"><a name="id414320"></a>Permissions on <code class="filename">/var/spool/samba/</code> Get Reset After Each Reboot</h3></div></div></div><p> Have you ever by accident set the CUPS spool directory to the same location (<em class="parameter"><code>RequestRoot /var/spool/samba/</code></em> in <code class="filename">cupsd.conf</code> or the other way round: <code class="filename">/var/spool/cups/</code> is set as <a class="link" href="smb.conf.5.html#PATH" target="_top">path</a>> in the <em class="parameter"><code>[printers]</code></em> section)? These <em class="parameter"><code>must</code></em> be different. Set <em class="parameter"><code>RequestRoot /var/spool/cups/</code></em> in <code class="filename">cupsd.conf</code> and <a class="link" href="smb.conf.5.html#PATH" target="_top">path = /var/spool/samba</a> in the <em class="parameter"><code>[printers]</code></em> section of <code class="filename">smb.conf</code>. Otherwise, cupsd will sanitize permissions to its spool directory with each restart and printing will not work reliably. -</p></div><div class="sect2" title="Print Queue Called “lp” Mishandles Print Jobs"><div class="titlepage"><div><div><h3 class="title"><a name="id414424"></a>Print Queue Called <span class="quote">“<span class="quote">lp</span>”</span> Mishandles Print Jobs</h3></div></div></div><p> +</p></div><div class="sect2" title="Print Queue Called “lp” Mishandles Print Jobs"><div class="titlepage"><div><div><h3 class="title"><a name="id414413"></a>Print Queue Called <span class="quote">“<span class="quote">lp</span>”</span> Mishandles Print Jobs</h3></div></div></div><p> In this case a print queue called <span class="quote">“<span class="quote">lp</span>”</span> intermittently swallows jobs and spits out completely different ones from what was sent. </p><p> -<a class="indexterm" name="id414443"></a> -<a class="indexterm" name="id414449"></a> -<a class="indexterm" name="id414456"></a> +<a class="indexterm" name="id414432"></a> +<a class="indexterm" name="id414439"></a> +<a class="indexterm" name="id414446"></a> It is a bad idea to name any printer <span class="quote">“<span class="quote">lp</span>”</span>. This is the traditional UNIX name for the default printer. CUPS may be set up to do an automatic creation of Implicit Classes. This means, to group all printers with the same name to a pool of devices and load-balance the jobs across them in a round-robin fashion. @@ -3100,13 +3100,13 @@ jobs and send your own to his or her device unwittingly. To have tight control o <em class="parameter"><code>BrowseShortNames No</code></em>. It will present any printer as <em class="replaceable"><code>printername@cupshost</code></em>, which gives you better control over what may happen in a large networked environment. -</p></div><div class="sect2" title="Location of Adobe PostScript Driver Files for “cupsaddsmb”"><div class="titlepage"><div><div><h3 class="title"><a name="id414487"></a>Location of Adobe PostScript Driver Files for <span class="quote">“<span class="quote">cupsaddsmb</span>”</span></h3></div></div></div><p> +</p></div><div class="sect2" title="Location of Adobe PostScript Driver Files for “cupsaddsmb”"><div class="titlepage"><div><div><h3 class="title"><a name="id414476"></a>Location of Adobe PostScript Driver Files for <span class="quote">“<span class="quote">cupsaddsmb</span>”</span></h3></div></div></div><p> Use <code class="literal">smbclient</code> to connect to any Windows box with a shared PostScript printer: <code class="literal">smbclient //windowsbox/print\$ -U guest</code>. You can navigate to the <code class="filename">W32X86/2</code> subdir to <code class="literal">mget ADOBE*</code> and other files or to <code class="filename">WIN40/0</code> to do the same. Another option is to download the <code class="filename">*.exe</code> packaged files from the Adobe Web site. -</p></div></div><div class="sect1" title="Overview of the CUPS Printing Processes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id414538"></a>Overview of the CUPS Printing Processes</h2></div></div></div><p> +</p></div></div><div class="sect1" title="Overview of the CUPS Printing Processes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id414527"></a>Overview of the CUPS Printing Processes</h2></div></div></div><p> A 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 Printing Overview diagram</a>. -</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.id404779" href="#id404779" 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> +</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.id404773" href="#id404773" 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> |