Печать и проброс устройств в RDS: как перестать бояться драйверов

Печать и проброс устройств в RDS: как перестать бояться драйверов

Печать — самая частая причина заявок на терминальном сервере и самая недооценённая причина его падений. Кривой драйвер, установленный ради одного принтера в бухгалтерии, роняет службу печати для всех тридцати пользователей. Разберём, как устроено перенаправление, почему Easy Print решает большинство проблем и что делать с устройствами, которые через него не работают.

Два способа печатать из терминала

Пользователь в терминальном сеансе печатает на принтер, физически подключённый к его рабочему месту. Между ними — сеть и протокол RDP.

Есть два способа заставить это работать.

Нативные драйверы. На сервере устанавливается драйвер того же принтера, что и у клиента. При подключении сервер сопоставляет модель, находит драйвер и создаёт перенаправленный принтер.

Плюс: доступны все функции устройства — двусторонняя печать, лотки, степлер, настройки качества.

Минусы серьёзные. Драйверов надо ставить столько, сколько моделей у пользователей. Драйвер печати работает в контексте службы диспетчера печати, и сбойный драйвер роняет её целиком — вместе с печатью у всех остальных. Плюс обновления драйверов надо накатывать на все узлы фермы синхронно.

Easy Print. Универсальный драйвер Microsoft. Сервер не знает и не хочет знать модель принтера: он формирует задание в промежуточном формате, передаёт на клиент, и уже клиент печатает своим родным драйвером.

Плюс: на сервере не нужно ни одного драйвера принтера. Совсем.

Минус: диалог настроек печати выглядит унифицированно, часть специфичных функций устройства недоступна. Требует .NET Framework на клиенте.

Наш выбор по умолчанию — Easy Print, с нативными драйверами как точечным исключением для конкретных задач вроде печати на этикеточном принтере или на плоттере.

Настройка перенаправления печати

Управляется групповой политикой в разделе служб удалённых рабочих столов, узел сеансов, перенаправление принтеров.

Ключевые параметры и то, как мы их обычно ставим:

ПараметрЗначениеЗачем
Использовать сначала драйвер принтера Easy PrintВключеноосновной режим
Не разрешать перенаправление принтеровОтключенопечать нужна
Перенаправлять только принтер по умолчаниюВключенорезко сокращает число создаваемых очередей
Не задавать принтер клиента используемым по умолчаниюОтключеноудобство пользователя

Третья строка заслуживает пояснения, потому что даёт наибольший практический эффект.

По умолчанию при подключении сервер создаёт очереди для всех принтеров, установленных на клиентской машине. У обычного пользователя их обычно шесть-восемь: реальный принтер, «Печать в PDF», «Отправить в OneNote», факс, пара виртуальных от установленных программ.

Умножаем на тридцать пользователей — и получаем двести с лишним очередей печати, создаваемых и удаляемых при каждом входе и выходе. Это заметная нагрузка на диспетчер печати и главная причина того, что вход в сеанс занимает лишние секунды.

Ограничение только принтером по умолчанию убирает 80 % этой работы. Пользователи, которым действительно нужно печатать на несколько устройств, — исключение, и для них делается отдельная политика.

$p = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services'
Set-ItemProperty $p -Name UseUniversalPrinterDriverFirst -Value 1 -Type DWord
Set-ItemProperty $p -Name RedirectOnlyDefaultClientPrinter -Value 1 -Type DWord
Set-ItemProperty $p -Name fDisableCpm -Value 0 -Type DWord
Перенаправление принтера через Easy Print
Easy Print не требует драйвера на сервере: задание уходит на клиент в универсальном формате

Изоляция драйверов: страховка, которую надо включить

Механизм, появившийся ещё в Windows Server 2008 R2 и до сих пор недоиспользуемый.

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

Изоляция запускает драйвер в отдельном процессе. Падение затрагивает только его.

Включается на уровне сервера политикой либо для конкретного драйвера в свойствах сервера печати:

# посмотреть текущий режим по драйверам
Get-PrinterDriver | Select-Object Name, PrinterEnvironment, MajorVersion

# перевести конкретный драйвер в изолированный режим
Set-PrinterProperty -PrinterName "HP LaserJet" `
  -PropertyName "Config:DriverIsolation" -Value 2

Цена изоляции — небольшой расход памяти на отдельные процессы. Для сервера с несколькими драйверами это несущественно.

Практическая рекомендация: включать изоляцию для всех сторонних драйверов, а на серверах, где печать критична, — для всех вообще.

Дополнительная мера, которую мы применяем на фермах с частыми проблемами печати, — автоматический перезапуск службы при сбое. Настраивается в свойствах службы, вкладка восстановления: перезапускать при первом, втором и последующих сбоях.

sc.exe failure Spooler reset= 86400 actions= restart/5000/restart/5000/restart/10000

Это не решает причину, но превращает «печать не работает до прихода администратора» в «печать моргнула на пять секунд».

Сканеры, токены и прочая периферия

Отдельная и более сложная тема, чем печать, потому что универсального механизма здесь нет.

Токены ЭЦП. Самая частая задача в российском офисе. Работает через перенаправление смарт-карт — оно передаёт в сеанс не устройство целиком, а криптографический интерфейс. Для большинства токенов этого достаточно: криптопровайдер на сервере видит ключевой носитель клиента.

# в .rdp
redirectsmartcards:i:1
redirectdrives:i:0
devicestoredirect:s:*

Важно: на сервере должен стоять тот же криптопровайдер, что и у клиента, и совместимой версии. Расхождение версий даёт ошибки, которые выглядят как проблема с самим токеном.

Сканеры. Работают плохо. Протокол TWAIN не рассчитан на перенаправление, и универсального механизма нет.

Рабочие обходные пути, в порядке предпочтения:

  1. Сканировать в сетевую папку с самого МФУ, а из терминала брать готовый файл. Самый надёжный вариант, работает всегда.
  2. Сканировать на локальный компьютер и передавать файл через перенаправленный диск.
  3. Сторонние решения перенаправления USB — работают, но добавляют зависимость и стоят денег.

Первый вариант мы предлагаем в 90 % случаев. Он не только надёжнее, но и удобнее: файл сразу оказывается там, где нужен, без промежуточных шагов.

Торговое оборудование. Сканеры штрихкодов в режиме эмуляции клавиатуры работают через перенаправление без настройки. Работающие через COM-порт требуют перенаправления портов. Фискальные регистраторы через терминал обычно не пробрасываются — их подключают к серверу напрямую или используют отдельную машину.

Перенаправление дисков и буфера обмена

Две функции, которые удобны пользователям и не нравятся службе безопасности.

Перенаправление дисков даёт доступ к локальным дискам клиента изнутри сеанса. Удобно для передачи файлов, но означает канал утечки данных наружу и канал занесения вредоносного кода внутрь.

Буфер обмена — то же самое в миниатюре, но отключить его сложнее с точки зрения удобства: копирование текста между сеансом и локальной машиной используется постоянно.

Компромисс, к которому мы обычно приходим: буфер обмена оставляем, перенаправление дисков отключаем, а для обмена файлами заводим сетевую папку, доступную и изнутри терминала, и с рабочих мест.

Set-RDSessionCollectionConfiguration -CollectionName "Office" `
  -ClientDeviceRedirectionOptions AudioVideoPlayBack,Clipboard,PlugAndPlayDevice `
  -ConnectionBroker rdcb.corp.local
# в списке нет Drive — перенаправление дисков выключено

Такая схема удобнее, чем кажется: сетевая папка работает в обе стороны, не зависит от того, с какого устройства человек подключился, и оставляет журнал доступа.

Аудио стоит оставлять включённым даже в офисе без явной потребности: без него не работают уведомления и звонки в мессенджерах, а заявки на это приходят регулярно.

Изоляция драйверов печати
Изоляция драйверов не даёт одному сбойному драйверу уронить печать у всех

Разбор типовых сбоев

СимптомОбычная причинаЧто делать
Принтер не появляется в сеансеклиент не передал устройство либо перенаправление отключено политикойпроверить .rdp и GPO
Печать «уходит в никуда»задание встало в очереди на клиентеочистить очередь на клиентской машине
Печать пропала у всех сразуупал диспетчер очереди печатиперезапуск службы, включить изоляцию драйверов
Вход в сеанс занимает лишние секундысоздаются очереди для всех принтеров клиентаперенаправлять только принтер по умолчанию
Документ печатается искажённымособенности Easy Print с нестандартным форматомпоставить нативный драйвер точечно
Токен виден, но подпись не проходитразные версии криптопровайдера на клиенте и серверепривести к одной версии
Периодические падения печати у одного пользователяконкретный драйверизоляция или перевод на Easy Print

Третья строка — самая болезненная, потому что затрагивает всех. Диагностика начинается с журнала:

Get-WinEvent -LogName 'Microsoft-Windows-PrintService/Admin' -MaxEvents 50 |
  Select-Object TimeCreated, Id, LevelDisplayName, Message |
  Format-List

В сообщениях обычно прямо указано имя модуля драйвера, вызвавшего сбой. Дальше — либо изоляция этого драйвера, либо его удаление с переводом пользователя на Easy Print.

Профилактическая мера, которую мы применяем на всех фермах: регулярная чистка неиспользуемых драйверов печати. За годы эксплуатации их накапливаются десятки, часть — от давно списанных устройств, и каждый остаётся потенциальным источником сбоя.

Get-PrinterDriver | Where-Object {
  -not (Get-Printer | Where-Object DriverName -eq $_.Name)
} | Select-Object Name, MajorVersion

Запрос показывает драйверы, к которым не привязан ни один принтер. Удалять их можно спокойно — при необходимости драйвер поставится заново.

Кейс: печать, которая падала по вторникам

Клиент — бухгалтерская фирма, 26 рабочих мест, один терминальный сервер Windows Server 2019.

Жалоба с чёткой периодичностью: примерно раз в неделю, чаще по вторникам, печать переставала работать у всех сразу. Помогал перезапуск сервера, который делали руками.

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

Журнал PrintService/Admin подтвердил: события 372 и 808, сбой модуля драйвера. Имя модуля повторялось от раза к разу — драйвер МФУ Kyocera версии 2019 года.

Дальше стало интереснее. На сервере было установлено 34 драйвера печати. Принтеров при этом фактически использовалось четыре: два МФУ в офисе и два личных принтера у сотрудников, работающих удалённо.

Остальные 30 накопились за четыре года эксплуатации: их подтягивало автоматическое перенаправление, когда пользователи подключались из дома со своими устройствами. Драйвер ставился, устройство больше не появлялось, драйвер оставался.

Вторники объяснились через расписание: по вторникам в офис приезжала аудитор из другой компании и подключалась к терминалу со своего ноутбука. Её МФУ и был тем самым Kyocera. При каждом её подключении драйвер загружался, отрабатывал задание и с некоторой вероятностью падал, унося диспетчер печати вместе с собой.

Починка заняла полтора часа и состояла из четырёх действий:

  • включили перенаправление только принтера по умолчанию;
  • включили приоритет Easy Print и изоляцию для всех сторонних драйверов;
  • вычистили 30 неиспользуемых драйверов;
  • настроили автоматический перезапуск службы при сбое.

Побочный эффект оказался приятным: время входа в сеанс сократилось с 24 до 9 секунд. Создание восьми очередей печати на каждого из 26 пользователей стоило заметно дороже, чем все думали.

Падения прекратились. За полтора года после этого — ни одного обращения по печати, если не считать бумаги в лотке.

Здесь мне важен сам механизм накопления. Никто не делал ничего неправильного: перенаправление принтеров работало как задумано, драйверы ставились автоматически, всё по умолчанию. Проблема выросла из настроек, которые никто не менял, — и именно поэтому её никто не искал.

Частые вопросы

Easy Print или нативные драйверы?

По умолчанию Easy Print: на сервере не нужно ни одного драйвера принтера, а значит нет и главного источника падений диспетчера печати. Нативные драйверы ставьте точечно, когда нужны специфичные функции устройства — этикеточная печать, плоттеры, сложные настройки лотков.

Почему вход в терминальный сеанс занимает лишние секунды?

Часто из-за печати: сервер создаёт очереди для всех принтеров клиентской машины, а их обычно шесть-восемь вместе с виртуальными. Включите политику перенаправления только принтера по умолчанию — это убирает большую часть работы при входе и выходе.

Как работать со сканером через терминал?

Надёжнее всего сканировать с самого МФУ в сетевую папку и брать готовый файл из терминала. Протокол TWAIN не рассчитан на перенаправление, и попытки пробросить сканер напрямую работают нестабильно даже со сторонними решениями.

Почему упала печать сразу у всех пользователей?

Практически всегда это падение службы диспетчера очереди печати из-за сбойного драйвера, который выполняется внутри её процесса. Имя модуля видно в журнале PrintService/Admin. Лечится изоляцией драйверов и настройкой автоматического перезапуска службы.

Нужна помощь с проектом?

Специалисты АйТи Фреш помогут с архитектурой, DevOps, безопасностью и разработкой — 15+ лет опыта

📞 Связаться с нами
#Windows#RDS#печать#периферия#поддержка
Комментарии 0

Оставить комментарий

загрузка...

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.