Citrix Printing

Some discovered information on how Citrix prints (that is, when it actually prints at all…)

Citrix performs “automatic printer creation” for ICA client sessions. When a client uses ICA to connect, the Citrix server creates a “local” printer that points back down the ICA pipe to the client’s locally defined printers. The Server must have a driver which matches the client’s. If I have a Canon IR2300 printer defined locally, the Citrix server must have this same driver loaded and ready. Applications on the server will format print jobs using it’s own driver, and then send them back to the client.

Exceptions to this client/server driver 1:1 driver mapping can be made in the wtsuprn.inf file:
%System Root%system32wtsuprn.txt
Here, you can assign specific driver names to a different driver already present on the server. Most commonly, we map printers to a relatively generic PCL driver such as the HP LJ 4000 or LJ4. This is a Good Thing, because it allows the sysadmin to avoid loading untested/unstable drivers (think “Savin”) on the terminal server.

Unfortunately, this does not always work. Some printers, such as most Savin printers we have worked with, simply refuse to map, and they do not even have the courtesy of logging errors on client connect.

Citrix recommends using the “Universal Printer Driver” for troublesome printers. Unfortunately, the UPD is not available under MetaFrame 1.8 (which is what we are using). So, the short answer to the question “why is my Savin printer not working with Citrix” is “because it is not supported”.

Additional discoveries:
You can see which printers were autogenerated for a client by looking in the registry.
shows all of the printers mapped for a currently logged-in user. Note that reg keys are loaded at user login time.
You can determine a user SID by issuing the following command line:
dsquery user -samid | dsget user -sid

If you want to see the user hive for a non-logged in user, you will have to import it from:
:Documents and Settings\USER.DAT