1<html> 2<body bgcolor="#ffffff"> 3 4<img src="samba2_xs.gif" border="0" alt=" " height="100" width="76" 5hspace="10" align="left" /> 6 7<h1 class="head0">Chapter 10. Printing</h1> 8 9 10 11<p><a name="INDEX-1"/>This 12chapter tackles the topic of setting up printers for use with Samba. 13Aside from the "coolness factor" of 14seeing documents from Windows word processing and graphics 15applications appearing in the output tray of the Unix printer, this 16facility can greatly increase the usefulness of your Samba server. In 17many organizations, using a Unix system as the print server has led 18to happier system administrators and users alike, due to the reduced 19frequency of problems.</p> 20 21<p>Samba allows client machines to share printers connected to the Samba 22host system, and Samba can also send Unix documents to printers 23shared by Windows systems. In this chapter, we discuss how to get 24printers configured to work in either direction.</p> 25 26<p>We focus in this chapter on getting Samba to serve up printers that 27are already functioning on the Unix host. We include just a few 28basics about setting up printers on Unix. Good references for this 29topic include <em class="citetitle">Network Printing</em>, 30<em class="citetitle">Essential System Administration</em>, and 31<em class="citetitle">Running Linux</em>, all by 32O'Reilly and Associates.</p> 33 34 35 36<div class="sect1"><a name="samba2-CHP-10-SECT-1"/> 37 38<h2 class="head1">Sending Print Jobs to Samba</h2> 39 40<p><a name="INDEX-2"/>A 41printer shared by the Samba server shows up in the list of shares 42offered in the Network Neighborhood. If the printer is registered on 43the client machine and the client has the correct printer driver 44installed, the client can effortlessly send print jobs to a printer 45attached to a Samba server. <a href="ch10.html#samba2-CHP-10-FIG-1">Figure 10-1</a> shows a 46Samba printer as it appears in the Network Neighborhood of a Windows 47client.</p> 48 49<div class="figure"><a name="samba2-CHP-10-FIG-1"/><img src="figs/sam2_1001.gif"/></div><h4 class="head4">Figure 10-1. A Samba printer in the Network Neighborhood</h4> 50 51<p>To administer printers with Samba, you should understand the basic 52process by which 53<a name="INDEX-3"/>printing 54takes place on a network. On the client system, the application 55software prints by utilizing the system's printer 56driver for the printer that will be creating the actual output. It is 57the printer driver software running on the client system that 58translates the application's high-level calls into a 59stream of binary data specific to the model of printer in use. In the 60case of a serial, parallel, or USB printer, the data is stored in a 61temporary file in the local system's printer queue 62and then sent through the respective port directly to the printer. 63For a network printer, the file is sent over the network.</p> 64 65<a name="samba2-CHP-10-NOTE-150"/><blockquote class="note"><h4 class="objtitle">TIP</h4> 66<p>Because the data has already been processed through a printer driver 67by the time it reaches the Samba host, make sure the printer on the 68Unix system is configured without any printer driver and that it will 69print whatever data it receives in raw form. If you already have the 70printer configured for use by Unix applications, you might need to 71set up another queue for it to print documents received from Windows 72clients correctly.</p> 73</blockquote> 74 75<p>Sending a <a name="INDEX-4"/>print job to a printer on a 76<a name="INDEX-5"/>Samba server involves four steps:</p> 77 78<ol><li> 79<p>Opening and authenticating a connection to the printer share</p> 80</li><li> 81<p>Copying the file over the network</p> 82</li><li> 83<p>Closing the connection</p> 84</li><li> 85<p>Printing and deleting the copy of the file</p> 86</li></ol> 87<p>When a print job arrives at a Samba server, the print data is 88temporarily written to disk in the directory specified by the 89<tt class="literal">path</tt> option of the printer share. Samba then 90executes a Unix print command to send that datafile to the printer. 91The job is then printed as the authenticated user of the share. Note 92that this can be the guest user, depending on how the share is 93configured.</p> 94 95 96<div class="sect2"><a name="samba2-CHP-10-SECT-1.1"/> 97 98<h3 class="head2">Print Commands</h3> 99 100<p><a name="INDEX-6"/>To print the 101document, you'll need to inform Samba of the command 102used to print and delete a file. On Linux, which uses a BSD-style 103printing system, a command that does this is:</p> 104 105<blockquote><pre class="code">lpr -r -P<em class="replaceable">printer</em> <em class="replaceable">file</em></pre></blockquote> 106 107<p>This command tells <a name="INDEX-7"/><em class="emphasis">lpr</em> to retrieve the 108name of the printer in the system configuration file 109(<em class="filename">/etc/printcap</em>) and interpret the rules it finds 110there to decide how to process the data and which physical device to 111send it to. Note that because the <em class="emphasis">-r</em> option has 112been specified, the file will be deleted after it has been printed. 113Of course, the file removed is just a copy stored on the Samba 114server; the original document on the client is unaffected.</p> 115 116<p>The process is similar on System V Unix. Here, printing and deleting 117become a compound command:</p> 118 119<blockquote><pre class="code">lp -d<em class="replaceable">printer</em> -s <em class="replaceable">file</em>; rm <em class="replaceable">file</em></pre></blockquote> 120 121<p>In this case, the <em class="filename">/etc/printcap</em> file is replaced 122with a different set of configuration files residing in 123<em class="filename">/usr/spool/lp</em>. Because the 124<em class="emphasis">lp</em> command has no option to delete the file 125after it is printed, we have added the <em class="emphasis">rm</em> 126command.</p> 127 128 129</div> 130 131 132<div class="sect2"><a name="samba2-CHP-10-SECT-1.2"/> 133 134<h3 class="head2">A Minimal Printing Setup</h3> 135 136<p>Let's start with a simple yet illustrative 137<a name="INDEX-8"/>printing 138share. Assuming that you're on a Linux system and 139you have a printer called <tt class="literal">netprinter</tt> listed in the 140printer capabilities file, the following addition to your 141<em class="filename">smb.conf</em> file makes the printer accessible 142through the network:</p> 143 144<blockquote><pre class="code">[printer1] 145 printable = yes 146 print command = /usr/bin/lpr -P%p -r %s 147 printer = netprinter 148 printing = BSD 149 path = /var/tmp</pre></blockquote> 150 151<p>The variable <tt class="literal">%s</tt> in the 152<tt class="literal">print</tt><a name="INDEX-9"/> <tt class="literal">command</tt> 153option is replaced with the name of the file to be printed when Samba 154executes the command. There are four Samba configuration-file 155variables specifically for use with 156<a name="INDEX-10"/>printing 157options. They are shown in <a href="ch10.html#samba2-CHP-10-TABLE-1">Table 10-1</a>.</p> 158 159<a name="samba2-CHP-10-TABLE-1"/><h4 class="head4">Table 10-1. Printing variables</h4><table border="1"> 160 161 162 163<tr> 164<th> 165<p>Variable</p> 166</th> 167<th> 168<p>Definition</p> 169</th> 170</tr> 171 172 173<tr> 174<td> 175<p><tt class="literal">%s</tt></p> 176</td> 177<td> 178<p>The full pathname of the file on the Samba server to be printed</p> 179</td> 180</tr> 181<tr> 182<td> 183<p><tt class="literal">%f</tt></p> 184</td> 185<td> 186<p>The name of the file itself (without the preceding path) on the Samba 187server to be printed</p> 188</td> 189</tr> 190<tr> 191<td> 192<p><tt class="literal">%p</tt></p> 193</td> 194<td> 195<p>The name of the Unix printer to use</p> 196</td> 197</tr> 198<tr> 199<td> 200<p><tt class="literal">%j</tt></p> 201</td> 202<td> 203<p>The number of the print job (for use with <tt class="literal">lprm</tt>, 204<tt class="literal">lppause</tt>, and <tt class="literal">lpresume</tt>)</p> 205</td> 206</tr> 207 208</table> 209 210<p>For other flavors of Unix, it is necessary to modify both the 211<tt class="literal">printing</tt> and <tt class="literal">print</tt> 212<tt class="literal">command</tt> options. For System V Unix, we would 213specify:</p> 214 215<blockquote><pre class="code">[printer1] 216 printing = SYSV 217 print command = lp -d%p -s %s; rm %s</pre></blockquote> 218 219<p>With the <tt class="literal">printing</tt> <tt class="literal">=</tt> 220<tt class="literal">SYSV</tt> parameter, we notify Samba that the local 221printing system uses the System V Unix method. As mentioned earlier, 222the <tt class="literal">%p</tt> variable resolves to the name of the 223printer, while the <tt class="literal">%s</tt> variable resolves to the 224name of the file.</p> 225 226<p>Clients might need to request the status of a print job sent to the 227Samba server. Because Samba sends print jobs to the Unix printing 228system for spooling, there might be a number of jobs in the queue at 229any given time. Consequently, Samba needs to communicate to the 230client not only the status of the current printing job, but also 231which documents are waiting to be printed on that printer. Samba also 232has to provide the client the ability to pause print jobs, resume 233print jobs, and remove print jobs from the printing queue. Samba 234provides options for each of these tasks. As you might expect, they 235borrow functionality from the following existing Unix commands:</p> 236 237<ul><li> 238<p><tt class="literal">lpq</tt><a name="INDEX-11"/></p> 239</li><li> 240<p><tt class="literal">lprm</tt><a name="INDEX-12"/></p> 241</li><li> 242<p><tt class="literal">lppause</tt><a name="INDEX-13"/></p> 243</li><li> 244<p><tt class="literal">lpresume</tt><a name="INDEX-14"/></p> 245</li></ul> 246<p>We cover these options in more detail later in this chapter. For the 247most part, Samba provides reasonable default values for them based on 248the value of the <tt class="literal">printing</tt> configuration option, so 249you can probably get by without having to formulate your own commands 250for them.</p> 251 252<p>Here are a few important items to remember about 253<a name="INDEX-15"/>printing shares:</p> 254 255<ul><li> 256<p>You must put 257<tt class="literal">printable</tt><a name="INDEX-16"/> <tt class="literal">=</tt> 258<tt class="literal">yes</tt> in all printer shares (even 259<tt class="literal">[printers]</tt>) so that Samba knows they are printer 260shares. If you forget, the shares will be unusable for printing and 261will instead be treated as disk shares.</p> 262</li><li> 263<p>If you set the <tt class="literal">path</tt> configuration option in the 264printer section, any files sent to the printer(s) will be copied to 265the directory you specify instead of to the default location of 266<em class="filename">/tmp</em>. Because the amount of disk space allocated 267to <em class="filename">/tmp</em> can be relatively small in some Unix 268operating systems, many administrators prefer to use 269<em class="filename">/var/tmp, /var/spool/tmp</em>, or some other 270directory instead.</p> 271</li><li> 272<p>If you set <tt class="literal">guest</tt> <tt class="literal">ok</tt> 273<tt class="literal">=</tt> <tt class="literal">yes</tt> in a printer share and 274Samba is configured for share-level security, anyone can send data to 275the printer as the <tt class="literal">guest</tt> 276<tt class="literal">account</tt> user.</p> 277</li></ul> 278<p>Using one or more Samba machines as a print server gives you a great 279deal of flexibility on your LAN. You can easily partition your 280available printers, restricting some to members of one department, or 281you can maintain a bank of printers available to all. In addition, 282you can restrict a printer to a select few by adding the 283<tt class="literal">valid</tt> <tt class="literal">users</tt> option to its share 284definition:</p> 285 286<blockquote><pre class="code">[deskjet] 287 printable = yes 288 path = /var/spool/samba/print 289 valid users = elizabeth cozy jack heather alexander lina emerald</pre></blockquote> 290 291<p>All the other share accessibility options work for printing shares as 292well.</p> 293 294 295</div> 296 297 298<div class="sect2"><a name="samba2-CHP-10-SECT-1.3"/> 299 300<h3 class="head2">The [printers] Share</h3> 301 302<p>If a share named 303<tt class="literal">[printers]</tt><a name="INDEX-17"/> is in the configuration file, 304Samba will automatically read in your printer capabilities file and 305create a printing share for each printer that appears in the file. 306For example, if the Samba server had <tt class="literal">lp</tt>, 307<tt class="literal">pcl</tt>, and <tt class="literal">ps</tt> printers in its 308printer capabilities file, Samba would provide three printer shares 309with those names, each configured with the options in the 310<tt class="literal">[printers]</tt> share.</p> 311 312<p>Recall that Samba obeys the following rules when a client requests a 313share that has not been created with an explicit share definition in 314the <em class="filename">smb.conf</em> file:</p> 315 316<ul><li> 317<p>If the share name matches a username in the system password file and 318a <tt class="literal">[homes]</tt> share exists, a new share is created 319with the name of the user and is initialized using the values given 320in the <tt class="literal">[homes]</tt> and <tt class="literal">[global]</tt> 321sections.</p> 322</li><li> 323<p>Otherwise, if the name matches a printer in the system printer 324capabilities file and a <tt class="literal">[printers]</tt> share exists, a 325new share is created with the name of the printer and initialized 326using the values given in the <tt class="literal">[printers]</tt> section. 327(Variables in the <tt class="literal">[global]</tt> section do not apply 328here.)</p> 329</li><li> 330<p>If neither of those succeeds, Samba looks for a 331<tt class="literal">default</tt> <tt class="literal">service</tt> share. If none 332is found, it returns an error.</p> 333</li></ul> 334<p>This brings to light an important point: be careful that you do not 335give a printer the same name as a user. Otherwise, users end up 336connecting to a disk share when they might have wanted a printer 337share instead.</p> 338 339<p>Here is an example 340<tt class="literal">[printers]</tt><a name="INDEX-18"/> share for a Linux system. Some of 341these options are already defaults; however, we have listed them 342anyway for illustrative purposes:</p> 343 344<blockquote><pre class="code">[printers] 345 printable = yes 346 printing = BSD 347 printcap name = /etc/printcap 348 print command = /usr/bin/lpr -P%p -r %s 349 path = /var/spool/lpd/tmp 350 min print space = 2000</pre></blockquote> 351 352<p>Here, we've given Samba global options that specify 353the printing type (BSD), a print command to send data to the printer 354and later remove the temporary file, the location of our printer 355capabilities file, and a minimum disk space for printing of 2MB.</p> 356 357<p>In addition, we've created a 358<tt class="literal">[printers]</tt> share for each system printer. Our 359temporary spooling directory is specified by the 360<tt class="literal">path</tt> option: 361<em class="filename">/var/spool/lpd/tmp</em>. Each share is marked as 362printable—this is a necessary option, even in the 363<tt class="literal">[printers]</tt> section.</p> 364 365 366</div> 367 368 369<div class="sect2"><a name="samba2-CHP-10-SECT-1.4"/> 370 371<h3 class="head2">Testing the Configuration</h3> 372 373<p><a name="INDEX-19"/>After running 374<em class="emphasis">testparm</em> and restarting the Samba daemons, you 375can check to make sure everything is set up correctly by using 376<em class="emphasis">smbclient</em><a name="INDEX-20"/><a name="INDEX-21"/> to send a file to the printer. 377Connect to the printer using the command:</p> 378 379<blockquote><pre class="code"># <tt class="userinput"><b>smbclient /</b></tt><em class="replaceable">server</em><tt class="userinput"><b>/</b></tt><em class="replaceable">printshare</em></pre></blockquote> 380 381<p>and then use the <em class="emphasis">print</em> command to print a file:</p> 382 383<blockquote><pre class="code">smb: /> <tt class="userinput"><b>print </b></tt><em class="replaceable">textfile</em></pre></blockquote> 384 385<a name="samba2-CHP-10-NOTE-151"/><blockquote class="note"><h4 class="objtitle">TIP</h4> 386<p>If you connect to a print share served by a Windows 95/98/Me system 387configured to use user-mode security and cannot authenticate using 388what you know to be a correct username and password, try 389reconfiguring the Windows system to use share-mode security.</p> 390</blockquote> 391 392<p>When you print something through the Samba server via 393<em class="emphasis">smbclient</em>, the following actions should occur:</p> 394 395<ul><li> 396<p>The job appears (briefly) in the Samba spool directory specified by 397the path.</p> 398</li><li> 399<p>The job shows up in your print system's spool 400directory.</p> 401</li><li> 402<p>The job disappears from the spool directory that Samba used.</p> 403</li></ul> 404<p>If <em class="emphasis">smbclient</em> cannot print, you can reset the 405<tt class="literal">print</tt> <tt class="literal">command</tt> option to collect 406debugging information:</p> 407 408<blockquote><pre class="code">print command = echo "printed %s on %p" >>/tmp/printlog</pre></blockquote> 409 410<p>A <a name="INDEX-22"/>common 411problem with Samba printer configuration is forgetting to use the 412full pathnames for commands. Another frequent problem is not having 413the correct permissions on the spooling directory.<a name="FNPTR-1"/><a href="#FOOTNOTE-1">[1]</a> As usual, 414check your Samba log files and system log files for error messages. 415If you use BSD printing, you can change the <tt class="literal">lp</tt> 416keyword in the printer's printcap entry to something 417other than <em class="filename">/dev/null</em>, allowing you to collect 418error messages from the printing system.</p> 419 420<a name="samba2-CHP-10-NOTE-152"/><blockquote class="note"><h4 class="objtitle">TIP</h4> 421<p>More information on 422<a name="INDEX-23"/>debugging printers is in the file 423<em class="filename">docs/textdocs/Printing.txt</em> in the Samba source 424distribution. The Unix print systems are covered in detail in 425<a name="INDEX-24"/>Æleen 426Frisch's <em class="emphasis">Essential Systems 427Administration</em> (published by O'Reilly).</p> 428</blockquote> 429 430 431</div> 432 433 434<div class="sect2"><a name="samba2-CHP-10-SECT-1.5"/> 435 436<h3 class="head2">Enabling SMB Printer Sharing in Mac OS X</h3> 437 438<p>With Samba preinstalled with 439<a name="INDEX-25"/><a name="INDEX-26"/>Mac OS X, sharing access to a printer 440among Windows clients is easy. First, of course, you should set up 441local access using the Print Center application (located in 442<em class="filename">/Applications/Utilities</em>). Under the Printers 443menu, select Add Printer..., and make the appropriate selection from 444the pop-up menu. For example, if the printer is directly attached, 445select USB; if the printer is powered on, it should appear in the 446list. Choose the printer, and press the Add button.</p> 447 448<p>Edit <em class="filename">/etc/smb.conf</em>, uncommenting the 449<tt class="literal">[printers]</tt> share and making any additional 450configuration changes you feel are necessary. Finally, enable the 451Samba startup item as described in <a href="ch02.html">Chapter 2</a>, 452either by checking Windows File Sharing in Sharing Preferences or by 453manually editing <em class="filename">/etc/hostconfig</em>. Now your 454printer can be used by remote Windows clients.</p> 455 456<p>On Mac OS X and some other BSD-based systems, you can test your 457configuration using 458<em class="emphasis">smbutil</em><a name="INDEX-27"/>. The following will send the 459file named <em class="filename">print_test_file</em> to the printer named 460<em class="filename">printshare</em> on the server 461<em class="emphasis">bsdserver</em> :</p> 462 463<blockquote><pre class="code">% <tt class="userinput"><b>smbutil print //bsdserver/printshare print_test_file</b></tt></pre></blockquote> 464 465<p>See <a href="ch05.html">Chapter 5</a> for more information on using 466<em class="emphasis">smbutil</em>.</p> 467 468 469</div> 470 471 472<div class="sect2"><a name="samba2-CHP-10-SECT-1.6"/> 473 474<h3 class="head2">Setting Up and Testing a Windows Client</h3> 475 476<p><a name="INDEX-28"/>Now that Samba is 477offering a workable printer, you can set up your access to it on a 478Windows client. Browse through the Samba server in the Network 479Neighborhood. It should now show each printer that is available. For 480example, in <a href="ch10.html#samba2-CHP-10-FIG-1">Figure 10-1</a>, we saw a printer called 481<tt class="literal">lp</tt>.</p> 482 483<p>Next, you need to have the Windows client recognize the printer. 484Double-click the printer icon to get started. If you try to select an 485uninstalled printer (as you just did), Windows will ask you if it 486should help configure it for the Windows system. Click the Yes or OK 487button, and the Printer Wizard will open.</p> 488 489<p>If you are installing a printer on Windows 95/98/Me, the first thing 490the wizard will ask is whether you need to print from DOS. 491Let's assume you don't, so choose 492the "No" radio button and press the 493Next > button to get to the manufacturer/model window, as shown in 494<a href="ch10.html#samba2-CHP-10-FIG-2">Figure 10-2</a>.</p> 495 496<div class="figure"><a name="samba2-CHP-10-FIG-2"/><img src="figs/sam2_1002.gif"/></div><h4 class="head4">Figure 10-2. Setting the manufacturer and model of the printer</h4> 497 498<p>In this dialog box, you should see a large list of manufacturers and 499models for a huge number of printers. Select the manufacturer of your 500printer in the left side of the dialog box, and then the exact model 501of the printer in the list on the right side.</p> 502 503<p>In some cases, you might not find your printer in the list, or the 504version of the printer driver included with Windows might be out of 505date. In cases such as these, consult the printer 506manufacturer's documentation on how to install the 507driver. Typically, you will click the Have Disk... button to install 508the driver from a CD-ROM or disk file.</p> 509 510<p>If you don't see your printer on the list, but you 511know it's a PostScript printer, select Apple as the 512manufacturer and Apple LaserWriter as the model. This will give you 513the most basic PostScript printer setup—and arguably one of the 514most reliable. If you already have PostScript printers attached, you 515will be asked about replacing or reusing the existing driver. Be 516aware that if you replace it with a new one, you might make your 517other printers fail. Therefore, we recommend you keep using your 518existing printer drivers as long as they're working 519properly.</p> 520 521<p>Click the Next > or OK button. On Windows 95/98/Me, the Printer 522Wizard asks you to name the printer. On Windows NT/2000/XP, you need 523to right-click the printer's icon and select 524Properties to assign the printer a name. <a href="ch10.html#samba2-CHP-10-FIG-3">Figure 10-3</a> 525shows how we've named our printer to show that 526it's shared by the <tt class="literal">mixtec</tt> Samba 527server.</p> 528 529<div class="figure"><a name="samba2-CHP-10-FIG-3"/><img src="figs/sam2_1003.gif"/></div><h4 class="head4">Figure 10-3. Setting the printer name</h4> 530 531<p>Finally, on Windows 95/98/Me the Printing Wizard asks if it should 532print a test page. Click the "Yes" 533radio button, then the Finish button, and you should be presented 534with the dialog box shown in <a href="ch10.html#samba2-CHP-10-FIG-4">Figure 10-4</a>. On Windows 535NT/2000/XP, the printer test function is also accessed through the 536printer's Properties dialog box.</p> 537 538<div class="figure"><a name="samba2-CHP-10-FIG-4"/><img src="figs/sam2_1004.gif"/></div><h4 class="head4">Figure 10-4. Sending a test page to the printer</h4> 539 540<p>If the test printing was unsuccessful, click the No button and the 541Printing Wizard will walk you through some debugging steps for the 542client side of the process. If the test printing does work, the 543remote printer will now be available to all Windows applications 544through the File and Print menu items.</p> 545 546 547</div> 548 549 550</div> 551 552 553 554<div class="sect1"><a name="samba2-CHP-10-SECT-2"/> 555 556<h2 class="head1">Printing to Windows Printers</h2> 557 558<p><a name="INDEX-29"/>If you have printers 559connected to systems running Windows 95/98/Me or Windows NT/2000/XP, 560the printers can also be accessed from your Unix system using tools 561that are part of the Samba distribution. First, it is necessary to 562create a printer share on the Windows system. Then set up the printer 563on the Unix side by configuring a new printer and using a Samba 564printing program as the printer's filter.</p> 565 566 567<div class="sect2"><a name="samba2-CHP-10-SECT-2.1"/> 568 569<h3 class="head2">Sharing Windows Printers</h3> 570 571<p>Sharing printers on Windows is not unlike sharing files. In fact, it 572is a little simpler. Open the Control Panel, then double-click the 573Printers icon to open the Printers window. Right-click the icon for 574the printer you want to share, and select Sharing.... This opens the 575dialog box shown in <a href="ch10.html#samba2-CHP-10-FIG-5">Figure 10-5</a> for a Windows 98 576system, or <a href="ch10.html#samba2-CHP-10-FIG-6">Figure 10-6</a> on a Windows 2000 system. 577(The dialog box appears slightly different on other Windows versions, 578but functions almost identically.)</p> 579 580<a name="samba2-CHP-10-NOTE-153"/><blockquote class="note"><h4 class="objtitle">TIP</h4> 581<p>On Windows 95/98/Me systems, you may need to run file sharing in 582share-level (rather than user-level) access control mode to access a 583shared printer from Samba. To check or set this mode, go to Control 584Panel, then double-click on Network, then click on the Access Control 585tab. More detailed information on this can be found in <a href="ch05.html">Chapter 5</a>.</p> 586</blockquote> 587 588<div class="figure"><a name="samba2-CHP-10-FIG-5"/><img src="figs/sam2_1005.gif"/></div><h4 class="head4">Figure 10-5. Sharing printers on Windows 98</h4> 589 590<div class="figure"><a name="samba2-CHP-10-FIG-6"/><img src="figs/sam2_1006.gif"/></div><h4 class="head4">Figure 10-6. Sharing printers on Windows 2000</h4> 591 592<p>Click the "Shared as" radio button, 593then click the OK button. The printer is now accessible by other 594systems on the network.</p> 595 596 597</div> 598 599 600<div class="sect2"><a name="samba2-CHP-10-SECT-2.2"/> 601 602<h3 class="head2">Adding a Unix Printer</h3> 603 604<p><a name="INDEX-30"/>The Samba distribution comes with 605three programs that assist with printing on shared printers. The 606<em class="emphasis">smbprint</em><a name="INDEX-31"/> program works with systems that use the 607BSD printing system, 608<em class="emphasis">smbprint.sysv</em><a name="INDEX-32"/> 609works with systems that use System V printing, and 610<em class="emphasis">smbspool</em><a name="INDEX-33"/> 611works with systems that use the Common Unix Printing System (CUPS). 612In the following sections we show you how to install printers for 613each system.</p> 614 615 616<div class="sect3"><a name="samba2-CHP-10-SECT-2.2.1"/> 617 618<h3 class="head3">BSD printers</h3> 619 620<p><a name="INDEX-34"/><a name="INDEX-35"/>The 621BSD printing system is used by many Unix variants, including Red Hat 622Linux. With BSD printing, all the printers on the system have an 623entry in the <em class="filename">/etc/printcap</em> file, which is the 624database of printer capabilities used by the <em class="emphasis">lpd</em> 625line printer daemon and other programs that assist with printing. The 626Red Hat Linux implementation is a bit different in that 627<em class="filename">/etc/printcap</em> is a machine-generated file, which 628is re-created every time the <em class="emphasis">lpd</em> daemon is 629restarted by the <em class="emphasis">/etc/rc.d/init.d/lpd</em> script. 630Instead of editing <em class="filename">/etc/printcap</em>, we will add an 631entry for our printer in <em class="filename">/etc/printcap.local</em>, 632which the system automatically includes verbatim when creating 633<em class="filename">/etc/printcap</em>.</p> 634 635<a name="samba2-CHP-10-NOTE-154"/><blockquote class="note"><h4 class="objtitle">TIP</h4> 636<p>If you are using the version of Samba installed from an RPM file as 637on Red Hat Linux, you might be able to skip these directions and use 638the <em class="emphasis">printconf</em> tool, which has support for SMB 639printers. Unfortunately, this tool might not work correctly if you 640have installed Samba from the Samba source distribution.</p> 641</blockquote> 642 643<p>Here is the entry we added to our 644<em class="filename">/etc/printcap.local</em><a name="INDEX-36"/><a name="INDEX-37"/> file to support our Hewlett-Packard 645DeskJet 932C printer, which is shared by <tt class="literal">maya</tt>, a 646Windows 98 system:</p> 647 648<blockquote><pre class="code">lp|maya-hp932c:\ 649 :cm=HP 932C on maya:\ 650 :sd=/var/spool/lpd/maya:\ 651 :af=/var/spool/lpd/maya/acct:\ 652 :if=/usr/local/samba/bin/smbprint:\ 653 :mx=0:\ 654 :lp=/dev/null:</pre></blockquote> 655 656<p>The first line creates names for the printer. We are calling it both 657<tt class="literal">maya-hp932c</tt>, to describe its location on the 658network and the type of printer, and <tt class="literal">lp</tt> so that 659programs will use it as the default printer. The rest of the lines 660specify keywords and values. The <tt class="literal">cm</tt> keyword allows 661us to assign a comment string to the printer. The 662<tt class="literal">sd</tt> and <tt class="literal">af</tt> keywords assign the 663printer's spool directory and accounting files, 664respectively. The <tt class="literal">if</tt> keyword assigns the print 665filter. We are using the <em class="emphasis">smbprint</em> command to 666send the output to the shared SMB printer. The <tt class="literal">mx</tt> 667keyword is set to zero to allow any size file to be printed, and 668<tt class="literal">lp</tt> is set to <em class="filename">/dev/null</em> to 669discard error messages.</p> 670 671<p>You can follow our model to create an entry for your own printer. If 672you want to go beyond the capabilities we used, refer to your 673system's <em class="emphasis">printcap(5)</em> manual 674page for a complete listing of keywords.</p> 675 676<p>Go to your Samba source distribution's root 677directory, and install the <em class="emphasis">smbprint</em> program like 678this:</p> 679 680<blockquote><pre class="code"># <tt class="userinput"><b>cp examples/printing/smbprint /usr/local/samba/bin</b></tt></pre></blockquote> 681 682<p>We next create the printer's spool directory:</p> 683 684<blockquote><pre class="code"># <tt class="userinput"><b>cd /var/spool/lpd</b></tt> 685# <tt class="userinput"><b>mkdir maya</b></tt> 686# <tt class="userinput"><b>chown lp:lp maya</b></tt> 687# <tt class="userinput"><b>chmod 700 maya</b></tt></pre></blockquote> 688 689<p>The <em class="emphasis">smbprint</em> program looks for a file named 690<em class="filename">.config</em> in the printer's spool 691directory, which contains information on how to connect to the 692printer share. We create this file and then fill in the required 693information:</p> 694 695<blockquote><pre class="code"># <tt class="userinput"><b>cd maya</b></tt> 696# <tt class="userinput"><b>>.config</b></tt> 697# <tt class="userinput"><b>chown lp:lp .config</b></tt> 698# <tt class="userinput"><b>chmod 600 .config</b></tt></pre></blockquote> 699 700<p>Use your preferred text editor to edit the 701<em class="filename">.config</em> file, and enter three lines, like this:</p> 702 703<blockquote><pre class="code">server=maya 704service=hp 705password=""</pre></blockquote> 706 707<p>This is for our shared printer having a UNC of 708<em class="filename">\\maya\hp</em>. When we created the printer share, we 709did not give it a password, so we use a null password here. If your 710printer share is on a Windows NT/2000/XP system, use your domain 711password.</p> 712 713<p>Finally, restart the printer daemon:</p> 714 715<blockquote><pre class="code"># <tt class="userinput"><b>/etc/rc.d/init.d/lpd restart</b></tt></pre></blockquote> 716 717<p>You can now try printing something. Run the following command:</p> 718 719<blockquote><pre class="code">$ <tt class="userinput"><b>lpr textfile</b></tt></pre></blockquote> 720 721<p>If you have everything set up correctly, the file prints on the 722shared printer. If you get "stair 723stepping" of text, caused by the printer not 724returning to the left margin at the beginning of every line, modify 725the <tt class="literal">if</tt> keyword in your printcap entry to run 726<em class="emphasis">smbprint</em> with the <em class="emphasis">-t</em> 727option. <a name="INDEX-38"/><a name="INDEX-39"/></p> 728 729 730</div> 731 732 733 734<div class="sect3"><a name="samba2-CHP-10-SECT-2.2.2"/> 735 736<h3 class="head3">System V printers</h3> 737 738<p><a name="INDEX-40"/><a name="INDEX-41"/>Sending print jobs from a System V Unix 739system is a little easier than with the BSD system. Here, you need to 740edit the <em class="filename">smbprint.sysv</em> script in the 741<em class="filename">examples/printing</em> directory of the Samba 742distribution and do the following:</p> 743 744<ol><li> 745<p>Change the <tt class="literal">server</tt>, <tt class="literal">service</tt>, and 746<tt class="literal">password</tt> parameters in the script to match the 747NetBIOS computer name, its shared printer service, and its password, 748respectively. For example, the following entries would be correct for 749the service in the previous example:</p> 750 751<blockquote><pre class="code">server = maya 752service = hp 753password = ""</pre></blockquote> 754</li> 755<li> 756<p>Run the following commands, which create a reference for the new 757printer (which we are naming <tt class="literal">hp_printer</tt>) in the 758printer capabilities file:</p> 759 760<blockquote><pre class="code"># <tt class="userinput"><b>lpadmin -p hp_printer -v /dev/null -i./smbprint.sysv</b></tt> 761# <tt class="userinput"><b>enable hp_printer</b></tt> 762# <tt class="userinput"><b>accept hp_printer</b></tt></pre></blockquote> 763</li></ol> 764<p>After you've done that, restart the Samba daemons 765and try printing to <tt class="literal">hp_printer</tt> using any standard 766Unix program.</p> 767 768 769</div> 770 771 772 773<div class="sect3"><a name="samba2-CHP-10-SECT-2.2.3"/> 774 775<h3 class="head3">CUPS printers</h3> 776 777<p><a name="INDEX-42"/><a name="INDEX-43"/><a name="INDEX-44"/>CUPS<a name="FNPTR-2"/><a href="#FOOTNOTE-2">[2]</a> uses 778a set of modules, called 779<em class="firstterm">backends</em><a name="INDEX-45"/>, to send print jobs to various 780destinations, such as local printers attached to parallel, serial, or 781Universal Serial Bus (USB) ports, or over the network using Unix line 782printer daemon (LPD) protocol, Internet Printing Protocol (IPP), 783AppleTalk Printer Access Protocol (PAP), and so on. The software 784package does not come with a backend for SMB; the Samba suite 785includes the <em class="emphasis">smbspool</em> 786<a name="INDEX-46"/>utility for this purpose.</p> 787 788<p>To enable printing to remote SMB printers using CUPS, create a 789symbolic link named <em class="filename">smb</em> in the CUPS backend 790directory pointing to <em class="emphasis">smbspool</em>. Depending on 791installation options, these could be in a number of places in the 792directory hierarchy, so be sure to check your system. Using a common 793default installation, the command would look like this:</p> 794 795<blockquote><pre class="code"># <tt class="userinput"><b>ln -s /usr/local/samba/bin/smbspool /usr/lib/cups/backend/smb</b></tt></pre></blockquote> 796 797<p>Issue a HUP signal to the CUPS daemon, <em class="emphasis">cupsd</em>, 798and check for the existence of SMB support with the <em class="emphasis">lpinfo 799-v</em> command. Its output should now include a line that says 800<tt class="literal">network</tt> <tt class="literal">smb</tt>.</p> 801 802<p>To add a printer, use the CUPS web interface, accessible on the local 803system at <em class="emphasis">http://localhost:631/</em>, 804or use the <em class="emphasis">lpadmin</em> command:</p> 805 806<blockquote><pre class="code"># <tt class="userinput"><b>lpadmin -p hp932c -E -v smb://maya/hp932c -D "HP 932C on maya"</b></tt></pre></blockquote> 807 808<p>This creates and enables the new print spool called 809<tt class="literal">hp932c</tt>. The <em class="emphasis">-v</em> argument 810specifies the printer device, which in this case is accessed over the 811network using an SMB URI. If the printer is not guest-accessible, 812you'll need to provide a username and password in 813the URI. The full format is as follows:</p> 814 815<blockquote><pre class="code">smb://[<em class="replaceable">username</em>[:<em class="replaceable">password</em>]@][<em class="replaceable">workgroup</em>/]<em class="replaceable">server</em>/<em class="replaceable">printshare</em></pre></blockquote> 816 817<p>The <em class="emphasis">lpadmin</em><a name="INDEX-47"/> command makes changes to 818<em class="filename">/etc/cups/printers.conf</em> and sends a HUP signal 819to the <em class="emphasis">cupsd</em> daemon, resulting in the creation 820of a local raw printer spool. In this example, print data is passed 821in raw format to the Windows system, which has the necessary printer 822drivers and printer description files to format the data 823appropriately. The <em class="emphasis">-D</em> option is used to give the 824printer a comment string.</p> 825 826<p>Once you have the printer set up, it's time to test 827it out. CUPS understands both BSD-style and System V-style printing 828commands, so you can use whichever is more comfortable. Using the BSD 829<em class="emphasis">lpr</em> command, try something like:</p> 830 831<blockquote><pre class="code">$ <tt class="userinput"><b>lpr -P hp932c textfile</b></tt></pre></blockquote> 832 833<p>You should now be set up to use the printer from any application on 834the Unix system. <a name="INDEX-48"/></p> 835 836 837</div> 838 839 840</div> 841 842 843<div class="sect2"><a name="samba2-CHP-10-SECT-2.3"/> 844 845<h3 class="head2">Samba Printing Options</h3> 846 847<p><a href="ch10.html#samba2-CHP-10-TABLE-2">Table 10-2</a> summarizes the Samba <a name="INDEX-49"/><a name="INDEX-50"/>printing 848options.</p> 849 850<a name="samba2-CHP-10-TABLE-2"/><h4 class="head4">Table 10-2. Printing configuration options</h4><table border="1"> 851 852 853 854 855 856 857<tr> 858<th> 859<p>Option</p> 860</th> 861<th> 862<p>Parameters</p> 863</th> 864<th> 865<p>Function</p> 866</th> 867<th> 868<p>Default</p> 869</th> 870<th> 871<p>Scope</p> 872</th> 873</tr> 874 875 876<tr> 877<td> 878<p><tt class="literal">printing</tt></p> 879</td> 880<td> 881<p><tt class="literal">bsd</tt>, <tt class="literal">sysv</tt>, 882<tt class="literal">cups</tt>, <tt class="literal">hpux</tt>, 883<tt class="literal">aix</tt>, <tt class="literal">qnx</tt>, 884<tt class="literal">plp</tt>, <tt class="literal">softq</tt>, or 885<tt class="literal">lprng</tt></p> 886</td> 887<td> 888<p>Printing system type of the Samba host</p> 889</td> 890<td> 891<p>System-dependent</p> 892</td> 893<td> 894<p>Share</p> 895</td> 896</tr> 897<tr> 898<td> 899<p><tt class="literal">printable</tt> <tt class="literal">(print ok)</tt></p> 900</td> 901<td> 902<p>boolean</p> 903</td> 904<td> 905<p>Marks a share as a printing share</p> 906</td> 907<td> 908<p><tt class="literal">no</tt></p> 909</td> 910<td> 911<p>Share</p> 912</td> 913</tr> 914<tr> 915<td> 916<p><tt class="literal">printer</tt> <tt class="literal">(printer name)</tt></p> 917</td> 918<td> 919<p>string (Unix printer name)</p> 920</td> 921<td> 922<p>Name for the printer that is shown to clients</p> 923</td> 924<td> 925<p>System-dependent</p> 926</td> 927<td> 928<p>Share</p> 929</td> 930</tr> 931<tr> 932<td> 933<p><tt class="literal">lpq cache time</tt></p> 934</td> 935<td> 936<p>numeric (time in seconds)</p> 937</td> 938<td> 939<p>Amount of time in seconds that Samba will cache the printer queue 940status</p> 941</td> 942<td> 943<p><tt class="literal">10</tt></p> 944</td> 945<td> 946<p>Global</p> 947</td> 948</tr> 949<tr> 950<td> 951<p><tt class="literal">postscript</tt></p> 952</td> 953<td> 954<p>boolean</p> 955</td> 956<td> 957<p>Treats all print jobs as PostScript by prefixing 958<tt class="literal">%!</tt> at the beginning of each file</p> 959</td> 960<td> 961<p><tt class="literal">no</tt></p> 962</td> 963<td> 964<p>Share</p> 965</td> 966</tr> 967<tr> 968<td> 969<p><tt class="literal">load printers</tt></p> 970</td> 971<td> 972<p>boolean</p> 973</td> 974<td> 975<p>If <tt class="literal">yes</tt>, automatically loads each printer in the 976<em class="emphasis">printcap</em> file as printing shares</p> 977</td> 978<td> 979<p><tt class="literal">yes</tt></p> 980</td> 981<td> 982<p>Global</p> 983</td> 984</tr> 985<tr> 986<td> 987<p><tt class="literal">print command</tt></p> 988</td> 989<td> 990<p>string (shell command)</p> 991</td> 992<td> 993<p>Unix command to perform printing</p> 994</td> 995<td> 996<p>See below</p> 997</td> 998<td> 999<p>Share</p> 1000</td> 1001</tr> 1002<tr> 1003<td> 1004<p><tt class="literal">lpq command</tt></p> 1005</td> 1006<td> 1007<p>string (shell command)</p> 1008</td> 1009<td> 1010<p>Unix command to return the status of the printing queue</p> 1011</td> 1012<td> 1013<p>See below</p> 1014</td> 1015<td> 1016<p>Share</p> 1017</td> 1018</tr> 1019<tr> 1020<td> 1021<p><tt class="literal">lprm command</tt></p> 1022</td> 1023<td> 1024<p>string (shell command)</p> 1025</td> 1026<td> 1027<p>Unix command to remove a job from the printing queue</p> 1028</td> 1029<td> 1030<p>See below</p> 1031</td> 1032<td> 1033<p>Share</p> 1034</td> 1035</tr> 1036<tr> 1037<td> 1038<p><tt class="literal">lppause command</tt></p> 1039</td> 1040<td> 1041<p>string (shell command)</p> 1042</td> 1043<td> 1044<p>Unix command to pause a job on the printing queue</p> 1045</td> 1046<td> 1047<p>See below</p> 1048</td> 1049<td> 1050<p>Share</p> 1051</td> 1052</tr> 1053<tr> 1054<td> 1055<p><tt class="literal">lpresume</tt> <tt class="literal">command</tt></p> 1056</td> 1057<td> 1058<p>string (shell command)</p> 1059</td> 1060<td> 1061<p>Unix command to resume a paused job on the printing queue</p> 1062</td> 1063<td> 1064<p>See below</p> 1065</td> 1066<td> 1067<p>Share</p> 1068</td> 1069</tr> 1070<tr> 1071<td> 1072<p><tt class="literal">printcap name</tt></p> 1073 1074<p><tt class="literal">(printcap)</tt></p> 1075</td> 1076<td> 1077<p>string (filename)</p> 1078</td> 1079<td> 1080<p>Location of the printer capabilities file</p> 1081</td> 1082<td> 1083<p>System-dependent</p> 1084</td> 1085<td> 1086<p>Global</p> 1087</td> 1088</tr> 1089<tr> 1090<td> 1091<p><tt class="literal">min print space</tt></p> 1092</td> 1093<td> 1094<p>numeric (size in kilobytes)</p> 1095</td> 1096<td> 1097<p>Minimum amount of free disk space that must be present to print</p> 1098</td> 1099<td> 1100<p><tt class="literal">0</tt></p> 1101</td> 1102<td> 1103<p>Share</p> 1104</td> 1105</tr> 1106<tr> 1107<td> 1108<p><tt class="literal">queuepause</tt> <tt class="literal">command</tt></p> 1109</td> 1110<td> 1111<p>string (shell command)</p> 1112</td> 1113<td> 1114<p>Unix command to pause a queue</p> 1115</td> 1116<td> 1117<p>See below</p> 1118</td> 1119<td> 1120<p>Share</p> 1121</td> 1122</tr> 1123<tr> 1124<td> 1125<p><tt class="literal">queueresume</tt> <tt class="literal">command</tt></p> 1126</td> 1127<td> 1128<p>string (shell command)</p> 1129</td> 1130<td> 1131<p>Unix command to resume a queue</p> 1132</td> 1133<td> 1134<p>See below</p> 1135</td> 1136<td> 1137<p>Share</p> 1138</td> 1139</tr> 1140 1141</table> 1142 1143 1144<div class="sect3"><a name="samba2-CHP-10-SECT-2.3.1"/> 1145 1146<h3 class="head3">printing</h3> 1147 1148<p>The <tt class="literal">printing</tt><a name="INDEX-51"/> configuration option tells 1149Samba which <a name="INDEX-52"/>printing system to use. There are 1150several different families of commands to control printing and print 1151statusing. Samba supports seven different types, as shown in <a href="ch10.html#samba2-CHP-10-TABLE-3">Table 10-3</a>.</p> 1152 1153<a name="samba2-CHP-10-TABLE-3"/><h4 class="head4">Table 10-3. Printing system types</h4><table border="1"> 1154 1155 1156 1157<tr> 1158<th> 1159<p>Variable</p> 1160</th> 1161<th> 1162<p>Definition</p> 1163</th> 1164</tr> 1165 1166 1167<tr> 1168<td> 1169<p>BSD</p> 1170</td> 1171<td> 1172<p>Berkeley Unix system</p> 1173</td> 1174</tr> 1175<tr> 1176<td> 1177<p>SYSV</p> 1178</td> 1179<td> 1180<p>System V</p> 1181</td> 1182</tr> 1183<tr> 1184<td> 1185<p>CUPS</p> 1186</td> 1187<td> 1188<p>Common Unix Printing System</p> 1189</td> 1190</tr> 1191<tr> 1192<td> 1193<p>AIX</p> 1194</td> 1195<td> 1196<p>IBM's AIX operating system</p> 1197</td> 1198</tr> 1199<tr> 1200<td> 1201<p>HPUX</p> 1202</td> 1203<td> 1204<p>Hewlett-Packard Unix</p> 1205</td> 1206</tr> 1207<tr> 1208<td> 1209<p>QNX</p> 1210</td> 1211<td> 1212<p>QNX Realtime Operating System</p> 1213</td> 1214</tr> 1215<tr> 1216<td> 1217<p>LPRNG</p> 1218</td> 1219<td> 1220<p>LPR Next Generation</p> 1221</td> 1222</tr> 1223<tr> 1224<td> 1225<p>SOFTQ</p> 1226</td> 1227<td> 1228<p>SOFTQ system</p> 1229</td> 1230</tr> 1231<tr> 1232<td> 1233<p>PLP</p> 1234</td> 1235<td> 1236<p>Portable Line Printer</p> 1237</td> 1238</tr> 1239 1240</table> 1241 1242<p>The value for this option must be one of these seven selections. For 1243example:</p> 1244 1245<blockquote><pre class="code">printing = SYSV</pre></blockquote> 1246 1247<p>The default value of this option is system-dependent and is 1248configured when Samba is first compiled. For most systems, the 1249<em class="filename">configure</em> script automatically detects the 1250printing system to be used and configures it properly in the Samba 1251makefile. However, if your system is a PLP, LPRNG, or QNX printing 1252system, you need to specify this explicitly in the makefile or the 1253printing share.</p> 1254 1255<p>The most common system types are BSD, SYSV, and CUPS. Each printer on 1256a BSD Unix server is described in the printer capabilities 1257file—normally <em class="filename">/etc/printcap</em>. See the 1258section on the <tt class="literal">printcap</tt> <tt class="literal">file</tt> 1259parameter for more information on this topic.</p> 1260 1261<p>Setting the <tt class="literal">printing</tt> configuration option 1262automatically sets at least three other printing options for the 1263service in question: <tt class="literal">print</tt> 1264<tt class="literal">command</tt>, <tt class="literal">lpq</tt> 1265<tt class="literal">command</tt>, and <tt class="literal">lprm</tt> 1266<tt class="literal">command</tt>. If you are running Samba on a system that 1267doesn't support any of the printing styles listed in 1268<a href="ch10.html#samba2-CHP-10-TABLE-3">Table 10-3</a>, simply set the commands for each of 1269these manually.</p> 1270 1271 1272</div> 1273 1274 1275 1276<div class="sect3"><a name="samba2-CHP-10-SECT-2.3.2"/> 1277 1278<h3 class="head3">printable</h3> 1279 1280<p>The <tt class="literal">printable</tt><a name="INDEX-53"/> option must be set to 1281<tt class="literal">yes</tt> to flag a share as a printing service. If this 1282option is not set, the share will be treated as a disk share instead. 1283You can set the option as follows:</p> 1284 1285<blockquote><pre class="code">[printer1] 1286 printable = yes</pre></blockquote> 1287 1288 1289</div> 1290 1291 1292 1293<div class="sect3"><a name="samba2-CHP-10-SECT-2.3.3"/> 1294 1295<a name="INDEX-54"/><h3 class="head3">printer</h3> 1296 1297<p>The option, also called 1298<tt class="literal">printer</tt><a name="INDEX-55"/> <tt class="literal">name</tt>, 1299specifies the name of the printer on the server to which the share 1300points. This option has no default and should be set explicitly in 1301the configuration file, even though Unix systems themselves often 1302recognize a default name such as <tt class="literal">lp</tt> for a printer. 1303For example:</p> 1304 1305<blockquote><pre class="code">[deskjet] 1306 printer = hpdkjet1</pre></blockquote> 1307 1308 1309</div> 1310 1311 1312 1313<div class="sect3"><a name="samba2-CHP-10-SECT-2.3.4"/> 1314 1315<h3 class="head3">lpq cache time</h3> 1316 1317<p>The global <tt class="literal">lpq</tt><a name="INDEX-56"/> <tt class="literal">cache</tt> 1318<tt class="literal">time</tt> option allows you to set the number of 1319seconds for which Samba will remember the current printer status. 1320After this time elapses, Samba will issue an <em class="emphasis">lpq</em> 1321command (or whatever command you specify with the 1322<tt class="literal">lpq</tt> <tt class="literal">command</tt> option) to get a 1323more up-to-date status that it can report to users. This defaults to 132410 seconds, but can be increased if your <tt class="literal">lpq</tt> 1325<tt class="literal">command</tt> takes an unusually long time to run or you 1326have lots of clients. A time setting of 0 disables caching of queue 1327status. The following example resets the time to 30 seconds:</p> 1328 1329<blockquote><pre class="code">[deskjet] 1330 lpq cache time = 30</pre></blockquote> 1331 1332 1333</div> 1334 1335 1336 1337<div class="sect3"><a name="samba2-CHP-10-SECT-2.3.5"/> 1338 1339<h3 class="head3">postscript</h3> 1340 1341<p>The <tt class="literal">postscript</tt><a name="INDEX-57"/> option forces the 1342printer to treat all data sent to it as PostScript. It does this by 1343prefixing the characters <tt class="literal">%!</tt> to the beginning of 1344the first line of each job. It is normally used with PCs that insert 1345a <tt class="literal">^D</tt> (control-D or 1346"end-of-file" mark) in front of the 1347first line of a PostScript file. It will not, obviously, turn a 1348non-PostScript printer into a PostScript one. The default value of 1349this options is <tt class="literal">no</tt>. You can override it as 1350follows:</p> 1351 1352<blockquote><pre class="code">[deskjet] 1353 postscript = yes</pre></blockquote> 1354 1355 1356</div> 1357 1358 1359 1360<div class="sect3"><a name="samba2-CHP-10-SECT-2.3.6"/> 1361 1362<h3 class="head3">load printers</h3> 1363 1364<p>The <tt class="literal">load</tt><a name="INDEX-58"/> <tt class="literal">printers</tt> 1365option tells Samba to create shares for all known printer names and 1366load those shares into the browse list. Samba will create and list a 1367printer share for each printer name in 1368<em class="filename">/etc/printcap</em> (or the system equivalent). For 1369example, if your 1370<em class="filename">printcap</em><a name="INDEX-59"/> file looks 1371like this:<a name="FNPTR-3"/><a href="#FOOTNOTE-3">[3]</a></p> 1372 1373<blockquote><pre class="code">lp:\ 1374 :sd=/var/spool/lpd/lp:\ <i class="lineannotation">spool directory</i> 1375 :mx#0:\ <i class="lineannotation">maximum file size (none)</i> 1376 :sh:\ <i class="lineannotation">supress burst header (no)</i> 1377 :lp=/dev/lp1:\ <i class="lineannotation">device name for output</i> 1378 :if=/var/spool/lpd/lp/filter: <i class="lineannotation">text filter</i> 1379 1380laser:\ 1381 :sd=/var/spool/lpd/laser:\ <i class="lineannotation">spool directory</i> 1382 :mx#0:\ <i class="lineannotation">maximum file size (none)</i> 1383 :sh:\ <i class="lineannotation">supress burst header (no)</i> 1384 :lp=/dev/laser:\ <i class="lineannotation">device name for output</i> 1385 :if=/var/spool/lpd/lp/filter: <i class="lineannotation">text filter</i></pre></blockquote> 1386 1387<p>the shares <tt class="literal">[lp]</tt> and <tt class="literal">[laser]</tt> are 1388automatically created as valid print shares when Samba is started. 1389Both shares borrow the configuration options specified in the 1390<tt class="literal">[printers]</tt> section to configure themselves and are 1391available in the browse list for the Samba server. The default value 1392for this option is <tt class="literal">yes</tt>. If you prefer to specify 1393each printer explicitly in your configuration file, use the 1394following:</p> 1395 1396<blockquote><pre class="code">[global] 1397 load printers = no</pre></blockquote> 1398 1399 1400</div> 1401 1402 1403 1404<div class="sect3"><a name="samba2-CHP-10-SECT-2.3.7"/> 1405 1406<a name="INDEX-60"/><a name="INDEX-61"/><a name="INDEX-62"/><a name="INDEX-63"/><a name="INDEX-64"/><h3 class="head3">print command, lpq command, lprm command,lppause command, lpresume command</h3> 1407 1408<p>These options tell Samba which Unix commands control and send data to 1409the printer. The Unix commands involved are: <em class="emphasis">lpr</em> 1410(send to Line PRinter), <em class="emphasis">lpq</em> (List Printer 1411Queue), <em class="emphasis">lprm</em> (Line Printer ReMove), and 1412optionally <em class="emphasis">lppause</em> and 1413<em class="emphasis">lpresume</em>. Samba provides an option named after 1414each command, in case you need to override any of the system 1415defaults. For example, consider the following:</p> 1416 1417<blockquote><pre class="code">lpq command = /usr/ucb/lpq %p</pre></blockquote> 1418 1419<p>This would set <tt class="literal">lpq</tt> <tt class="literal">command</tt> to 1420use <em class="filename">/usr/ucb/lpq</em>. Similarly:</p> 1421 1422<blockquote><pre class="code">lprm command = /usr/local/bin/lprm -P%p %j</pre></blockquote> 1423 1424<p>would set the Samba printer remove command to 1425<em class="filename">/usr/local/bin/lprm</em> and provide it the print job 1426number using the <tt class="literal">%j</tt> variable.</p> 1427 1428<p>The default values for each option are dependent on the value of the 1429<tt class="literal">printing</tt> option. <a href="ch10.html#samba2-CHP-10-TABLE-4">Table 10-4</a> 1430shows the default commands for each printing option. The most popular 1431printing system is BSD.</p> 1432 1433<a name="samba2-CHP-10-TABLE-4"/><h4 class="head4">Table 10-4. Default commands for various printing options</h4><table border="1"> 1434 1435 1436 1437 1438 1439 1440<tr> 1441<th> 1442<p>Option</p> 1443</th> 1444<th> 1445<p>BSD, AIX, PLP, LPRNG</p> 1446</th> 1447<th> 1448<p>SYSV, HPUX</p> 1449</th> 1450<th> 1451<p>QNX</p> 1452</th> 1453<th> 1454<p>SOFTQ</p> 1455</th> 1456</tr> 1457 1458 1459<tr> 1460<td> 1461<p><tt class="literal">print</tt> <tt class="literal">command</tt></p> 1462</td> 1463<td> 1464<p><tt class="literal">lpr -r -P%p %s</tt></p> 1465</td> 1466<td> 1467<p><tt class="literal">lp -c -d%p %s; rm</tt> <tt class="literal">%s</tt></p> 1468</td> 1469<td> 1470<p><tt class="literal">lp -r -P%p %s</tt></p> 1471</td> 1472<td> 1473<p><tt class="literal">lp -d%p -s %s; rm %s</tt></p> 1474</td> 1475</tr> 1476<tr> 1477<td> 1478<p><tt class="literal">lpq</tt> <tt class="literal">command</tt></p> 1479</td> 1480<td> 1481<p><tt class="literal">lpq -P%p</tt></p> 1482</td> 1483<td> 1484<p><tt class="literal">lpstat -o%p</tt></p> 1485</td> 1486<td> 1487<p><tt class="literal">lpq -P%p</tt></p> 1488</td> 1489<td> 1490<p><tt class="literal">lpstat -o%p</tt></p> 1491</td> 1492</tr> 1493<tr> 1494<td> 1495<p><tt class="literal">lprm</tt> <tt class="literal">command</tt></p> 1496</td> 1497<td> 1498<p><tt class="literal">lprm -P%p %j</tt></p> 1499</td> 1500<td> 1501<p><tt class="literal">cancel %p-%j</tt></p> 1502</td> 1503<td> 1504<p><tt class="literal">cancel %p-%j</tt></p> 1505</td> 1506<td> 1507<p><tt class="literal">cancel %p-%j</tt></p> 1508</td> 1509</tr> 1510<tr> 1511<td> 1512<p><tt class="literal">lppause</tt> <tt class="literal">command</tt></p> 1513</td> 1514<td> 1515<p><tt class="literal">lp -i %p-%j -H</tt> <tt class="literal">hold</tt></p> 1516 1517<p>(SYSV only)</p> 1518</td> 1519<td> 1520<p>None</p> 1521</td> 1522<td> 1523<p>None</p> 1524</td> 1525<td> 1526<p>None</p> 1527</td> 1528</tr> 1529<tr> 1530<td> 1531<p><tt class="literal">lpresume</tt> <tt class="literal">command</tt></p> 1532</td> 1533<td> 1534<p><tt class="literal">lp -i %p-%j -H</tt> <tt class="literal">resume</tt></p> 1535 1536<p>(SYSV only)</p> 1537</td> 1538<td> 1539<p>None</p> 1540</td> 1541<td> 1542<p>None</p> 1543</td> 1544<td> 1545<p><tt class="literal">qstat -s -j%j -r</tt></p> 1546</td> 1547</tr> 1548 1549</table> 1550 1551<p>It is usually unnecessary to reset these options in Samba, with the 1552possible exception of the <tt class="literal">print</tt> 1553<tt class="literal">command</tt>. This option might need to be set 1554explicitly if your printing system doesn't have a 1555<em class="emphasis">-r</em> (remove after printing) option on the 1556printing command. For example:</p> 1557 1558<blockquote><pre class="code">print command = /usr/local/lpr -P%p %s; /bin/rm %s</pre></blockquote> 1559 1560<p>With a bit of judicious programming, these 1561<em class="filename">smb.conf</em> options can also be used for debugging:</p> 1562 1563<blockquote><pre class="code">print command = cat %s >>/tmp/printlog; lpr -r -P%p %s</pre></blockquote> 1564 1565<p>Using the previous configuration, it is possible to verify that files 1566are actually being delivered to the Samba server. If they are, their 1567contents will show up in the file <em class="filename">/tmp/printlog</em>.</p> 1568 1569<p>After BSD, the next most popular kind of printing system is SYSV (or 1570System V) printing, plus some SYSV variants for 1571IBM's AIX and Hewlett-Packard's 1572HP-UX. These systems do not have an 1573<em class="filename">/etc/printcap</em> file. Instead, the 1574<tt class="literal">printcap</tt> <tt class="literal">file</tt> option can be set 1575to an appropriate <em class="emphasis">lpstat</em> command for the system. 1576This tells Samba to get a list of printers from the 1577<em class="emphasis">lpstat</em> command. Alternatively, you can set the 1578global configuration option <tt class="literal">printcap</tt> 1579<tt class="literal">name</tt> to the name of a dummy 1580<em class="filename">printcap</em> file you provide. In the latter case, 1581the file must contain a series of lines such as:</p> 1582 1583<blockquote><pre class="code">lp|print1|My Printer 1 1584print2|My Printer 2 1585print3|My Printer 3</pre></blockquote> 1586 1587<p>Each line names a printer followed by aliases for it. In this 1588example, the first printer is called <tt class="literal">lp</tt>, 1589<tt class="literal">print1</tt>, or <tt class="literal">My</tt> 1590<tt class="literal">Printer</tt> <tt class="literal">1</tt>, whichever the user 1591prefers to use. The first name is used in place of 1592<tt class="literal">%p</tt> in any command Samba executes for that printer.</p> 1593 1594<p>Two additional printer types are also supported by Samba: LPRNG (LPR 1595New Generation) and PLP (Public Line Printer). These are public 1596domain and open source printing systems and are used by many sites to 1597overcome problems with vendor-supplied software. Samba also supports 1598the printing systems of the SOFTQ and QNX real-time operating 1599systems.</p> 1600 1601 1602</div> 1603 1604 1605 1606<div class="sect3"><a name="samba2-CHP-10-SECT-2.3.8"/> 1607 1608<h3 class="head3">printcap name</h3> 1609 1610<p>If the <tt class="literal">printcap</tt><a name="INDEX-65"/><a name="INDEX-66"/> 1611<tt class="literal">name</tt> option (also called 1612<tt class="literal">printcap</tt>) appears in a printing share, Samba uses 1613the file specified as the system printer capabilities file (normally 1614<em class="filename">/etc/printcap</em>). However, you can reset it to a 1615file consisting of only the printers you want to share over the 1616network. The value must be the filename (with its complete path 1617specified) of a printer capabilities file on the server:</p> 1618 1619<blockquote><pre class="code">[deskjet] 1620 printcap name = /usr/local/samba/lib/printcap</pre></blockquote> 1621 1622<p>The CUPS printing system uses its own method of determining printer 1623capabilities, rather than the standard <em class="filename">printcap</em> 1624file. In this case, set <tt class="literal">printcap</tt> 1625<tt class="literal">name</tt> as follows:</p> 1626 1627<blockquote><pre class="code">[global] 1628 printing = cups 1629 printcap name = cups</pre></blockquote> 1630 1631 1632</div> 1633 1634 1635 1636<div class="sect3"><a name="samba2-CHP-10-SECT-2.3.9"/> 1637 1638<h3 class="head3">min print space</h3> 1639 1640<p>The <tt class="literal">min</tt><a name="INDEX-67"/> <tt class="literal">print</tt> 1641<tt class="literal">space</tt> option sets the amount of space that must be 1642available on the disk that contains the spool directory if printing 1643is to be allowed. Setting it to zero (the default) turns the check 1644off; setting it to any other number sets the amount of free space in 1645kilobytes required. This option helps to avoid having print jobs fill 1646up the remaining disk space on the server, which can cause other 1647processes to fail:</p> 1648 1649<blockquote><pre class="code">[deskjet] 1650 min print space = 4000</pre></blockquote> 1651 1652 1653</div> 1654 1655 1656 1657<div class="sect3"><a name="samba2-CHP-10-SECT-2.3.10"/> 1658 1659<a name="INDEX-68"/><h3 class="head3">queuepause command</h3> 1660 1661<p>This configuration option specifies a command that tells Samba how to 1662pause an entire print queue, as opposed to a single job on the queue. 1663The default value depends on the printing type chosen. You should not 1664need to alter this option.</p> 1665 1666 1667</div> 1668 1669 1670 1671<div class="sect3"><a name="samba2-CHP-10-SECT-2.3.11"/> 1672 1673<a name="INDEX-69"/><h3 class="head3">queueresume command</h3> 1674 1675<p>This configuration option specifies a command that tells Samba how to 1676resume a paused print queue, as opposed to resuming a single job on 1677the print queue. The default value depends on the printing type 1678chosen. You should not need to alter this option. <a name="INDEX-70"/> <a name="INDEX-71"/> <a name="INDEX-72"/><a name="INDEX-73"/></p> 1679 1680 1681</div> 1682 1683 1684</div> 1685 1686 1687</div> 1688 1689<hr/><h4 class="head4">Footnotes</h4><blockquote><a name="FOOTNOTE-1"/> <p><a href="#FNPTR-1">[1]</a> If 1690you are using Linux, you can use the <em class="emphasis">checkpc</em> 1691command to check for this type of error.</p> <a name="FOOTNOTE-2"/> 1692<p><a href="#FNPTR-2">[2]</a> CUPS is open source software (<a href="http://www.opensource.org">http://www.opensource.org</a>) developed by Easy 1693Software Products. For more information, visit <a href="http://www.cups.org">http://www.cups.org</a>.</p> <a name="FOOTNOTE-3"/> <p><a href="#FNPTR-3">[3]</a> We have placed annotated comments off to 1694the right in case you've never dealt with this file 1695before.</p> </blockquote><hr/><h4 class="head4"><a href="toc.html">TOC</a></h4></body></html> 1696