Managing Printer Drivers
Still one of the greatest challenges in Terminal Server environments are printer drivers. In this article I will describe how you can manage your printer drivers in such a way you can beat the challenge.
In the support forums you can easily see that one the biggest challenges in a Terminal Server infrastructure is printing. There are many many questions about why users cannot print, blue screens on the servers and so on. In the article Can Third Party Software solve your Terminal Server Printing problems I already described in detail why the challenges are there, but here is a recap of the main reasons:
- Printer drivers are not written to be used on Terminal Servers;
- Print jobs use a lot of bandwidth
- Version conflicts by third party drivers
- All printer drivers need to be available on all Terminal Servers.
Therefore a couple of manufacturers developed a Universal Printer Driver solution. Microsoft Fallback driver, Citrix Universal Driver and equivalent solutions by the other SBC product suppliers can be used if you are using the auto created client printing method, but cannot be used for network printers. For network printers there are various software solutions like Uniprint, Thinprint or Provision Print-IT.
But, other than budgetary reasons, these universal network print solutions cannot always be used because the physical printer or application does not support the usage of a universal driver. In other words, on almost every Terminal Server environment native drivers need to be available, independently of which solutions have been chosen.
Native driver rules
Because the native drivers need to be used often it is good to use the rules below with implementing them.
Do not use Kernel drivers
Within Windows 2003 Microsoft moved printer drivers from the kernel to the User mode. Of course this was a good move by Microsoft. If a printer driver is failing it will not cause a blue screen anymore. Although there are not many kernel drivers you should definitely check if the driver is a so called version 3 (usermode) drivers. Definitely do not install or support version 2 drivers anymore on your environment. See the article Surviving Printing by Stefan Vermeulen for more information about recognizing version 2 drivers.
Use only certified drivers
Although this is a valid rule one big note should be made about this "certified story". Neither Microsoft nor Citrix officially certify printers for use on a Terminal Server. If a manufacturer is using this term it actually means that they tested their driver in a Terminal Server environment. This gives you a little more security that the driver will function normally in your environment and should always be a rule to accept a new printer (driver). If the manufacturer does not mention that they have a certified or supported driver do not implement that one.
From personal experience I would also suggest using a driver supplied by the manufacturer instead of the default driver included within the Operating System. You get more support from your supplier and I noticed that Windows drivers regularly do not support all printer options.
Keep the amount of drivers low
Although you should add native drivers if necessary, try to limit the amount of drivers. This can be done by using the same driver for several printer types. Often the changes to the several printer types are marginal like the HP Laserjet 4xxx series. The different series works perfectly using a driver of a previous version. For example the HP Laserjet 4250 works fine using a HP Laserjet 4100 driver. A second possibility is checking the real manufacturer of the printer. Lots of printers use the same internal parts, but only the outside is little bit different. For example Ricoh manufactures for several printer suppliers. Often those printers use the same driver, because the base driver in the package is delivered by Ricoh. HP now also has a universal printer driver available, which supports almost all their printers. It is a good way to limit the amount of drivers, but please note that some people experience that some options are not supported. Nevertheless this looks like a promising solution if you are using lots of HP printers. For more information about the HP Universal Driver see my review on VanBragt.Net SBC Centre.
Create a supported list of printers
If your IT Department does not have the control of purchasing the printers, you should definitely create a list of supported printers. In this list you should only mention printers that you can guarantee work perfectly within your environment. Of course you should keep the list up to date with new models, which you have tested and passed judgement on. In this way you can also keep the amount of drivers low.
Do not allow RDP auto created printer (if using Citrix Presentation Server)
This rule is one of the most important rules. The RDP Client is by default enabled in auto created client printers. Often administrators use this client to connect to the Terminal Servers for system management purposes. Because of the administrator rights the drivers which are locally available will be installed to support the auto created client printing functionally within the RDP protocol. Disable the support of this feature using a GPO policy.
Prevent normal users from adding printer drivers
Also prevent users from adding printer drivers. When using Citrix Presentation Server configure Citrix policies to use the universal printer driver if the native driver is unavailable (with auto created client printer) or make sure that the drivers on the print server, client and Terminal Servers are exactly the same.
Manage the drivers
Now you have followed all the rules it is time to manage the drivers. As you probably all know, one of the basic TS concepts is keeping your servers 100% identical. In this way users always experience the same behavior when using their applications. For printer drivers the same concept is valid. If the drivers and driver settings are exactly the same on all your servers, the user print experiences are always identical. Citrix has a replicate function within the Citrix Management Console, but from practical experiences this is not the most reliable component. But with an easy script you can arrange this yourself. All drivers (information) are stored in one folder and two registry keys, so with an easy delete and copy command you can replicate the drivers and settings. What is needed is a driver package, which stores all the drivers for your environment.
To accomplish this use a empty Terminal Server (only with the operating system possibly with Citrix Presentation Server) to install all the needed drivers on it.
After installation create the driver package by copying all files out of the folder %SYSTEMROOT%\system32\spool and export the registry keys [HKLM]\System\CurrentControlSet\Control\Print\Environments and [HKLM]\System\CurrentControlSet\Control\Print\Monitors. The last step is to check if the driver created a INF file into %systemroot%\INF. If so, a copy is needed of these files and the corresponding PNF files. This puts together your driver package; store this on a file share. In a document you will create a script that replicates the drivers on your server with this driver package, with a short explanation. Start this script every time the server is restarted (tip: use the Windows Scheduler with the startup function).
If an additional driver is necessary, use a clean server again, implement the driver package and install your additional driver and repeat the steps mentioned above.
In this article we first came to the conclusion that native drivers are needed on your server. Secondly we created a list of rules for printer drivers for easy implementation and maintenance. The last step is to ensure that all the drivers are 100% identical on all the servers using a simple script and driver package.
Store the folder %SYSTEMROOT%\system32\spool on \\FILSERVER\SHARE\printerdriver\spool
Store the .INF and .PNF files on \\FILSERVER\SHARE\printerdriver\INF
Store the registry export of [HKLM]\System\CurrentControlSet\Control\Print\Environments as printerdrivers.reg on \\FILSERVER\SHARE\printerdriver\REG.
Store the registry export of [HKLM]\System\CurrentControlSet\Control\Print\Monitors as monitors.reg on \\FILSERVER\SHARE\printerdriver\REG.
Implement the following script at start-up of your Terminal Server.
:: Disable Logons
:: SET PATH
:: Wait 30 second to get the printer spooler services started (or put the services on manual).
:: Stop Print Spooler and corresponding services
:: Remove the printer registry keys
::Remove all printer drivers from the spool directory
:: Import driverpackage registry keys
:: Replicate the printerdrivers
:: Start the print services (again)
NET START "Citrix Print Manager Service"
:: Enable Logons
:: End of script