Windows Terminal Services Printing
When a user logs on to a Windows Terminal Server with the Microsoft Remote Desktop Client, the client sends information about the client’s printers to the Terminal Server. The Terminal Server uses this information to auto-create printers in the user’s session that correlate to the user’s local or network printers. If the name of the client printer driver matches “exactly” that of a printer driver that is installed on the Terminal Server, or is listed in the ntprint.inf (the file that lists the printer drivers that are built-in to the Windows Server installation, and can be loaded on demand) the client printer is successfully auto-created. Print jobs created in the user’s session are routed from the Terminal Server to the associated client printer by way of a virtual channel in the RDP Protocol.
If an exact name match does not exist between the client and Terminal Server printer driver, auto-creation fails and errors 1111 and 1106 are written to the system event log. For this client printer auto-creation to happen, several conditions must exist:
- The Remote Desktop Client (mstsc.exe) must have Printers enabled.
- If users are connecting via the Remote Desktop Web Connection (AKA Tsweb) the following must be set to “true” in the default.htm file.
'Device redirection options
MsRdpClient.AdvancedSettings2.RedirectPrinters = True
- In the Terminal Services Configuration Administrative Tool (tscc.msc) -> Connections -> RDP-Tcp -> Properties, Windows Printer Mapping must not be disabled, and connect client printers at logon should be enabled.
- In the user’s account (Active Directory or Windows Local Security Accounts Manager) -> Environment -> Client Devices, Connect client printers at logon should be enabled.
- In Group Policy, “Do not allow client printer redirection” should not be enabled.
- In the Services Administrative Tool (services.msc), the Print Spooler Service must have a status of “Started”.
- The printer must NOT be a Host-based printer (AKA GDI or Windows-only Printer). Host-based Printers, like Hewlett Packard Printers that utilize LIDIL (Lightweight Imaging Device Interface Language), will not function in a Terminal Services Environment (without 3rd party printing software). Consult with the printer manufacturer to ensure that the printer can operate with a PCL or PostScript Driver.
- The Printer Driver on the Terminal Server must not use a printer monitor, i.e. the printer utility that is loaded in the Notification Area of the user’s Windows Desktop with many economy printers. These printer drivers are not designed to work in multi-user environments like Windows Terminal Services.
Without using 3rd party printing programs, the following lists the type of printer drivers that can be used on a Windows Terminal Server, in order of preference from most preferred to not preferred:
- Windows Built-in PCL or PS Drivers – Version “Windows 2000, Windows XP and Windows Server 2003”
- WHQL (Windows Hardware Quality Labs) Signed Drivers – include the “Designed for Windows” Logo
- PCL or PS Drivers – certified (by the Manufacturer) for use on Windows Terminal Services or Citrix
- Windows Built-in PCL6 Drivers – Version “Windows 2000, Windows XP and Windows Server 2003”
- Manufacturer’s PCL or PS Drivers – Version “Windows 2000, Windows XP and Windows Server 2003”
- Manufacturer’s PCL6 – Version “Windows 2000, Windows XP and Windows Server 2003”
- Manufacturer’s PCL or PS Kernel Mode Drivers – Version NT4
The printer drivers which are installed on a Windows Server can be determined via the Printers and Faxes Control Panel Applet -> File -> Server Properties -> Drivers.
Printer Drivers that use Windows NT 4.0 Drivers are referred to as “Kernel Mode Drivers”. These drivers should be avoided, as when they fail a Bug Check (AKA “Blue Screen of Death” or Stop Error) will occur, causing the server to reboot.
The installation of these drivers can be prevented via the following policy.
Version Specific Enhancements:
- Windows 2000 Server SP2 – Previous to 2000 SP2, one could edit the ntprint.inf to alter the client printer auto-creation process. With 2000 Server SP2 and higher, the ntprint.inf is digitally signed by Microsoft and cannot be manually altered. To support OEM (Original Equipment Manufacturer) printers not listed in the ntprint.inf (and not installed on the Terminal Server) one can create a substitute, user defined inf file. This allows one to tell the Terminal Server to auto-create specific client printers (based on the name of the client printer driver) with built-in Windows Printer Drivers listed in the ntprint.inf.
The following registry keys must be created on the Terminal Server:
Data: Name of the .inf file to which you want to redirect lookups.
Data: Name of the section in the .inf file to which you want to redirect lookups.
The following is the format of the user defined inf file:
"OEM Printer Driver Name" = "Windows 2000 Printer Driver Name"
“HP LaserJet 4200 Series” = “HP LaserJet 4 Plus”
Microsoft has since released the “Terminal Server Printer Redirection Tool” to automate the creation of the registry entries and inf file.
- Remote Desktop Client 5.2.3790 – This version of the Microsoft Remote Desktop Client (released with Windows Server 2003) and newer support client network printers.
- Windows Server 2003 SP1 – This version of Windows Server and newer include the “Terminal Server Fallback Printer Driver”, which can be enabled via policy at Computer Configuration -> Administrative Templates -> Windows Components -> Terminal Services -> Client/Server Data Redirection (or via script).
The Terminal Services Fallback Printer Driver allows for the system to connect printers without installing additional Server Side Printer Drivers. The Policy can be set to auto-create unsupported printers using a Fallback PCL or Fallback PS Drivers. The fallback drivers provide only basic functionality and will not work with all printers.
The picture below displays four printers auto-created with the PCL Fallback Printer Driver.
By looking at the properties of the client printer, auto-created with the Fallback PCL Driver, one will notice that the driver used is the HP DeskJet 500 Driver.
Microsoft provides a mechanism to set the driver that is used for the Terminal Server Fallback PCL and PS Printers. To alter the default behavior, one can alter the following registry key and enter the desired printer driver.
"FallbackPclDriver"="HP DeskJet 550C"
"FallbackPsDriver"="HP Color LaserJet 5/5M PS"
Although it is possible to provide a stable printing environment for Terminal Server Users, this is only possible by limiting the number and type of installed printer drivers, as well as the type of printers being used.
In organizations with a large user population, more than one terminal server, and the requirement to support any type of printer, it is usually worth investing in a Universal Printer Driver, or a product suite that includes a Universal Printer Driver. Use of a Universal Printer Driver can reduce or completely eliminate the need to install other printer drivers on each terminal server.
Universal Printer Drivers:
- Ingenica UniPrint Server
- Provision Networks Print-IT
- ThinPrint .Print Server Engine
- triCerat Simplify Printing
Product Suites that include Universal Printer Drivers:
- Citrix Presentation Server 4.x
- ProPalms TSE (includes UniPrint Server)
- Provision Management Framework Standard and Enterprise (include Print-IT)