Печать — самая частая причина заявок на терминальном сервере и самая недооценённая причина его падений. Кривой драйвер, установленный ради одного принтера в бухгалтерии, роняет службу печати для всех тридцати пользователей. Разберём, как устроено перенаправление, почему Easy Print решает большинство проблем и что делать с устройствами, которые через него не работают.
Печать и проброс устройств в RDS: как перестать бояться драйверов
Два способа печатать из терминала
Пользователь в терминальном сеансе печатает на принтер, физически подключённый к его рабочему месту. Между ними — сеть и протокол 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Изоляция драйверов: страховка, которую надо включить
Механизм, появившийся ещё в 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 не рассчитан на перенаправление, и универсального механизма нет.
Рабочие обходные пути, в порядке предпочтения:
- Сканировать в сетевую папку с самого МФУ, а из терминала брать готовый файл. Самый надёжный вариант, работает всегда.
- Сканировать на локальный компьютер и передавать файл через перенаправленный диск.
- Сторонние решения перенаправления 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. Лечится изоляцией драйверов и настройкой автоматического перезапуска службы.



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