| If you have any experience with Terminal Services you will know that printing is one of the most finicky of all the subsystems and requires the most care and loving. In the following sections, I will try to explain how I recommend building a printer subsystem for optimum performance and bandwidth utilization. In order to build a stable printing environment you must set up the following items. 1. Gather a list of printers that you will be expected to maintian and set the expectation that any addiotional printers will require addional administration. (This should have been done during the Analysis phase) 2. Setup the print enviorment. Configure the Printer Management Properties Configure the Network Print Servers and assign users to printers. 3. Create printer compatibility driver mappings How to manually add printer driver mappings How to import a WTSUPRN.INF file 4. Create a Citrix Policy to take advantage of autocreated printers and one that does not. 5. Set Printer Bandwidth for client auto-created printers. 6. How to be proactive in maintaining driver mappings During the infrastructure assessment, you should have gathered a list of supported printers. This is very important because you will take this list and add compatibility mappings and you will be setting the expectation that those will be the printers that will be supported on go-live day and any additional printers might need additional configuration. You will also want to present this list to your customer and verify that it is accurate. MetaFrame adds some killer features to aid you in building a stable print environment. Now that you have a list of support printers and have explained to the customer that any additional printers might need additional configuration, you are ready to setup your print environment. The first thing you will want to configure is how MetaFrame will deal with the automatic creation of client printers and the use of Native Drivers and Universal Print Driver (UPD). These options are broken down in to two sections; Client Print Connections and Printer Driver Configuring Client Printer Connections: You can use the Auto-Create Client Printer Connections at Login option to allow client printers to be automatically created when users log on to ICA sessions. This option is selected by default. If you clear this option, no client printers are automatically created although users can set up connections to client printers manually.  When Auto-Create Client Printer Connections at Login is selected, you can configure how the printers work using the following options: Update printer properties at each logon. Select this option to update client printers on the server using settings from printers on the clients. The client printers are updated when users log on. Do not select this option if you want to retain changes made during ICA sessions to client printers on the server. Inherit client printer's setting for keeping printed documents. Select this option to use the client printer setting, Keep printed documents, on auto created client printers. The setting determines if printed jobs are saved after users log off from ICA sessions. Saving printed jobs can take a lot of space. Delete pending print jobs at logout. Select this option to delete pending print jobs when a user logs off. Do not select this option if you want users to see print jobs from prior ICA sessions when they log on. The following options control which printers are auto-created. By default, Use connection settings for each server is selected.  Default client printer only: This option specifies that only the printer specified as the default printer on each client device is auto-created. Local (non-network) client printers only: This option specifies that only printers that are directly connected to LPT, COM, on the client device and configured for the current user are auto-created. In order to cut down on unnecessary printer bandwidth this is the option I recommend. All client printers: This option specifies that all client printers that are configured for the user are auto-created. Use connection settings for each server: This option specifies that client printers are auto-created according to the printer auto-creation option that is specified in the Citrix Connection Configuration Client Printers box for the ICA session. The following defines if the auto-created printer properties will be updated at each logon.  Network printers assigned to users can be updated when the users log on. To update network printers with the printing preferences assigned to the printer through the console, select Update printer properties at each logon in Auto-Created Network Printers. Do not select this option if you want to retain changes made by users to their network printer settings during ICA sessions. Configuring Drivers Tab: When client printers are auto-created, you can specify whether they use native printer drivers (which must be installed on the server) or the Universal Print Driver feature by selecting from the following options:  Native Drivers Only: This option disables the Universal Print Driver feature. All client printers are auto-created if the native drivers are installed on MetaFrame XP servers. Universal Driver Only: This option enables the Universal Print Driver feature and auto-creates client printers with the Citrix PCL4 Universal Driver on the server. Select this option if you want all client printing to use the Citrix Universal Print Driver feature. Universal Driver Only if Native Driver Unavailable: This is the default option. It specifies that client printers are auto-created with the native driver for each printer, if it is available. If the driver is not available on the server, the client printer is auto-created with the Citrix PCL4 Universal Driver. This is the option I recommend in order to guarantee a client can print when all else fails. Both Universal and Native Drivers: This option specifies that two versions of each client printer are auto-created: one with the Citrix PCL4 Universal Driver and the other with the printers native driver (if it is installed on the server). The following explains how I recommend configuring MetaFrame for optimal performance while guaranteeing a printer when all else fails. 1. Open the Citrix Management Console and right click on Printer Management Click Properties  2. In the Auto-Create the client print devices section click the Local (non-network) client printers only radio button.  3. Click the Drivers tab and verify the the Use Universal driver only if native driver is unavailable radio button and click OK.  You are now ready to configure any network printer you will want to use during a MetaFrame session. Now that we have configured MetaFrame to auto-create only local printer we will need to configure MetaFrame to auto-create network drives. To make network printers available to ICA Client users, you import network print servers into the MetaFrame XP server farm. Doing this lets you specify on a user / group basis which printers are available. The following explains how to import a Microsoft print server and assign a user to have a printer device auto-created. 1. Open the Citrix Management Cosole and right click on Printer Management Click Import Network Print Server.  2. You are now prompted to import a print server. In the server text box, enter the name of a Microsoft print server on your network. You are also prompted to enter a user account that has print administrator to access to the selected print server. Click OK  3. Double click the Printers icon located in the contents tab.  4. You are now prompted with the printers that have been imported in to the MetaFrame IMA database.  5. Right click on the printer you want to assign to a user or group and click Auto-Creation.  6. You are now prompted to select the user(s) and or group(s) that will have the select network printer auto-created during logon. Click OK.  22. 2. 3 How to Configure Autocreation of Client Printers on a User / Group basis With the release of MetaFrame XP with Feature Release 2, Citrix has given you the ability to assign autocreation of local client printers on a user and or group basis. This is the mechanism that I recommend you use. By default, automatic local printer mapping is enabled, so we will need to create a policy to disable it and add the appropriate user and group accounts. The following defines how to create a Citrix policy to disable autocreation of local client printers. 1. Create a specific user global group to Disable Clinet Printer Mapping. i.e., Disable Client Printer Mapping. 2. Open the Citrix Management Console, right click on Policies and click Create Policy. 3. Enter a name for the new policy. I recommend something like Disable Client Printer Mapping. Click OK when finish. 4. Right click on the newly created policy and click Properties. 5. Click to select the Rule Enabled radio button to turn off client printer mapping. Click OK when finished.  6. Right click on the policy created in the above steps and click Assign Users. 8. Select the the user group created in step 1 and click OK when finished. You have now successfully created a Citrix policy to disable autocreation of end-user local printers. If you want to disable the autocreation of local printers to a user or group, all you will need to is add their users and or group to the Disable Client Printer Mapping global group. The following problem is frequently encountered. Customers set up a policy to restrict all users from accessing the Printers folder or they decide to allow users to access only published applications. They also may want to prevent users from auto-creating printers. They want to create a single network printer on the MetaFrame server that all users can see in the printer drop down-list from within the application. When the network printer is selected in the Add Printer wizard, the printer is available only for the user who created the printer. A workaround for the above problem is to either assign a printer to all the Everyone group, as described in the previous section. If you are not able to import printers then the following describes how to create a network printer for all the users that log on to that selected server. 1. From the MetaFrame server where you want to install the printer, click Start click Settings click Printers double-click the Add Printer icon.  2. Click Next.  3. Click the Local printer radio button and uncheck the Automattically detect and install my Plug and Play printer checkbox. Click Next.  4. Click the Create a new port radio button and choose Local Port from the drop-down box.. Click Next.  5. The Portal Name dialog box will pop up requesting the UNC name of the printer you want to create for all users. Enter the UNC name and click Next.  6. You are now prompted to select the printer maufacture and printer type. Select the printer type and click Next. Note: I highly recommend sticking with the print drivers located on either Windows Terminal Server 4.0 or Windows 2000 Terminal Services and only install third party drives in production if you have already tested them to be stable and funtional)  7. Enter the friendly name of the printer and select whether or not you want it to be their default printer and click Next.  8. Click the Do not share this printer radio button and click Next.  9. You are now prompted whether or not you would like to print a test page.I recommend you select Yes and then attatch the test print to the finial delevable. This also guarentees to the customer that the printer was working at implementation time. Click the Yes Radio button and click Next.  10. Verify the configuration data is accurate and and click Finish.  Now that we have set the environment, we need to create compatibility mappings for all the printers that will need to be supported. Mapping of printer drivers refers to identifying printer drivers for the same printer that have different names on different client platforms. You need to use mapping if the printer drivers you will be using on MetaFrame XP servers have different names than the drivers used by client computers. The corresponding printer driver for the client printer must be loaded on the server. The driver names must match exactly, otherwise the printer will not map. With Windows NT Workstation / 2000 as the client machine, this is not really an issue. Windows NT Workstation / 2000 and Windows 2000 Server both use standard NT driver naming conventions. The issue is more common with Windows 95, 98 and Me client machines. The driver names will occasionally differ slightly between Windows NT and Windows 9x thus causing the printer to fail in being auto-created. As an example, you might have the following driver name on your Windows 95 client machine: HP LaserJet 4/4MP. When you install the same driver on MetaFrame XP Server, the driver name may appear as HP LaserJet 4. Absence of the /4MP portion of the driver name will mean this printer will not be mapped. Thus, you need to create a compatibility mapping in the Citrix Management Console to create the relationship between the two drivers. During installation, the data store imports printer driver mappings from the Wtsuprn.txt or wtsprnt.inf files on the server. If duplicate mappings are found, they are not written to the data store. You can use Citrix Management Console to manage printer driver mapping for the server farm. During startup of the IMA service, the Wtsprnt.inf file for all servers in the farm is populated from the mapping information stored in the data store. If the file does not exist, the IMA service creates it. If the file exists, it is overwritten with the mapping information contained in the data store. Manual imports of existing Wtsuprn.txt or Wtsprnt.inf files can be performed using the qprinter command. For more information, see How to manually import an existing wtsuprn.inf file The following explains how to add driver compatibility mapping through the Citrix Management Console. 1. Click Start Click Programs Click Citrix Click Citrix Management Console 2. Enter an admintrator account and click OK. 3. Double Click on Printer Management Click Drivers Click the Mappings button (as shown below)  4. The Driver Mapping dialog box opens (as shown below). Click Add  5. The Add Mappings dialog box opens asking for a Client Driver and Server Driver. Enter the Client Drivers name as listed in the client printer properties sheet on the clients local machine. 6. Enter the Server Driver you want to map the client printer to. Note: An example WTSPRNT.INF file is listed later in this chapter.  7. Click OK 8. Repeat to configure additional compatibility mappings. You have now succesfully added a Printer Driver Mapping. Have the user log on and verify the printer autocreates. When migrating from MetaFrame 1.8 and or to save time, you might want to import client printer driving mappings from a WTSUPRN.INF file. To accomplish this task Citrix developed the QPRINTER.EXE command line utility. In testing, I have found that this tool only works if the MappingFileName is named WTSUPRN.INF and it is stored in the %systemroot%/system32 directory. It must follow the WTSUPRN.INF format. Another pitfall is that it will only support a file with 256 characters that are imported, before it will error and cause the IMA service to fail. I recommend to remark out (;) all but ten lines per import and to then to remark out (;) all but the next ten until you are finished. In order to import the printer driver file from the command line type: C:> qprinter /IMPRMAPPING C:WTSUPRN.INF Note: If for any reason, you receive an error you will need to manually start the IMA service. QPRINTER.EXE Command Line Arguments: | C:>qprinter /? Display information about printers in server farm. QPRINTER [/REPLICA] [/IMPRMAPPING MappingFileName] /REPLICA -- Display information about printer replication queue /IMPRMAPPING MappingFileName -- Import printer mapping from file. MappingFileName should not contain quotation marks and can not have more than 256 characters | Note: QSERVER.EXE is not installed by default. It can be located on the MetaFrame XP with Feature Release 2 Server CD in the \support\debug\i386 folder. In keeping with the goal of setting up a print system optimized for optimum bandwidth, we will want to set the Printer bandwidth feature. When users access MetaFrame XP servers through slower networks or dial-up connections, data sent during printing can affect video updates and application performance. To achieve the best performance for some ICA Client users, you can limit the bandwidth used by local auto-created printers utilizing the ICA data stream. Remember that by default, the client printer bandwidth is set to unlimited during your initial set up. By limiting the data transmission rate for printing, you make more bandwidth available in the ICA data stream for transmission of video, keystrokes, and mouse data. More available bandwidth can help prevent degradation of the user experience during printing and keep with the goal of a high user perception of performance. With the release of Feature Release 2 and Policies, Citrix has given us the ability to configure printer bandwidth usage of a user or group basis. I highly recommend using it. I recommend creating a Citrix policies to limit the bandwidth used by printers and then assign users and or accordantly. The following details how I recommend setting up printer bandwidth limit on a per user basis. 1. Open the Citrix Citrix Management Cosole, right click on Policies Click Create Policy. 2. Enter a name for the new policy. I recommend something like, Limit Printer Bandwidth. Click OK. 3. Right Click on the policy created above and click Properties. 4. Open the Resource Limits folder click the Limit the Client Printer Bandwidth policy click to select the Rule Disabled radio button and click OK.  5. You how sucessfully created a policy and are ready to assign users and or groups to them. Right click on the policy you created in the preveious seps and click Assign Users. 6. Select the user group created in step 1 and click OK. You have now successfully created a Citrix policy to limit the amount bandwidth that auto-created ICA printers can utilize on a user and or group basis. If you would like to limit the amount of ICA bandwidth the printing can take up then all you will need to do is add their users and or group to the Limit Printer Bandwidth global group. I have always liked to be proactive instead of reactive! I liked it when my customers would call me to report a user that was not able to print and I would have already known and made the change. This really looks good and gives your customers positive feeling about the services they are paying for. Not to mention I firmly believe if you get a call from a customer telling you that they cant print then you have not done you job. You need to set make sure you set the proper expectation that printers not found on the List of Supported Printers will require additional configuration. My favorite feature of MetaFrame XP is that it logs failed auto-created printers to the Application Log on the MetaFrame server that the auto-creation failed. The following explains how to extrapolate the pertinent information you will need to add a compatibility drive mapping and or a terminal services compatible native driver. 1. Open the Event Viewer on a MetaFrame server and open the Application Log. You will want to browse through the log and look for failed MetaFrameEvents messages.  2. Double click on the event to open the Event Properties box. In the description box, you will be presented with the following information that will be useful in presenting failed auto-creation and for notifying the user(s) in question that the problem has been solved. Client Name: This is the user who experienced the failed auto-creation (DABCC-demo). After adding an appropriate compatibility mapping, you might want to notify the user that you have solved the problem. Just by sending a simple email, you will go miles in setting the perception that you are doing your job. Printer: This is the UNC path to the printer that failed to auto-create (Client\DABCC-demo#\Napa01) Printer Driver: This is the client printer driver name that tried to map to a server driver. This is the name you will want to associate with a server driver name. Now that you have this information, you will want to setup a printer compatibility mapping as shown earlier in the document. The following is a screen shot of a failed auto-created printer:  Project Compatibility was designed to address the manual process of creating compatibility print driver mappings.  The principles behind Project Compatibility are, simply put, to grab a list of MetaFrame servers then parse through their logs to find failed printer drivers and present those drivers to the administrator to take action against. From this core philosophy Ive added a few other features and logic to account for every circumstance that I can think of. The following is the work flow and logic behind Project Compatibility. The first time you launch Project Compatibility you will need to set the configuration options. You will be required to enter a Windows 2000 and NT 4.0 TSE print driver database file. Project Compatibilitys logic will communicate with a MetaFrame XP with Feature Release 2 server through the MetaFrameCOM service (MFCOM) to enumerate the list of the MetaFrame XP servers in the farm and what platform (Windows 2000 or Windows NT TSE) they are running on. This information is saved in memory and then written to the INI file for future use. (Default location: \Program Files\DABCC.COM\PC1\PC1CONFIG.INI) Project Compatibility then loads as if it would in future loads. Once you have configured the configuration options, Project Compatibility will load pc1config.ini and store the configurations in memory. Now that it knows what servers are in the farm it will parse through their application event logs for failed autocreated printers. (Event IDs 1006 for Windows 2000 and 1003 for Windows NT 4.0 TSE) If it finds one, it will verify that it is not a duplicate failed driver on a particular platform and if it passes, it is saved to a list with other failed drivers along with the date of the failed event and the OS platform. Once Project Compatibility has finished parsing all the MetaFrame servers event logs it will need to compare them against the following: q If the failed driver was removed from the displayed list by the administrator, then it will be prevented from being displayed in the list of working failed drivers. This function is not specific to the OS platform of the failed driver. q If the failed driver already has an IMA mapping and the mapping was made after the date of the failed driver then it will be prevented from being displayed in the list of working drivers. This function is specific to the OS platform of the failed driver. q If the failed driver already has an IMA mapping but the mapping was made before the date of the failed driver then it will be displayed in the list of failed driver with a specific icon stating that. This function is specific to the OS platform of the failed driver. Once Project Compatibility is finished with the list of the working drivers it will compare each driver to the suggested driver databases and present the failed driver and associated suggested drivers to the administrator in the Project Compatibilitys graphical users interface (GUI) for the administrator to take action against. System Requirements: The following describes the minimum configurations and requirements for installing and operating Project Compatibility 1.0. At least one Citrix MetaFrame XP with Feature Release 2 server in the Farm. Note: As it stands today, Project Compatibility requires to be run from a MetaFrame XP with Feature Release 2 server. Project Compatibility uses the MetaFrameCOM SDK to interface with the MetaFrame XP Independent Management Architecture (IMA) and the printer objects that are used are new procedures added to the FR2 version of MF SDK so FR2 is also a requirement. In the future I will be releasing a version that will run stand alone with help from mfreg.exe. The MetaFrame XP Farm must be running in Native Mode. Microsoft .NET Framework installed on the MetaFrame Server that Project Compatibility will be installed on and run from. Project Compatibility administrators need to have full administration access to the Citrix Management Console. Requires Internet access for use with the auto database update feature. (optional) For more information I have create a Project Compatibility Administrators Guide. To download Project Compatibility please visit: http://www.dabcc.com/pc. For one reason or another, you might need to manually connect a client printer during a Citrix Session. This is accomplished through the ICA Client Printer Configuration utility. The ICA Client Printer Configuration utility is a tool that allows users to control the creation, deletion, connection and disconnection of ICA client printers in a session. The utility is used by client machines that do not have a native Windows Print Manager, such as the ICA DOS client. The ICA Client Printer Configuration utility must be run from inside an ICA session. If you are not delivering a full client desktop, I highly recommend publishing the ICA Client Printer Configuration utility, in case a user needs it. Creating a new client printer To create a new printer with the utility, select the Printer New option from the menu, or press the Insert key. This brings up the Add ICA Client Printer Wizard, which uses dialog boxes to prompt the user for a printer type (driver name), the client port to which the printer is connected and a name to use for the printer. These dialog boxes are similar to the ones used when adding a printer on a Windows 95 or Windows NT workstation. Once all of this information is obtained, the utility will send a request for information on the printer properties and any information necessary for creating the printer. On a DOS machine, this information is written to the printer.ini file, so when this client connects again, the printer is created in the ICA session.  |