4 >Printing Support in Samba
2.2.x
</TITLE
7 CONTENT=
"Modular DocBook HTML Stylesheet Version 1.57"></HEAD
23 >Printing Support in Samba
2.2.x
</A
35 >Beginning with the
2.2.0 release, Samba supports
36 the native Windows NT printing mechanisms implemented via
37 MS-RPC (i.e. the SPOOLSS named pipe). Previous versions of
38 Samba only supported LanMan printing calls.
</P
40 >The additional functionality provided by the new
41 SPOOLSS support includes:
</P
47 >Support for downloading printer driver
48 files to Windows
95/
98/NT/
2000 clients upon demand.
53 >Uploading of printer drivers via the
54 Windows NT Add Printer Wizard (APW) or the
55 Imprints tool set (refer to
<A
56 HREF=
"http://imprints.sourceforge.net"
58 >http://imprints.sourceforge.net
</A
64 >Support for the native MS-RPC printing
65 calls such as StartDocPrinter, EnumJobs(), etc... (See
66 the MSDN documentation at
<A
67 HREF=
"http://msdn.microsoft.com/"
69 >http://msdn.microsoft.com/
</A
71 for more information on the Win32 printing API)
76 >Support for NT Access Control Lists (ACL)
81 >Improved support for printer queue manipulation
82 through the use of an internal databases for spooled job
87 >There has been some initial confusion about what all this means
88 and whether or not it is a requirement for printer drivers to be
89 installed on a Samba host in order to support printing from Windows
90 clients. A bug existed in Samba
2.2.0 which made Windows NT/
2000 clients
91 require that the Samba server possess a valid driver for the printer.
92 This is fixed in Samba
2.2.1 and once again, Windows NT/
2000 clients
93 can use the local APW for installing drivers to be used with a Samba
94 served printer. This is the same behavior exhibited by Windows
9x clients.
95 As a side note, Samba does not use these drivers in any way to process
96 spooled files. They are utilized entirely by the clients.
</P
98 >The following MS KB article, may be of some help if you are dealing with
99 Windows
2000 clients:
<I
101 >How to Add Printers with No User
102 Interaction in Windows
2000</I
106 HREF=
"http://support.microsoft.com/support/kb/articles/Q189/1/05.ASP"
108 >http://support.microsoft.com/support/kb/articles/Q189/
1/
05.ASP
</A
131 >[print$] vs. [printer$]
</B
138 >Previous versions of Samba recommended using a share named [printer$].
139 This name was taken from the printer$ service created by Windows
9x
140 clients when a printer was shared. Windows
9x printer servers always have
141 a printer$ service which provides read-only access via no
142 password in order to support printer driver downloads.
</P
144 >However, the initial implementation allowed for a
148 >printer driver location
</I
151 to be used on a per share basis to specify the location of
152 the driver files associated with that printer. Another
159 a means of defining the printer driver name to be sent to
162 >These parameters, including
<TT
168 > parameter, are being depreciated and should not
169 be used in new installations. For more information on this change,
170 you should refer to the
<A
172 >Migration section
</A
185 >Creating [print$]
</A
188 >In order to support the uploading of printer driver
189 files, you must first configure a file share named [print$].
190 The name of this share is hard coded in Samba's internals so
191 the name is very important (print$ is the service used by
192 Windows NT print servers to provide support for printer driver
195 >You should modify the server's smb.conf file to add the global
196 parameters and to create the
197 following file share (of course, some of the parameter values,
198 such as 'path' are arbitrary and should be replaced with
199 appropriate values for your site):
</P
202 CLASS=
"PROGRAMLISTING"
204 ; members of the ntadmin group should be able
205 ; to add drivers and set printer properties
206 ; root is implicitly a 'printer admin'
207 printer admin = @ntadmin
210 path = /usr/local/samba/printers
214 ; since this share is configured as read only, then we need
215 ; a 'write list'. Check the file system permissions to make
216 ; sure this account can copy files to the share. If this
217 ; is setup to a non-root account, then it should also exist
218 ; as a 'printer admin'
219 write list = @ntadmin,root
</PRE
223 HREF=
"smb.conf.5.html#WRITELIST"
231 > is used to allow administrative
232 level user accounts to have write access in order to update files
233 on the share. See the
<A
234 HREF=
"smb.conf.5.html"
238 > for more information on configuring file shares.
</P
240 >The requirement for
<A
241 HREF=
"smb.conf.5.html#GUESTOK"
248 > depends upon how your
249 site is configured. If users will be guaranteed to have
250 an account on the Samba host, then this is a non-issue.
</P
258 >The non-issue is that if all your Windows NT users are guaranteed to be
259 authenticated by the Samba server (such as a domain member server and the NT
260 user has already been validated by the Domain Controller in
261 order to logon to the Windows NT console), then guest access
262 is not necessary. Of course, in a workgroup environment where
263 you just want to be able to print without worrying about
264 silly accounts and security, then configure the share for
265 guest access. You'll probably want to add
<A
266 HREF=
"smb.conf.5.html#MAPTOGUEST"
270 >map to guest = Bad User
</B
272 > in the [global] section as well. Make sure
273 you understand what this parameter does before using it
278 >In order for a Windows NT print server to support
279 the downloading of driver files by multiple client architectures,
280 it must create subdirectories within the [print$] service
281 which correspond to each of the supported client architectures.
282 Samba follows this model as well.
</P
284 >Next create the directory tree below the [print$] share
285 for each architecture you wish to support.
</P
288 CLASS=
"PROGRAMLISTING"
290 |-W32X86 ;
"Windows NT x86"
291 |-WIN40 ;
"Windows 95/98"
292 |-W32ALPHA ;
"Windows NT Alpha_AXP"
293 |-W32MIPS ;
"Windows NT R4000"
294 |-W32PPC ;
"Windows NT PowerPC"</PRE
308 >ATTENTION! REQUIRED PERMISSIONS
</B
315 >In order to currently add a new driver to you Samba host,
316 one of two conditions must hold true:
</P
322 >The account used to connect to the Samba host
323 must have a uid of
0 (i.e. a root account)
</P
327 >The account used to connect to the Samba host
328 must be a member of the
<A
329 HREF=
"smb.conf.5.html#PRINTERADMIN"
342 >Of course, the connected account must still possess access
343 to add files to the subdirectories beneath [print$]. Remember
344 that all file shares are set to 'read only' by default.
</P
350 >Once you have created the required [print$] service and
351 associated subdirectories, simply log onto the Samba server using
358 from a Windows NT
4.0 client. Navigate to the
"Printers" folder
359 on the Samba server. You should see an initial listing of printers
360 that matches the printer shares defined on your Samba host.
</P
368 >Setting Drivers for Existing Printers
</A
371 >The initial listing of printers in the Samba host's
372 Printers folder will have no real printer driver assigned
373 to them. By default, in Samba
2.2.0 this driver name was set to
376 >NO PRINTER DRIVER AVAILABLE FOR THIS PRINTER
</I
378 Later versions changed this to a NULL string to allow the use
379 tof the local Add Printer Wizard on NT/
2000 clients.
380 Attempting to view the printer properties for a printer
381 which has this default driver assigned will result in
382 the error message:
</P
386 >Device settings cannot be displayed. The driver
387 for the specified printer is not installed, only spooler
388 properties will be displayed. Do you want to install the
392 >Click
"No" in the error dialog and you will be presented with
393 the printer properties window. The way assign a driver to a
394 printer is to either
</P
400 >Use the
"New Driver..." button to install
401 a new printer driver, or
</P
405 >Select a driver from the popup list of
406 installed drivers. Initially this list will be empty.
</P
410 >If you wish to install printer drivers for client
411 operating systems other than
"Windows NT x86", you will need
412 to use the
"Sharing" tab of the printer properties dialog.
</P
414 >Assuming you have connected with a root account, you
415 will also be able modify other printer properties such as
416 ACLs and device settings using this dialog box.
</P
418 >A few closing comments for this section, it is possible
419 on a Windows NT print server to have printers
420 listed in the Printers folder which are not shared. Samba does
421 not make this distinction. By definition, the only printers of
422 which Samba is aware are those which are specified as shares in
428 >Another interesting side note is that Windows NT clients do
429 not use the SMB printer share, but rather can print directly
430 to any printer on another Windows NT host using MS-RPC. This
431 of course assumes that the printing client has the necessary
432 privileges on the remote host serving the printer. The default
433 permissions assigned by Windows NT to a printer gives the
"Print"
434 permissions to the
"Everyone" well-known group.
</P
442 >Support a large number of printers
</A
445 >One issue that has arisen during the development
446 phase of Samba
2.2 is the need to support driver downloads for
447 100's of printers. Using the Windows NT APW is somewhat
448 awkward to say the list. If more than one printer are using the
450 HREF=
"rpcclient.1.html"
457 > can be used to set the driver
458 associated with an installed driver. The following is example
459 of how this could be accomplished:
</P
462 CLASS=
"PROGRAMLISTING"
467 >rpcclient pogo -U root%secret -c
"enumdrivers"
468 Domain=[NARNIA] OS=[Unix] Server=[Samba
2.2.0-alpha3]
471 Printer Driver Info
1:
472 Driver Name: [HP LaserJet
4000 Series PS]
474 Printer Driver Info
1:
475 Driver Name: [HP LaserJet
2100 Series PS]
477 Printer Driver Info
1:
478 Driver Name: [HP LaserJet
4Si/
4SiMX PS]
483 >rpcclient pogo -U root%secret -c
"enumprinters"
484 Domain=[NARNIA] OS=[Unix] Server=[Samba
2.2.0-alpha3]
486 name:[\\POGO\hp-print]
487 description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,]
493 >rpcclient pogo -U root%secret \
497 > -c
"setdriver hp-print \"HP LaserJet
4000 Series PS\
""
498 Domain=[NARNIA] OS=[Unix] Server=[Samba
2.2.0-alpha3]
499 Successfully set hp-print to driver HP LaserJet
4000 Series PS.
</PRE
508 >Adding New Printers via the Windows NT APW
</A
511 >By default, Samba offers all printer shares defined in
<TT
515 in the
"Printers..." folder. Also existing in this folder is the Windows NT
516 Add Printer Wizard icon. The APW will be show only if
</P
522 >The connected user is able to successfully
523 execute an OpenPrinterEx(\\server) with administrative
524 privileges (i.e. root or
<TT
535 HREF=
"smb.conf.5.html#SHOWADDPRINTERWIZARD"
541 add printer wizard = yes
</I
549 >In order to be able to use the APW to successfully add a printer to a Samba
551 HREF=
"smb.conf.5.html#ADDPRINTERCOMMAND"
560 > must have a defined value. The program
561 hook must successfully add the printer to the system (i.e.
565 > or appropriate files) and
571 >When using the APW from a client, if the named printer share does
575 > will execute the
<TT
581 > and reparse to the
<TT
585 to attempt to locate the new printer share. If the share is still not defined,
586 an error of
"Access Denied" is returned to the client. Note that the
590 >add printer program
</I
592 > is executed under the context
593 of the connected user, not necessarily a root account.
</P
595 >There is a complementing
<A
596 HREF=
"smb.conf.5.html#DELETEPRINTERCOMMAND"
605 > for removing entries from the
"Printers..."
614 >Samba and Printer Ports
</A
617 >Windows NT/
2000 print servers associate a port with each printer. These normally
618 take the form of LPT1:, COM1:, FILE:, etc... Samba must also support the
619 concept of ports associated with a printer. By default, only one printer port,
620 named
"Samba Printer Port", exists on a system. Samba does not really a port in
621 order to print, rather it is a requirement of Windows clients.
</P
623 >Note that Samba does not support the concept of
"Printer Pooling" internally
624 either. This is when a logical printer is assigned to multiple ports as
625 a form of load balancing or fail over.
</P
627 >If you require that multiple ports be defined for some reason,
632 HREF=
"smb.conf.5.html#ENUMPORTSCOMMAND"
641 > which can be used to define an external program
642 that generates a listing of ports on a system.
</P
651 >The Imprints Toolset
</A
654 >The Imprints tool set provides a UNIX equivalent of the
655 Windows NT Add Printer Wizard. For complete information, please
656 refer to the Imprints web site at
<A
657 HREF=
"http://imprints.sourceforge.net/"
659 > http://imprints.sourceforge.net/
</A
660 > as well as the documentation
661 included with the imprints source distribution. This section will
662 only provide a brief introduction to the features of Imprints.
</P
669 >What is Imprints?
</A
672 >Imprints is a collection of tools for supporting the goals
679 >Providing a central repository information
680 regarding Windows NT and
95/
98 printer driver packages
</P
684 >Providing the tools necessary for creating
685 the Imprints printer driver packages.
</P
689 >Providing an installation client which
690 will obtain and install printer drivers on remote Samba
691 and Windows NT
4 print servers.
</P
701 >Creating Printer Driver Packages
</A
704 >The process of creating printer driver packages is beyond
705 the scope of this document (refer to Imprints.txt also included
706 with the Samba distribution for more information). In short,
707 an Imprints driver package is a gzipped tarball containing the
708 driver files, related INF files, and a control file needed by the
709 installation client.
</P
717 >The Imprints server
</A
720 >The Imprints server is really a database server that
721 may be queried via standard HTTP mechanisms. Each printer
722 entry in the database has an associated URL for the actual
723 downloading of the package. Each package is digitally signed
724 via GnuPG which can be used to verify that package downloaded
725 is actually the one referred in the Imprints database. It is
729 > recommended that this security check
738 >The Installation Client
</A
741 >More information regarding the Imprints installation client
742 is available in the
<TT
744 >Imprints-Client-HOWTO.ps
</TT
746 file included with the imprints source package.
</P
748 >The Imprints installation client comes in two forms.
</P
754 >a set of command line Perl scripts
</P
758 >a GTK+ based graphical interface to
759 the command line perl scripts
</P
763 >The installation client (in both forms) provides a means
764 of querying the Imprints database server for a matching
765 list of known printer model names as well as a means to
766 download and install the drivers on remote Samba and Windows
769 >The basic installation process is in four steps and
770 perl code is wrapped around
<B
780 CLASS=
"PROGRAMLISTING"
782 foreach (supported architecture for a given driver)
784 1. rpcclient: Get the appropriate upload directory
786 2. smbclient: Upload the driver files
787 3. rpcclient: Issues an AddPrinterDriver() MS-RPC
790 4. rpcclient: Issue an AddPrinterEx() MS-RPC to actually
791 create the printer
</PRE
794 >One of the problems encountered when implementing
795 the Imprints tool set was the name space issues between
796 various supported client architectures. For example, Windows
797 NT includes a driver named
"Apple LaserWriter II NTX v51.8"
798 and Windows
95 calls its version of this driver
"Apple
799 LaserWriter II NTX"</P
801 >The problem is how to know what client drivers have
802 been uploaded for a printer. As astute reader will remember
803 that the Windows NT Printer Properties dialog only includes
804 space for one printer driver name. A quick look in the
805 Windows NT
4.0 system registry at
</P
809 >HKLM\System\CurrentControlSet\Control\Print\Environment
813 >will reveal that Windows NT always uses the NT driver
814 name. This is ok as Windows NT always requires that at least
815 the Windows NT version of the printer driver is present.
816 However, Samba does not have the requirement internally.
817 Therefore, how can you use the NT driver name if is has not
818 already been installed?
</P
820 >The way of sidestepping this limitation is to require
821 that all Imprints printer driver packages include both the Intel
822 Windows NT and
95/
98 printer drivers and that NT driver is
835 >Migration to from Samba
2.0.x to
2.2.x
</A
838 >Given that printer driver management has changed (we hope improved) in
839 2.2 over prior releases, migration from an existing setup to
2.2 can
840 follow several paths. Here are the possible scenarios for
847 >If you do not desire the new Windows NT
848 print driver support, nothing needs to be done.
849 All existing parameters work the same.
</P
853 >If you want to take advantage of NT printer
854 driver support but do not want to migrate the
855 9x drivers to the new setup, the leave the existing
859 > file. When smbd attempts
861 9x driver for the printer in the TDB and fails it
862 will drop down to using the printers.def (and all
863 associated parameters). The
<B
867 tool will also remain for backwards compatibility but will
868 be removed in the next major release.
</P
872 >If you install a Windows
9x driver for a printer
873 on your Samba host (in the printing TDB), this information will
874 take precedence and the three old printing parameters
875 will be ignored (including print driver location).
</P
879 >If you want to migrate an existing
<TT
883 file into the new setup, the current only solution is to use the Windows
884 NT APW to install the NT drivers and the
9x drivers. This can be scripted
892 Imprints installation client at
<A
893 HREF=
"http://imprints.sourceforge.net/"
895 >http://imprints.sourceforge.net/
</A
923 > parameters are considered to
924 be deprecated and will be removed soon. Do not use them in new
934 >printer driver file (G)
</I
944 >printer driver (S)
</I
954 >printer driver location (S)
</I
965 >The have been two new parameters add in Samba
2.2.2 to for
966 better support of Samba
2.0.x backwards capability (
<TT
972 >) and for using local printers drivers on Windows
976 >use client driver
</I
979 these options are described in the smb.coinf(
5) man page and are
980 disabled by default.
</P