Проблемы с печатью из RDP или Терминальный сервер Windows и Принтеры

Проблемы с печатью из RDP или Терминальный сервер Windows и Принтеры

В рамках этой статьи печать из терминальных ферм на Citrx’е не рассматривается.

Большинство проблем с печатью на терминальных серверах вызваны установленными на них драйверами принтеров.

На верхнем уровне причины этих проблем можно разделать следующим образом.

 

  1. Неидентичные версии драйверов на клиентской машине и на терминальном сервере.
  2. Нестабильность драйверов в терминальной среде.
  3. Высокая нагрузка на службу «диспетчер очереди печати»
  4. Отсутствие работоспособных драйверов для терминальных серверов.

Итак, перейдем теперь к решениям.

Версии драйверов.

Драйверы различных версий на сервере и клиентских машинах (в общем, то это первое, что нужно проверить) должны быть идентичны в т. ч. и с точки зрения версии PCL. Если версии отличаются то, скорее всего печати нам не видать. Также можно отметить, что когда стоит выбор использовать PCL5 или PCL6, лучше устанавливать драйверы PCL5, т.к. на практике они работают намного стабильнее.

Высокая нагрузка и нестабильность драйверов в терминальной среде.

Нестабильная работа драйверов и, соответственно, перегрузка ими диспетчера очереди печати (по русски – «спулера») вызывала (и будет вызывать, если не чего не делать), остановку всего процесса печати на сервере, а иногда и остановку (зависание) ОС сервера в целом.

До выхода Windows Server 2008, штатных средств по оптимизации нагрузки спулера в ОС Windows Server не было. Поэтому единственным адекватным методом борьбы с регулярным зависанием спулера (и соответственно, массовыми звонками в тех. поддержку от разгневанных пользователей), был bat-ник, по расписанию превентивно перезапускающий процесс spoolsv.exe (например, утром и в обеденное время), освобождая спулер от висящих запросов и очередей.

С выходом Windows Server 2008 появилась возможность изоляции драйверов принтера. Данная возможность позволяет драйверу принтера подгружать задачи не в Spoolsv.exe, а специальный под-процесс PrintIsolationHost.exe. При такой конструкции, зависание драйвера одного принтера, не вешает всю очередь печати, поскольку встает только один под-процесс PrintIsolationHost.exe, а сам процесс спулера spoolsv.exe остается работоспособным.
Для того чтобы включить изоляцию драйверов принтеров, нужно использовать редактор локальной групповой политики (gpedit.msc):

  • Откройте gpedit.msc и последовательно перейдите:
  • Параметры компьютера (Computer Configuration) -> Административные шаблоны (Administrative Templates)-> Принтеры (Printers).
  • Среди перечня политик нужно включить следующие:
  • Выполнить драйверы принтеров в изолированных процессах (Execute print drivers in isolated processes)
  • Переопределить параметр совместимости выполнения драйвера печати, назначенный драйвером печати (Override print driver execution compatibility setting reported by print driver)

К сожалению, данная функция никак не решит проблему отсутствия работоспособных драйверов для терминальных сред или слишком высокой нагрузки на спулер (например, когда на сервере установлены 10-ки разных драйверов разных устройств).

Поэтому помимо изоляции драйверов в Windows Server 2008 также появилась ещё более ценная функция под названием TS Easy Print (Remote Desktop Easy Print). О ней пойдет речь ниже.
Отсутствие работоспособных драйверов для терминальных сред и сверхнагрузка на спулер.

В ситуации, когда с терминального сервера необходимо печатать на 10-ках различных печатающих устройствах (в зоопарке из принтеров, если быть точнее), многие из которых не имеют рабочих драйверов для терминалов, следует применять функцию TS Easy Print.

Главным достоинством этого решения является то, что в принципе не нужно устанавливать драйверы для каждого устройства на терминальный сервер. Вместо этого используется унифицированный драйвер Remote Desktop Easy Print и, соответственно, все операции по печати идут мимо спулера и обслуживаются напрямую клиентской машиной. Благодаря этому значительно повышается стабильность работы, как и самого спулера, так и терминального сервера в целом.

Для использования TS Easy Print не требуется дополнительной установки серверных ролей и компонентов. Требованиями являются лишь наличие на клиентской машине RDP клиента версии 6.1 или выше и .NET Framework 3.0 SP1 или выше.

Для того чтобы явно определить, что нужно использовать на терминальном сервере TS Easy Print, необходимо также воспользоваться редактором локальной групповой политики (gpedit.msc):

  • Откройте gpedit.msc и последовательно перейдите:
  • Параметры компьютера (Computer Configuration) -> Административные шаблоны (Administrative Templates) -> Компоненты Windows (Windows Components) -> Службы удаленных рабочих столов (Remote Desktop Services)-> Узел сеансов удаленных рабочих столов (Remote Desktop Session Host) -> Перенаправление принтеров (Printer Redirection).
  • Среди перечня политик нужно включить следующую:
  • Использовать в первую очередь драйвер принтера Easy Print удаленного рабочего стола (Use Terminal Services Easy Print driver first)

После того, как политика активирована, можно удалить лишние драйверы принтеров с сервера.

 

  • Будьте внимательны!!! Нельзя удалять Terminal Services Easy Print (он же Remote Desktop Easy Print) и Microsoft XPS Document Writer. Без них перенаправление печати работать не будет.

Удалить лишние драйверы можно с помочью панели управления.

· Панель управления (Control panel) ->Принтеры (printers)-> Свойства Сервера (Server Properties)-> Драйверы (Drivers).

Сразу же оговорка. При печати, используя TS Easy Print могут возникнуть проблемы с отображением шрифтов (т.е. «иероглифы»). Решается проблема просто – нужно установить последнюю версию NET Framework на клиенте.

Дополнительно следует также отметить, что решить проблему «виснущего и вечно падающего» спулера можно также используя коммерческий продукт ScrewDrivers.

ScrewDrivers имеет клиент-серверную архитектуру. Соответственно, серверную часть нужно установить на сервере где планируется использовать печать из терминальных сессий, а клиентскую — на рабочих станциях пользователей.

Клиентский компонент ScrewDrivers создает на терминальном сервере виртуальные принтеры, которые соответствуют локальным принтерам на клиентской машине. Решение вполне стабильное и проверено годами во множестве компаний. Но у него есть один недостаток – оно в отличие от TS Easy Print платное :-).

Информация взята с сайта: http://bill.maxiplace.ru/