Samba expert Jerry Carter digs into some of the details of Samba's printing architecture.
By Jerry Carter
In this article, I would like to dig into some of the details Samba's printing architecture. Figure 1 gives a general overview, and this is where we will start.
Samba's printing architecture
First, it should be noted that Samba does not provide printing support itself. Samba can be viewed as a spooling application that hands off jobs to the underlying printing subsystem. This can be best summed up as Samba's printing philosophy: "If Unix can print to it, so can I." This part of Samba's printing support has not changed. What has changed is the means by which a Microsoft (or SMB) client can access printers shared by Samba. In versions prior to 2.2.0, the most advanced Microsoft printing implementation that Samba supported was the LanMan printing calls (the LanMan printing system is actually the second of three such systems MS implemented). However, with its latest release, Samba will be capable of supporting the MS-RPC printing functions used by Windows NT clients. This means that Samba will be capable of supporting printer driver downloads for Windows NT/2000 clients, a welcome feature by many users.
In addition to this new printing support, new means of printer driver management support the installation of printer drivers to Samba servers remotely via the Windows NT Add Printer Wizard (APW) (see Figure 2). Before 2.2.0, administrators were forced to munge through driver INF files and manually copy the necessary files to the server and then could still only support this functionality for Windows 95/98 clients.
The Windows NT 4.0 Add Printer Wizard
By supporting the Windows NT APW, some new smb.conf parameters have been added, and a few others are being removed. The concept of sharing a printer on a Windows NT host is solely for the support of non-NT clients such as Windows 9x. Windows NT clients can print directly to a printer served by another Windows NT host via MS-RPC. Thus, it is perfectly acceptable to have a printer on an NT box that can be accessed from NT clients but not Windows 9x clients. This is not the case in Samba because the only printers of which Samba is aware are, by definition, shared. More information on configuring the new printing functionality in Samba 2.2.0 can be found in the PRINTER_DRIVER2.txt HOWTO included in the docs/textdocs/ directory of the Samba distribution.
To support the remote addition and deletion of printers, two new parameters have been added to Samba's smb.conf:
- add printer command
- delete printer command
These two global parameters specify programs that can be used to add new printer shares or remove existing ones. Because this involves modify the smb.conf file, all file operations are done as the connected user and require the appropriate permissions on the configuration file. If the connected user does not have the necessary permissions, Samba returns an "Access Denied" error message. Due to the extremely site specific nature of adding printers, you will have to create these scripts yourself, much like the password program parameter. However, example scripts have been included with the Samba distribution to help get you started.
The consolidation of printer driver management functions in Samba has led to the decision to remove the following functions. These will be removed in Samba 3.0 (and possibly sooner).
- printer driver file (G)
- printer driver (S)
- printer driver location (S)
The difficult part is to describe a migration path from Samba's previous driver download support to the new configuration under 2.2.0. The PRINTER_DRIVER2.txt file goes into this in more depth, but to quickly summarize, take a look at this list:
- If you do not desire to use the new Windows NT functionality, you do not need to change any configuration parameters. Everything should work as it did previously.
- If you wish to use the new functionality for Windows NT clients, but not for Windows 9x clients, then you should upload only NT printer drivers using the Windows NT APW.
- If you wish to migrate the existing Windows 9x drivers to the new Windows NT style configuration, you will need to manually re-add the drivers to Samba 2.2.0 server (including Windows NT drivers).
Gerald Carter has been a member of the SAMBA Team since 1998, and he is employed by VA Linux Systems. He is currently working with O'Reilly Publishing on a guide to LDAP for system administrators. He holds a master's degree in computer science from Auburn University, where he was also previously employed as a network and systems administrator. Gerald has published articles with various Web based magazines, such as Linuxworld, and has authored instructional course for companies such as Linuxcare. In addition, he acted as the lead author of Teach Yourself Samba in 24 Hours (Sams Publishing, 2000), and he actively gives tutorials at systems administration conferences.
During his spare time, Gerald enjoys running, hiking, playing music, and bible study. He resides with his beautiful wife of seven years in Dadeville, Alabama.