Принтеры на терминальном сервере: перенаправление, драйверы и частые ошибки

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

Коротко: локальные принтеры пользователей попадают в сеанс через перенаправление RDP. По умолчанию для них используется универсальный драйвер Remote Desktop Easy Print, и ставить драйверы на сервер не нужно. Если нужен «родной» драйвер, его заранее устанавливает администратор — после исправлений PrintNightmare обычные пользователи драйверы ставить не могут. Зависшие задания лечатся очисткой очереди и перезапуском службы Spooler, но на терминальном сервере это затрагивает всех.

Как работает перенаправление принтеров

При подключении клиент RDP передаёт серверу список своих принтеров, и сервер создаёт их копии в сеансе пользователя. В списке устройств они видны с пометкой вроде «(перенаправлено 2)» — цифра означает номер сеанса. Эти принтеры видит только сам пользователь, и после выхода из сеанса они удаляются.

Чтобы перенаправление работало, должны совпасть три условия:

  1. В клиенте «Подключение к удалённому рабочему столу» на вкладке Local Resources (Локальные ресурсы) отмечен пункт Printers. В RDP-файле за это отвечает параметр redirectprinters:i:1.
  2. Перенаправление не запрещено на сервере — ни политикой, ни в свойствах коллекции (вкладка Client Settings).
  3. Для принтера есть подходящий драйвер: либо срабатывает Easy Print, либо на сервере установлен драйвер с тем же именем, что и на клиенте.

Easy Print или драйвер на сервере

Remote Desktop Easy Print — встроенный в Windows Server драйвер, который работает как посредник: приложение на сервере печатает в Easy Print, а реальную отрисовку под конкретный принтер делает драйвер на компьютере пользователя. Плюс очевиден — серверу не нужен зоопарк драйверов от всех принтеров, которые есть у сотрудников.

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

Политики перенаправления принтеров

Настройки находятся в Computer Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Session Host → Printer Redirection. Часть из них продублирована в User Configuration.

Политика Что делает
Do not allow client printer redirection Если включена, принтеры клиента в сеанс не перенаправляются вообще.
Политики Easy Print и запасного драйвера при этом игнорируются
Use Remote Desktop Easy Print printer driver first Включена или не задана — сначала пробуется Easy Print, затем драйвер на сервере.
Отключена — сначала ищется драйвер на сервере, Easy Print используется как запасной вариант
Redirect only the default client printer Перенаправляется только принтер по умолчанию с клиента.
Ускоряет вход, если у пользователя много принтеров Do not set default client printer to be default printer in a session Если включена, принтер по умолчанию в сеансе не берётся с клиента, а определяется на сервере

Я обычно включаю Redirect only the default client printer: у многих пользователей на компьютере стоит несколько виртуальных принтеров (PDF, факс, OneNote), и их перенаправление только замедляет вход. Если нужен не принтер по умолчанию, пользователь может временно сменить его на своём компьютере перед подключением.

Установка драйверов на терминальный сервер

Если Easy Print не подходит, драйвер ставится на сервер администратором. Важно, чтобы имя драйвера на сервере совпадало с именем драйвера на клиенте — иначе сервер не сопоставит их, и в журнале появится событие 1111 источника TerminalServices-Printers о том, что драйвер для принтера неизвестен.

Удобнее всего работать с драйверами в оснастке «Управление печатью» (printmanagement.msc), раздел Print Servers → имя сервера → Drivers. На сервере без роли печати оснастку добавляют компонентом из Remote Server Administration Tools (средства служб печати и документов). Из PowerShell:

# добавить драйвер в хранилище драйверов и установить
pnputil /add-driver C:DriversPrinter*.inf /install

# зарегистрировать драйвер принтера по имени из INF-файла
Add-PrinterDriver -Name "Точное имя драйвера из INF"

# посмотреть установленные драйверы
Get-PrinterDriver | Select-Object Name, MajorVersion, Manufacturer

Советы из практики: ставьте драйверы от производителя, а не из Центра обновления на клиенте; выбирайте универсальные драйверы (PCL или PostScript), если производитель их выпускает; не ставьте на терминальный сервер «драйверы со своей утилитой» — они часто запускают фоновые программы в каждом сеансе.

PrintNightmare: почему пользователи не могут поставить драйвер

После серии уязвимостей диспетчера печати (их называют PrintNightmare) Microsoft изменила поведение Point and Print. Начиная с обновлений от 10 августа 2021 года параметр RestrictDriverInstallationToAdministrators по умолчанию равен 1: установить или обновить драйвер принтера через Point and Print может только администратор. Пользователь, который пытается подключить сетевой принтер с принт-сервера, получает запрос учётных данных администратора.

Параметр находится здесь:

HKEY_LOCAL_MACHINESoftwarePoliciesMicrosoftWindows NTPrintersPointAndPrint
RestrictDriverInstallationToAdministrators (REG_DWORD)

Им же управляет политика Limits print driver installation to Administrators в Computer Configuration → Administrative Templates → Printers. Возвращать значение 0 не стоит: Microsoft прямо пишет, что это делает систему уязвимой и равноценной замены этой защите нет.

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

Очистка очереди и перезапуск Spooler

Если задания висят в очереди и не удаляются, помогает остановка службы «Диспетчер печати» (Print Spooler, имя службы Spooler) и удаление файлов заданий:

Stop-Service -Name Spooler -Force
Remove-Item -Path "$env:SystemRootSystem32spoolPRINTERS*" -Force
Start-Service -Name Spooler

На терминальном сервере помните: служба одна на всех. Остановка Spooler удалит задания всех пользователей, а перенаправленные принтеры в текущих сеансах могут пропасть до переподключения. Я делаю это вне рабочего времени или предупреждаю пользователей, а одиночное зависшее задание сначала пробую удалить из очереди конкретного принтера.

Частые проблемы

Симптом Причина Решение
Принтера нет в сеансе Не отмечен пункт Printers в клиенте RDP или перенаправление запрещено политикой/коллекцией Проверить клиент, политику Do not allow client printer redirection и свойства коллекции
Принтер есть у одних пользователей и нет у других Easy Print отключён, а на сервере нет драйвера с тем же именем Установить драйвер или вернуть Easy Print первым
Запрос учётных данных администратора при подключении сетевого принтера Ограничение Point and Print после исправлений PrintNightmare Заранее установить драйвер на сервер под администратором
Вход в сеанс долгий У клиента много принтеров, каждый создаётся при входе Включить Redirect only the default client printer
Задания висят, очередь не очищается Повреждённое задание или сбой драйвера Очистить spoolPRINTERS и перезапустить Spooler вне рабочего времени
Печать идёт с искажениями только через RDP Несовместимость модели с Easy Print Отключить Easy Print для этого случая и поставить драйвер производителя

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

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

Нужно ли ставить драйверы на сервер, если используется Easy Print?

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

Можно ли разрешить пользователям ставить драйверы самим?

Технически — да, вернув RestrictDriverInstallationToAdministrators в 0, но Microsoft этого не рекомендует, и на терминальном сервере я так не делаю никогда. Драйвер работает в контексте службы печати, общей для всех пользователей, и один неудачный драйвер может уронить печать всем.

Почему после очистки очереди у пользователя пропал принтер?

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

Как печатать на сетевой принтер в офисе, если пользователь работает из дома?

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