Impresión en Terminal Server 2003

Si bien el componente de Terminal Server, para Windows 2000 Server o Windows Server 2003 es una excelente herramienta, puede darnos mas de un dolor de cabeza a la hora de imprimir. Veamos como funciona la impresión en entornos Terminal Server y la resolución a los problemas más comunes.

Como funciona?

En un escenario típico tendríamos un Server y un Cliente, cuando el cliente RDP se conecta al Server, al iniciarse la sesión, prepara el entorno del usuario, variables, etc y además el Server vía canales RDP descubre las impresoras que el cliente tiene configuradas en su sistema.
A través de la información de modelo y tipo de impresora, el Server intenta crear en la sesión de Terminal del usuario una Impresora similar utilizando el mismo driver y luego vincularla con la impresora descubierta en el cliente.

A simple vista parece simple pero hay detalles a tener en cuenta

Caso particular es que el driver de la impresora cliente, no este instalado en el Server, con lo cual debemos instalarlo y tener en cuenta  que para que esto funcione correctamente una de las reglas es que el nombre del driver en el cliente y en el Server deben ser "iguales" y en el caso de que el nombre de driver en el cliente y Server sean distintos  fallara la creación de la impresora en la sesión del usuario y no podrá imprimir

Esto lo podemos ver en el visor de eventos con el ID

Error 1111 Driver <drivername> required for printer <printertype> is unknown. Contact the administrator to install the driver before you log in again.
Error 1105 Printer security information for the printername>/<clientcomputername>/Session <number> could not be set.
Error 1106 The printer could not be installed.

Los problemas comunes y sus soluciones

Si el driver de la impresora cliente no esta instalado en el Server

Debemos buscar una versión para Windows Server 2003 o 2000 e instalarlo.
La instalación se debe hacer desde, panel de control, impresoras, ir al menú archivo, propiedades del Server, y en la ficha controladores. Ahí debemos agregar el driver de la impresora.
Para asegurarnos la compatibilidad en nuestros servidores debemos tomar en cuenta que existen dos versiones de drives de impresión

Modo Kernel
Son driver que están diseñados para Windows NT 4.0 y que pueden producir caídas en el Server tipo "blue screen", obviamente hay que tratar de evitarlos

Codigo de las caidas concidas por este tipo de drivers

  • 0xA - IRQL_NOT_LESS_OR_EQUAL
  • 0x50 - PAGE_FAULT_IN_NONPAGED_AREA
  • 0xBE - ATTEMPTED_WRITE_TO_READONLY_MEMORY
  • 0xC1 - SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION
  • 0xC4 - DRIVER_VERIFIER_DETECTED_VIOLATION
  • 0xC6 - DRIVER_CAUGHT_MODIFYING_FREED_POOL
  • 0xC7 - TIMER_OR_DPC_INVALID

• 0xC9 - DRIVER_VERIFIER_IOMANAGER_VIOLATION

 

Modo Usuario
Son driver diseñados para Windows 2000 y 2003 y garantiza que en caso que falle solo fallara el servicio de impresión y no el sistema completo.

Para identificar el driver, existe una ficha en las propiedades del driver donde se ve si es versión 2 (Kernel o Compatible con Windows NT 4.0 o 2000) o versión 3 (usuario o Solo WIndows 2000 o 2003) y También por la ruta de instalación del mismo,

Modo usuario  %systemroot%\system32\spool\drivers\w32x86\3
Modo Kernel   %systemroot%\system32\spool\drivers\w32x86\2

 

Uso de la politica Terminal Server fallback printer driver behavior

Con el SP1 para Windows Server 2003, viene una mejora para entornos Terminal Server, en donde permiten manejar una nueva característica de del SP1 la cual es de usar un driver genérico para entornos de Terminal Server.
Esto serviría en el caso que el cliente RDP al conectarse al Terminal Server, y no pudiera crearse la impresora por falta del driver, el Windows Server 2003 creara la impresora un un driver universal compatible con PostScript (PS) o Printer Control Language (PCL).
Por defecto esta politica viene deshabilitada y al habilitarla podemos configurar

Do nothing if one is not found.
No hacer nada si no se encuentra el driver, es el comportamiento por defecto en el Terminal Server
Default to PCL if one is not found.
Si no se encuentra el driver en el Server, el Terminal Server usara un "fallback printer driver"  Hewlett-Packard  compatible con Printer Control Language (PCL)
Default to PS if one is not found.
Si no se encuentra el driver en el Server, el Terminal Server usara un Adobe PostScript (PS) fallback printer driver.
Show both PCL and PS if one is not found.
Si no se encuentra el driver en el Server, el Terminal Server mostrara ambos PS- y  PCL fallback printer drivers

Los driver utilizados por fallback printer drivers son

"HP DeskJet 500"
"HP DeskJet 500C"
"HP LaserJet 4/4M PS"
"HP Color LaserJet 5/5M PS"

Y si queremos que use alguno en particular de estos 4, debemos usar el siguiente registry, en realidad es conveniente usar estos dos como preferidos.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd
"FallbackPclDriver"="HP DeskJet 550C"
"FallbackPsDriver"="HP Color LaserJet 5/5M PS"

Uso de Driver universal

En algunos casos en uso de una solución de driver universal tiene sus costos por que son soluciones de terceros, pero también investigando un poco hay una solución free de HP

HP Universal Driver for Windows

Otros drivers universales de terceros con costos.

http://www.citrix.com
http://www.uniprint.net/
http://www.thinprint.com/


Uso del NTPRINT.INF para mapear "PrinterMapping"  driver de impresión

Es un archivo de texto ubicado en %windir%\inf\ y que permite manejar el mapeo de los driver en la autocreación de las impresoras en la sesión de Terminal, ahí podremos manejar de forma manual el mapeo de los driver de las impresoras

Ud esta Aqui:
Citrix Technology Professionals