From c8af938a0a7ec15c38076fc11d164f55737318f1 Mon Sep 17 00:00:00 2001
From: Gerald Carter Beginning with the 2.2.0 release, Samba supports
- the native Windows NT printing mechanisms implemented via
- MS-RPC (i.e. the SPOOLSS named pipe). Previous versions of
- Samba only supported LanMan printing calls. The additional functionality provided by the new
- SPOOLSS support includes: Support for downloading printer driver
- files to Windows 95/98/NT/2000 clients upon demand.
- Uploading of printer drivers via the
- Windows NT Add Printer Wizard (APW) or the Imprints tool set
-
Support for the native MS-RPC printing - calls such as StartDocPrinter, EnumJobs(), etc... (See - the MSDN documentation - for more information on the Win32 printing API) -
http://msdn.microsoft.com/ + for more information on the Win32 printing API) +Support for NT Access Control Lists (ACL) - on printer objects
Improved support for printer queue manipulation - through the use of an internal databases for spooled job - information
In order to support the uploading of printer driver - files, you must first configure a file share named [print$]. - The name of this share is hard coded in Samba's internals so - the name is very important (print$ is the service used by - Windows NT print servers to provide support for printer driver - download).
Warning |
Previous versions of Samba recommended using - a share named [printer$]. This name was taken from the - printer$ service created by Windows 9x clients when a - printer was shared. Windows 9x printer servers always have - a printer$ service which provides read-only access via no - password in order to support printer driver downloads. WARNING!!! Previous versions of Samba +recommended using a share named [printer$]. This name was taken from the +printer$ service created by Windows 9x clients when a +printer was shared. Windows 9x printer servers always have +a printer$ service which provides read-only access via no +password in order to support printer driver downloads.However, the initial implementation allowed for a - parameter named printer driver location - to be used on a per share basis to specify the location of - the driver files associated with that printer. Another - parameter named printer driver provided - a means of defining the printer driver name to be sent to - the client. These parameters, including printer driver - file parameter, are being depreciated and should not - be used in new installations. For more information on this change, - you should refer to the Migration section - Migration section of this document. |
In order to support the uploading of printer driver +files, you must first configure a file share named [print$]. +The name of this share is hard coded in Samba's internals so +the name is very important (print$ is the service used by +Windows NT print servers to provide support for printer driver +download).
You should modify the server's smb.conf file to create the - following file share (of course, some of the parameter values, - such as 'path' are arbitrary and should be replaced with - appropriate values for your site):
[print$] - path = /usr/local/samba/printers - guest ok = yes - browseable = yes - read only = yes - write list = ntadmin -
The write listwrite list is used to allow administrative - level user accounts to have write access in order to update files - on the share. See the smb.conf(5) man pagesmb.conf(5) man page for more information on - configuring file shares.
The requirement for guest ok = yesguest ok = yes depends upon how your - site is configured. If users will be guaranteed to have - an account on the Samba host, then this is a non-issue.
author's note: The non-issue is that - if all your Windows NT users are guarenteed to be authenticated - by the Samba server (such as a domain member server and the NT - user has already been validated by the Domain Controller in - order to logon to the Windows NT console), then guest access - is not necessary. Of course, in a workgroup environment where - you just want to be able to print without worrying about - silly accounts and security, then configure the share for - guest access. You'll probably want to add Author's Note: The non-issue is that if all your Windows NT users are guaranteed to be +authenticated by the Samba server (such as a domain member server and the NT +user has already been validated by the Domain Controller in +order to logon to the Windows NT console), then guest access +is not necessary. Of course, in a workgroup environment where +you just want to be able to print without worrying about +silly accounts and security, then configure the share for +guest access. You'll probably want to add map to guest = Bad User - map to guest = Bad User in the [global] section as well. Make sure - you understand what this parameter does before using it - though. --jerry]
In order for a Windows NT print server to support - the downloading of driver files by multiple client architectures, - it must create subdirectories within the [print$] service - which correspond to each of the supported client architectures. - Samba follows this model as well.
Next create the directory tree below the [print$] share - for each architecture you wish to support.
[print$]----- - |-W32X86 ; "Windows NT x86" - |-WIN40 ; "Windows 95/98" - |-W32ALPHA ; "Windows NT Alpha_AXP" - |-W32MIPS ; "Windows NT R4000" - |-W32PPC ; "Windows NT PowerPC" -[print$]----- + |-W32X86 ; "Windows NT x86" + |-WIN40 ; "Windows 95/98" + |-W32ALPHA ; "Windows NT Alpha_AXP" + |-W32MIPS ; "Windows NT R4000" + |-W32PPC ; "Windows NT PowerPC"
ATTENTION! REQUIRED PERMISSIONS
In order to currently add a new driver to you Samba host, - one of two conditions must hold true:
The account used to connect to the Samba host - must have a uid of 0 (i.e. a root account)
The account used to connect to the Samba host - must be a member of the printer adminprinter + admin list.
Of course, the connected account must still possess access - to add files to the subdirectories beneath [print$].
Once you have created the required [print$] service and - associated subdirectories, simply log onto the Samba server using - a root (or printer admin) account - from a Windows NT 4.0 client. Navigate to the "Printers" folder - on the Samba server. You should see an initial listing of printers - that matches the printer shares defined on your Samba host.
The initial listing of printers in the Samba host's - Printers folder will have no printer driver assigned to them. - The way assign a driver to a printer is to view the Properties - of the printer and either
Use the "New Driver..." button to install - a new printer driver, or
Select a driver from the popup list of - installed drivers. Initially this list will be empty.
If you wish to install printer drivers for client - operating systems other than "Windows NT x86", you will need - to use the "Sharing" tab of the printer properties dialog.
Assuming you have connected with a root account, you - will also be able modify other printer properties such as - ACLs and device settings using this dialog box.
A few closing comments for this section, it is possible - on a Windows NT print server to have printers - listed in the Printers folder which are not shared. Samba does - not make this distinction. By definition, the only printers of - which Samba is aware are those which are specified as shares in - smb.conf.
Another interesting side note is that Windows NT clients do - not use the SMB printer share, but rather can print directly - to any printer on another Windows NT host using MS-RPC. This - of course assumes that the printing client has the necessary - privileges on the remote host serving the printer. The default - permissions assigned by Windows NT to a printer gives the "Print" - permissions to the "Everyone" well-known group.
One issue that has arisen during the development - phase of Samba 2.2 is the need to support driver downloads for - 100's of printers. Using the Windows NT APW is somewhat - awkward to say the list. If more than one printer are using the - same driver, the rpcclient's - setdriver command can be used to set the driver - associated with an installed driver. The following is example - of how this could be accomplished:
- $ rpcclient pogo -U root%secret -c "enumdrivers" @@ -396,44 +392,185 @@ Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3] [Windows NT x86] Printer Driver Info 1: - Driver Name: [HP LaserJet 4000 Series PS] + Driver Name: [HP LaserJet 4000 Series PS] Printer Driver Info 1: - Driver Name: [HP LaserJet 2100 Series PS] + Driver Name: [HP LaserJet 2100 Series PS] Printer Driver Info 1: - Driver Name: [HP LaserJet 4Si/4SiMX PS] + Driver Name: [HP LaserJet 4Si/4SiMX PS] - $ rpcclient pogo -U root%secret -c "enumprinters" Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3] - flags:[0x800000] - name:[\\POGO\hp-print] - description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,] - comment:[] + flags:[0x800000] + name:[\\POGO\hp-print] + description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,] + comment:[] - $ rpcclient pogo -U root%bleaK.er \ - > -c "setdriver hp-print \"HP LaserJet 4000 Series PS\"" Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3] -Succesfully set hp-print to driver HP LaserJet 4000 Series PS. -
By default, Samba offers all printer shares defined in smb.conf +in the "Printers..." folder. Also existing in this folder is the Windows NT +Add Printer Wizard icon. The APW will be show only if
The connected user is able to successfully + execute an OpenPrinterEx(\\server) with administrative + priviledges (i.e. root or printer admin. +
show + add printer wizard = yes (the default). +
In order to be able to use the APW to successfully add a printer to a Samba +server, the addprinter +command must have a defined value. The program +hook must successfully add the printer to the system (i.e. +/etc/printcap or appropriate files) and +smb.conf if necessary.
When using the APW from a client, if the named printer share does +not exist, smbd will execute the add printer +program and reparse to the smb.conf +to attempt to locate the new printer share. If the share is still not defined, +an error of "Access Denied" is returned to the client. Note that the +add printer program is executed undet the context +of the connected user, not necessarily a root account.
There is a complementing deleteprinter +command for removing entries from the "Printers..." +folder.
Windows NT/2000 print servers associate a port with each printer. These normally +take the form of LPT1:, COM1:, FILE:, etc... Samba must also support the +concept of ports associated with a printer. By default, only one printer port, +named "Samba Printer Port", exists on a system. Samba does not really a port in +order to print, rather it is a requirement of Windows clients.
Note that Samba does not support the concept of "Printer Pooling" internally +either. This is when a logical printer is assigned to multiple ports as +a form of load balancing or fail over.
If you require that multiple ports be defined for some reason, +smb.conf possesses a enumports +command which can be used to define an external program +that generates a listing of ports on a system.
- foreach (supported architecture for a given driver) - { - 1. rpcclient: Get the appropriate upload directory - on the remote server - 2. smbclient: Upload the driver files - 3. rpcclient: Issues an AddPrinterDriver() MS-RPC - } +foreach (supported architecture for a given driver) +{ + 1. rpcclient: Get the appropriate upload directory + on the remote server + 2. smbclient: Upload the driver files + 3. rpcclient: Issues an AddPrinterDriver() MS-RPC +} - 4. rpcclient: Issue an AddPrinterEx() MS-RPC to actually - create the printer -
One of the problems encountered when implementing @@ -615,7 +751,7 @@ CLASS="SECT1" >
If you want to migrate an existing printers.def file into the new setup, the current only +>printers.def + file into the new setup, the current only solution is to use the Windows NT APW to install the NT drivers - and the 9x drivers. This can be scripted using smbclient and - rpcclient. See the smbclient + and rpcclient. See the + Imprints installation client at Imprints insrallation client for an example. +>http://imprints.sourceforge.net/ + for an example.