Печать на терминальном сервере

Эта статья является выдержкой из книги «Terminal Services for Microsoft Windows Server 2003: Advanced Technical Design Guide», авторы Brian Madden и Ron Oglesby. Она описывает все аспекты печати в терминальной среде, включая вспомогательную информацию, проектирование, настройку, управление драйверами и использование сторонних инструментов. Хотя статья написано для терминальных служб Windows 2003, ее можно применять и для более ранних версий.

В процессе проектирования вашей терминальной среды вы вспомните, что вашим пользователям рано или поздно придется что-то печатать. Печать является одной из важнейших функций для терминальных пользователей, хотя для администраторов это часто бывает ночным кошмаром. В идеале печать из приложений в сеансах RDP не должна отличаться от печати из любых других приложений. Она должна быть относительно прозрачна для пользователей; они должны иметь возможность щелкнуть кнопку печати в своих приложениях, легко выбирать нужный принтер и быстро получать распечатки.

Во всех серверных средах печать создает проблемы, причем не из-за Microsoft, а вследствии способа обработки в серверной среде. Поскольку обработка всех приложений осуществляется на сервере, пользовательские задания печати также создаются на сервере. Однако, принтеры пользователей обычно расположены рядом с ними и настраиваются на клиентских устройствах. Процесс генерации задания печати на сервере может быть весьма сложным. Кроме того, Windows Server 2003 использует такую же подсистему печати, что и во времена Windows NT. Но движок печати для Windows NT изначально проектировался как один процесс, предназначенный для одиночного устройства. Это подходит для рабочих станций, но может привести к проблемам на терминальных серверах.

В этой статье мы рассмотрим, как работает печать в Windows и какие опции настройки печати доступны на терминальном сервере. Мы также рассмотрим, как назначать принтеры в ситуации, когда к терминальному серверу подключаются сотни пользователей. Завершит статью рассмотрение реального примера решения проблем с печатью в одной компании.

Как работает печать

Перед рассмотрением проблем, связанных с печатью на терминальном сервере, вам следует понять, как вообще работает печать в Windows. В конце концов, принцип печати на терминальном сервере не отличается от печати на любом другом компьютере Windows.

Чтобы распечатать документ, предпринимается удивительное число шагов. Можно написать целую книгу о процессе печати, но чтобы понять принципы печати в терминальной среде, нам нужно знать только основы.

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

  • Этап 1. Приложение Windows
  • Этап 2. Спулер печати
  • Этап 3. Принтер (или «устройство печати» в терминологии Microsoft)

Этап 1. Приложение Windows

Когда пользователь запрашивает печать в приложении Windows, приложение отвечает за создание собственного вывода для подготовки к печати. Этот вывод включает такую информацию, как форматирование страницы и добавление номеров страниц. Приложение передает этот вывод в подсистему Windows, называемую «Интерфейс устройства графики» (Graphics Device Interface, GDI). GDI преобразует вывод приложения в метафайл, содержащий данные и команды принтера. Этот метафайл иногда называют «данные печати» (print data).

Предпочтительным форматом для данных печати является формат Microsoft, называемый EMF.

Данные в формате EMF предпочтительнее данных в формате RAW, поскольку меньше нагружают процессор и позволяют фоновую печать. Файлы EMF не зависят от принтера. Приложение может генерировать файлы EMF для распечатки независмо от того, на каком принтере они будут распечатаны. Это промежуточные файлы между приложением и драйвером принтера.

Чтобы понять это, представим, что мы хотим распечатать строку текста «All people seem to need data processing«.

Файл EMF для этой строки текста будет содержать команды распечатки, включая информацию о цвете, шрифте, символах, интервале. Как только GDI записал файл EMF на диск, данные печати передаются в подсистему печати Windows.

Этап 2. Подсистема печати

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

  • Получает файл EMF от GDI.
  • Определяет, где находится целевой принтер — локальный или сетевой
  • Использует драйвер принтера для трансляции файла EMF в сырой формат принтера. (С этого момента «данные печати» становятся «заданием печати» (print job)
  • Временно приостанавливает печать, если принтер отключен или недоступен по другим причинам.
  • Обеспечивает передачу задания печати на принтер.

Точный процесс зависит от типа принтера, на который посылается задание печати. Компонент печати — маршрутизатор печати (print router) — посылает данные по разным маршрутам в зависимости от того, является принтер локальным или сетевым.

При удаленной печати необработанный файл EMF посылается на сервер печати, где визуализируется подходящим драйвером принтера.

С другой стороны, если задание печати предназначено для локального принтера, спулер использует драйвер принтера для трансляции файла EMF в сырой формат принтера. Этот процесс называется «визуализацией» (rendering), он занимает некоторое время и ресурсы процессора. Визуализированное задание печати содержит сырые данные (задание печати), специфичные для принтера.

Взглянем еще раз на наш пример: «All people seem to need data processing«.

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

После создания задания печати спулер печати пересылает этот файл на принтер.

Этап 3. Принтер

На конечной стадии принтер получает визуализированное задание от спулера. Принтер печатает этот файл, не обращая внимания на его формат. Вот почему принтер печатает мусор, если используется неверный драйвер печати. Использование неверного драйвера приводит к тому, что создаются задания, несовместимы с принтером. Но принтер не знает об этом и пытается печатать все, что он получает.

Как работает печать на терминальном сервере

Разобравшись с принципом работы печати в среде Windows, мы можем рассмотреть, как можно настроить печать в терминальной среде. Но сначала нам следует «переопределить» стандартные термины печати, используемые в терминальной среде.

Хотя в реальном мире возможно бесконечное число сценариев печати, на терминальном сервере доступны только два:

  • Серверные принтеры. Это принтеры, к очередям которых терминальный сервер имеет непосредственный доступ. Сюда входят обычные сетевые принтеры, доступные через \\servername\printername, а также принтеры, непосредственно подключенные к терминальному серверу. Рассматривайте «серверные принтеры» как установленные на сервере.
  • Клиентские принтеры. Это принтеры, доступные на пользовательских рабочих станциях до запуска сеансов RDP. Это могут быть принтеры, физически подключенные к устройствам клиентов или подключенные через сеть. Считайте такие принтеры как установленные на клиенте RDP.

Важно понять разницу между серверными и клиентскими принтерами. Каждый тип имеет свои преимущества и недостатки, и они используются и настраиваются по-разному. Поэтому мы рассмотрим эти принтеры в разных разделах этой статьи.

Серверные принтеры

Серверный принтер — это любой принтер, установленный на терминальном сервере. Технически это означает, что сервер имеет прямой доступ к очереди печати. Эта очередь может быть Windows или Netware, на клиенте или на сервере. Вообще, любой принтер, доступный через имя \\computername\printername является серверным.

Серверным принтером может быть также принтер, имеющий очередь печати на самом терминальном сервере. Это может быть принтер, подключенный к локальному порту LPT или USB, или IP-принтер с очередью, находящейся на сервере терминалов.

В терминальной среде серверные принтеры работают как обычные принтеры.

  1. Пользователь печатает из приложения, выполняющегося на терминальном сервере
  2. GDI создает файл EMF на терминальном сервере
  3. GDI посылает файл EMF в подсистему печати
  4. Маршрутизатор печати на терминальном сервере отсылает файл EMF на сетевой сервер печати
  5. Сетевой сервер печати получает файл EMF и передает его спулеру печати. Спулер визуализирует задание и готовит его к распечатке.
  6. Задание печати передается в порт принтера, на котором монитор принтера передает его на физический принтер.

В большинстве сред сетевые пользовательские принтеры назначаются в скриптах входа или через перемещаемые профили. В таких случаях вам не нужно предпринимать специальные меры, чтобы эти принтеры были доступны в терминальных сеансах. Пользователи даже могут настраивать собственные сетевые принтеры, если имеют права подключения к ним.

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

К сожалению, производительность печати не столь хороша, когда пользователи и принтеры расположены по одну сторону WAN, а терминальный сервер — по другую. В таких случаях объемные задания печати передаются по каналу WAN, который также используется для передачи траффика RDP.

Преимущества серверных принтеров

  • Хорошая производительность, если терминальный сервер и серверы печати расположены в одной сети
  • Надежность
  • Пользователи получают те же принтеры независимо от места регистрации

Недостатки серверных принтеров

  • При использовании «толстых» клиентов вам необходимо установить принтер как на клиенте, так и на сервере
  • Пользователи должны использовать обозреватель сети для принтеров, которые не преконфигурированы
  • Необходима ручная настройка принтеров для пользователя или группы
  • Для получения хорошей производительности сервер печати и сервер терминалов должны находиться в одной сети.
  • Пользователи получают те же принтеры независимо от места регистрации

Клиентские принтеры

В терминальной среде, любой принтер, доступный на клиентском устройстве пользователя, считается «клиентским принтером». Это могут быть принтеры, непосредственно подключенные к устройству клиента (к порту USB или LPT), или это сетевые принтеры, назначенные до запуска сеанса RDP. В любом случае, Terminal Server 2003 может автоматически сделать такие принтеры доступными в сеансах RDP. Это позволяет пользователям печатать на свои привычные принтеры.

Клиентские принтеры поддерживаются веб-клиентом RDP и полным клиентом RDP. Некоторые сторонние разработчики предлагают клиентов RDP для других платформ, но возможности печати у них различны. В нашей статье мы рассматриваем только клиентов Microsoft.

Как работает печать на клиентские принтеры

Когда пользователь подключается к терминальному серверу, локальный клиент RDP автоматически делает доступными локально инсталлированные принтеры. Он динамически создает принтеры, которые печатают на специальные принтерные порты (также создаваемые динамически) и которые указывают на устройство клиента. Такие принтеры будут иметь имена типа “Printer name (from Client name)in Session #.” (Например, “Lexmark Optra E312 (from LAPTOP42) in session 14”) Кроме того, такие принтеры конфигурируются на особые порты с именами типа “TS001” и “TS002” (это можно видеть на вкладке «Порты» в свойствах принтера).

Каждый принтер создается с правами доступа, которые разрешают печать на них только этому пользователю.

Технически администраторы могут печатать на любой принтер, поэтому они видят все принтеры всех пользователей сервера. Обычные пользователи видят только собственные принтеры. Если пользователю необходимо распечатать документ из приложения на терминальном сервере, он запускает задание на печать как обычно. В своем сеансе он видит принтеры своего клиентского устройства, перечисленные в диалоге выбора принтера. Для пользователя такие притеры видны как обычные принтеры. Он не знает, что эти принтеры указывают на его локальные принтеры, доступные через протокол RDP.

  1. Пользователь печатает из приложения, выполняющегося на терминальном сервере
  2. GDI создает файл EMF на терминальном сервере
  3. GDI посылает файл EMF в подсистему печати терминального сервера
  4. Если драйверы принтера загружены на терминальном сервере, спулер терминального сервера визуализирует задание. Если на терминальном сервере отсутствует подходящий драйвер, задание печати не может быть выполнено.
  5. Задание печати пересылается от терминального сервера на устройство клиента по виртуальному каналу RDP.
  6. Устройство клиента получает задание печати. Поскольку на терминальном сервере загружены драйверы клиентского принтера, задание визуализируется специально для конкретного клиентского принтера, и подсистема печати клиентского устройства может немедленно обработать задание и послать его на принтер.

Рассматривая процесс печати на клиенте, вы можете обратить внимание на то, что она может вызвать проблемы с производительностью. Сырые задания печати довольно велики и требуют много времени для передачи на принтер клиента, особенно если пользователь подключается через модем. Кроме того, производительность сеанса RDP может снизиться, поскольку полоса пропускания занимается заданием печати, посылаемым клиенту.

Теперь рассмотрим, что происходит при печати на сетевой принтер.

Концептуально этот процесс аналогичен печати на локально подключенный принтер. Однако, поскольку это сетевой принтер, клиент должен предпринять дополнительный шаг для отправки задания на сетевой сервер печати.

  1. Пользователь печатает из приложения, выполняющегося на терминальном сервере
  2. GDI создает файл EMF на терминальном сервере
  3. Поскольку принтер является отображенным клиентским принтером, задание визуализируется на терминальном сервере.
  4. Терминальный сервер посылает задание на отображенный порт через виртуальный канал RDP.
  5. Задание печати пересылается от терминального сервера на устройство клиента по виртуальному каналу RDP.
  6. Сервер печати получает задание печати и посылает его на принтер.

Казалось бы, почему бы терминальному серверу не быть умнее и сразу не послать задание на сетевой сервер печати? Тогда можно было избежать пересылки файла EMF на клиента и обратно. К сожалению, в реальности это не осуществимо. Например, могут быть ситуации, когда сервер печати доступен только с устройства клиента, а не с терминального сервера, или между сетями может стоять межсетевой защитный экран, разрешающий только траффик на порт RDP 3389.

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

Конечно, есть простой способ победить эту потенциальную неэффективность, отобразив сетевой принтер в терминальном сеансе. Другой способ состоит в использовании продуктов третьих фирм, как будет показано позже.

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

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

Если вам повезло со средой, в которой есть небольшое число разных типов принтеров, то это не вызовет проблем. Но если у вас есть сотни пользователей с сотнями разных принтеров, установка и настройка драйверов на терминальном сервере может превратиться в сущий кошмар. Мы рассмотрим использование и управление драйверами принтеров далее в этой статье.

Еще один недостаток использования клиентских принтеров состоит в том, что для того, чтобы пользователь мог использовать принтер, он должен быть установлен и сконфигурирован локально на устройстве клиента. Если ваши пользователи имеют большое число принтеров, настроенных на рабочих станциях, это может быть хорошо. Однако, это может быть совсем нехорошо, если речь идет о терминальном сервере. Скорее всего вы захотите отстраниться от конфигурирования принтеров на индивидуальных рабочих станциях. Если пользователь сам устанавливает или удаляет свои локальные принтеры (это не ваша проблема), это будет влиять на то, как он будет печатать в терминальной среде (а это уже ваша проблема).

Преимущества печати на отображенные клиентские принтеры

  • Прозрачное подключение принтеров
  • Пользователи видят свои привычные принтеры
  • Доступны все локальные принтеры
  • Быстрая настройка для существующих клиентских принтеров

Недостатки печати на отображенные клиентские принтеры

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

Включение поддержки клиентских принтеров

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

  1. Установить драйверы принтеров на терминальных серверах
  2. Настроить серверы использовать клиентские принтеры

Этап 1. Установка драйверов
В первую очередь следует убедиться, что на терминальном сервере установлены необходимые драйверы принтеров. В реальной жизни есть масса проблем, связанных с инсталляцией и управлением драйверами принтеров на терминальных серверах. Некоторые особенности мы рассмотрим в разделе «Управление драйверами» далее в этой статье.

Этап 2. Настройка терминального сервера для подключения клиентских принтеров
После установки драйверов необходимо настроить терминальный сервер подключать клиентские принтеры при запуске сеансов RDP. Для этого нужно настроить права доступа, слушатель RDP и свойства доменной учетной записи пользователя.

Этап 2А: Проверьте права доступа печати
Чтобы пользователи могли печатать на терминальном сервере, они должны иметь права Read, Write, Execute и List Folder Contents на каталог спулера %SystemRoot%System32Spool. Хотя эти настройки не приняты по умолчанию в Windows Server 2003, они должны быть правилом на любом терминальном сервере.

Этап 2B: Проверьте настройки RDP
С помощью утилиты Terminal Services Configuration вы можете настроить опции печати для всех пользователей, использующих некоторое соединение. На вкладке “Сlient settings” свойств соединения убедитесь, что в разделе “Disable the following” отключены опции “Windows printer mapping” и “LPT port mapping”. Включение одной из этих опций предотвратит отображение клиентских принтеров. Кроме того, если включена опция “Use connection settings from user settings”, то следует проверить настройку учетной записи пользователей.

Вместо настройки этих опций в свойствах RDP вы можете применять их посредством GPO. Настройки отображения клиенских принтеров могут быть найдены в GPO Computer Configuration\Administrative Templates\Windows Components\Terminal Services\Client/Server Data Redirection

Этап 2C: Настройка пользовательских учетных записей
Вы можете настроить свойства подключения клиенстких принтеров для отдельных пользователей. В среде Active Directory, свойства отображения являются частью объекта пользователя (вкладка Active Directory Users and Computers | User Object | Environment).

Выбор “Connect Client Printers at Logon” приведет к тому, что при входе пользователя на сервер терминалов будут автоматически создаваться его клиентские принтеры. При выходе пользователя и после распечатки всех его заданий принтер автоматически удаляется. Если вы не установите опцию “Connect Client Printers at Logon”, у пользователя сохранится возможность вручную отобразить клиентский принтер, хотя он и не будет создан автоматически.

Проблемы с драйверами при использовании отображения клиенских принтеров

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

На первый взгляд, это не должно вызывать проблем. Однако, не все так просто. Например, откуда терминальный сервер знает, что на нем установлен правильный драйвер клиентского принтера?

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

Наример, если терминальный сервер имеет инсталлированный драйвер “HP OfficeJet 40xi” и клиент RDP имеет инсталлированный принтер с именем “HP OfficeJet 40xi”, то сервер распознает совпадение. Но если клиент использует драйвер “HP DeskJet 500”, то сервер разумеется видит, что это другой драйвер.

Это прекрасно работает, когда клиенты Windows 2000 и Windows XP подключаются к термнальным серверам Windows 2000/2003. Эти платформы имеют одинаковые названия одних и тех же драйверов, что гарантирует совпадение. Однако, это приводит к интересной ситуации, если клиент использует старые версии Windows, включая ME, 98, 95 или NT.

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

Наример, версия принтера LaserJet 5P в Windows 95/98 называется “Hewlett Packard LaserJet 5P,” а этот же принтер в Windows 2000/XP/2003 называется “HP LaserJet 5P.” Для человека это одно и то же, но сервер считает эти имена разными. Поэтому если клиент Windows 98 с клиенским принтером HP LaserJet 5P подключается к серверу, тот не может отобразить принтер, поскольку имена драйверов различны — даже если установлен нужный драйвер.

Решение проблемы: Сопоставление драйверов от клиента к серверу

Для решения этой проблемы можно сопоставить имена драйверов принтеров на сервере с именами драйверов на клиентах. Например, вы можете сказать серверу, что драйвер клиентского принтера с именем “Hewlett Packard LaserJet 5P” является тем же драйвером, что и драйвер на сервере “HP LaserJet 5P.”

Учтите, что это вам нужно, если, во-первых вы используете отображение клиентских притеров и во-вторых используете клиентов, отличных от Windows 2000 или Windows XP.

Чтобы разрешить сопоставление драйверов, разместите на терминальном сервере файл, который содержит пары имен драйверов на стороне клиента и на стороне сервера. В ранних версиях сервера терминалов это делалось с помощью файла “wtsuprn.inf”, находящегося в каталоге %systemroot%system32. Однако, в Windows Server 2003 этого файла нет и он не ищется.

Для создания файла сопоставления в Windows 2003 вам нужно добавить в реестр два значения:

Key: HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd
Type: REG_SZ
Value: PrinterMappingINFName
Data: Имя файла .INF, содержащего сопоставление имен драйверов - например, c:winntinfprintsubs.inf
Key: HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wdsrdpwd
Type: REG_SZ
Value: PrinterMappingINFSection
Data: Наименование раздела в файле .INF, содержащего собственно сопоставление (Например, Printers)

После внесения изменений реестр перезапустите службу спулера или перезагрузите сервер терминалов, чтобы изменения вступили в силу. После изменения реестра вам следует создать файл .INF, включающий имена драйверов. Этот файл должен выглядеть так:

 ;PRINTSUBS.INF
 ;This file contains Mappings for Client driver to Server driver printer connections
 [Printers]
 ;"Client Printer Driver Name" = "Server Printer Drive Name"
 "Hewlett Packard LaserJet 5P" = "HP LaserJet 5P"

Вы можете создать этот файл в Notepad и сохранить его с расширением .INF в каталоге %SystemRoot%System32.

Имена драйверов в этом файле чувствительны к регистру и пробелам. Все, что находится внутри кавычек, должно точно соответствовать имени драйвера. Как и в большинстве файлов .INF лидирующий символ точка-с-запятой (;) означает комментарий и такая строка игнорируется. При использовании этого файла вы можете включить в него несколько сопоставлений имен драйверов.

Создание карты сопоставления — больше искусство, чем наука. К счастью, есть замечательный сайт www.printingsupport.com. На нем вы найдете файлы сопоставления имен драйверов, которые можете использовать в своей среде.

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

Если ваш файл .INF содержит синтаксические ошибки (кроме неверного указания имени драйвера внутри кавычек), вы можете получить в журнале событий следующее сообщение:

Event 1110: «Error processing ntprint.inf. If the file on the system is corrupt, you can restore it from the installation media.

Это сообщение сбивает с толку, поскольку ссылается на файл “ntprint.inf ”, а не на указанное вами имя файла. Эта ошибка обычно означает, что ваш файл .INF содержит ошибку. Чаще всего это бывает, когда в файле не содержится записей. Ваш новый файл .INF должен содержать минимум одно сопоставление и минимум одно сопоставление не должно начинаться с символа комментария. Если ваш файл .INF содержит пустое имя секции, вы также получите ошибку 1110.

Как найти точное имя драйвера

Для сопоставления имени драйвера вам необходимо знать его точное имя как на стороне сервера, так и на стороне клиента. Вы можете получить эту информацию из диалога свойств принтера (щелкните правой кнопкой мыши на принтере и выберите «Свойства»). На компьютерах Windows 9x драйвер перечислен в поле “Print using the following driver”. На сервере Windows 2003 диалог драйвера находится на вкладке “Advanced”. Поскольку имя принтера может варьировать на рабочих станциях в зависимости от платформы, убедитесь, что у вас есть правильное имя драйвера для каждой используемой платформы. Например, если вы видите “HP LaserJet 4000 Series PCL 5/5e,” указывайте все символы пунктуации, пробелы и регистр букв.

Если драйвер уже установлен на сервере, но еще нет принтера, вы можете проверить список установленных драйверов. Просто откройте апплет «Printers» в панели управления и щелкните вкладку “Drivers” в апплете File | Server Proprieties. В нем содержится полный список драйверов, инсталлированных на терминальном сервере.

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

Последовательность отображения клиентского принтера

При входе пользователя на сервер терминалов, сервер предпринимает ряд шагов для поиска подходящего драйвера

  1. Из реестра берется список локальных принтеров клиента
  2. Сервер запрашивает строки имен драйверов принтеров клиента.
  3. Сервер ищет имена драйверов в файле сопоставления .INF.
  4. Если соответствия не найдено, сервер ищет соответсвие в секции [Previous Names] встроенного файла “ntprint.inf”
  5. Если сервер опять не нашел имя, он проверяет имя драйвера в ключе реестра
    HKLM\System\CurrentControSet\Control\Print\Environments\Windows NT x86\Drivers
  6. Если информация о принтере не найдена в реестре, это означает, что драйвер не установлен. Тогда сервер проверяет, находится ли драйвер среди сотен стандартных принтеров, доступных в Windows. Для этого он возвращается к стандартному файлу ntprint.inf и просматривает секцию [Manufacturer]. Если найдено совпадение, сервер автоматически инсталлирует драйвер, распаковывая файл Driver.cab из каталога %systemroot%Driver Cachei386 сервера.
  7. Если один их этих шагов завершился успехом, сервер создает динамический принтерный порт, указывающий на реальный принтер на клиентском устройстве. Этот порт отображается через виртуальный канал RDP. Затем сервер создает для пользователя объект принтера с необходимыми привилегиями (и используя подходящий драйвер).
  8. Если сервер не смог найти подходящий драйвер, то клиентский принтер не отображается в сеансе и в журнал событий занросится запись, что принтер не может быть отображен.
  9. Сервер возобновляет весь процесс для следующего клиентского принтера.

В общем, процесс инсталляции драйвера в Terminal Server 2003 проходит достаточно гладко. Проблемы возникают в основном из-за несовместимых драйверов, которые приводят к краху сервера, но это не такая проблема, как была во времена NT 4 (масса обычных драйверов вызывала синий экран смерти, когда несколько пользователей пытались печатать одновременно).

Ограничение количества инсталлированных драйверов

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

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

  • Отобразить несколько драйверов на один драйвер
  • Использовать решения сторонних разработчиков (обсуждается ниже)

Давайте рассмотрим, как мы можем использовать сопоставление имен драйверов с помощью файла .INF для управления количеством инсталлированных драйверов на сервере. Помните, что файл может содержать несколько записей драйверов клиента для одного драйвера сервера. Это означает, что один драйвер сервера может поддерживать десятки и даже сотни разнообразных моделей клиентских принтеров. Например, известно, что многие драйверы LaserJet работают с другими принтерами LaserJet. Вы можете указать, чтобы все принтеры HP LaserJet 4, HP LaserJet 4M, HP LaserJet 4 Plus, HP LaserJet 4M Plus, HP LaserJet 4L и HP LaserJet 4ML использовали один и тот же драйвер “HP LaserJet 4”. Это позволит использовать один драйвер для шести моделей принтеров. Для этого настройте сопоставление в файле .INF следующим образом:

 [Printers]
 ;"Client Printer Driver Name" = "Server Printer Drive Name"
 "HP LaserJet 4M" = "HP LaserJet 4"
 "HP LaserJet 4 Plus" = "HP LaserJet 4"
 "HP LaserJet 4M Plus" = "HP LaserJet 4"
 "HP LaserJet 4L" = "HP LaserJet 4"
 "HP LaserJet 4ML" = "HP LaserJet 4"

На самом деле HP имеет общий драйвер LaserJet (называемый «HP LaserJet”), который можно использовать для любого принтера LaserJet, а общий драйвер DeskJet (“HP DeskJet”) можно использовать для любого принтера DeskJet. Добавление таких записей в файл.INF позволит поддерживать десятки разнообразных типов принтеров всего парой драйверов.

Вы также можете использовать «сопоставление альтернативных драйверов», чтобы сопоставить драйвер одного производителя и принтер другого производителя.

Помимо поддержки меньшего количества драйверов вы можете получить также выгоду в производительности. Файл печати, передаваемый через RDP клиенту, создается драйвером печати. Все драйверы не одинаковы. Некоторые принтеры очень эффективны при создании файлов печати, особенно это касается брэндов. Однако, мы, администраторы, не всегда можем влиять на то, какие принтеры используют пользователи. С большой долей вероятности они покупают не дорогостоящие брэндовые принтеры, а дешевые за $25. Такие принтеры зачастую имеют крайне неэффективные драйверы и создают файлы печати по мегабайту на страницу. Программисты, пишущие такие драйверы, скорее всего не представляют, что кому-то придет в голову передавать файлы печати по медленным сетям.

Для борьбы с этим вы можете найти альтернативный драйвер, который будет эффективнее, чем родной драйвер. Можно также использовать альтернативные черно-белые драйверы для цветных принтеров. Изначально черно-белые драйверы создают меньшие файлы, чем цветные. Естественно, пользователи не смогут печатать в цвете, но монохромная печать все же лучше, чем ничего.

Но использование сопоставления альтернативных драйверов наводит на один вопрос — а какие драйверы можно использовать для каких принтеров?

Конечно, это отчасти можно выяснить методом проб и ошибок, но есть и более лучшие способы потратить свое время. К счастью, интернет наполнен прекрасными бесплатными ресурсом, как www.printingsupport.com, которые предоставляют ресурсы по сопоставлению драйверов для администраторов терминальных серверов.

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

Преимущества альтернативных драйверов

  • Пользователи могут печатать на принтерах, родные драйверы которых не поддерживаются
  • Контроль над общим количеством драйверов принтеров в ферме
  • Возможность замены неэффективных драйверов эффективными

Недостатки альтернативных драйверов

  • Теряется часть функциональности принтеров
  • Необходимо выяснить, какой альтернативный драйвер подходит для принтера
  • Необходимо вручную сопоставлять общий драйвер с точным именем каждого драйвера
  • Изменения необходимо применять на все терминальных серверах.

Улучшение производительности клиентской печати

Как уже обсуждалось выше, архитектура печати на клиентских принтерах весьма неэффективна из-за больших объемов заданий печати, пересылаемых через поток RDP. Хотя некоторые методы печати более эффективны (например, использование серверов печати), не всегда есть возможность их использовать. Улучшить производительность печати можно несколькими способами:

  • Уменьшить разрешение печати
  • Использовать решения сторонних разработчиков

Уменьшение разрешения печати

Поскольку при отображении принтера клиенту посылается все задание, пользователи медленных соединений ощущают падение производительности своих сеансов. Величина этого падения пропорциональна размеру отправляемого задания печати. Уменьшение размера задания печати уменьшает его влияние на сеанс клиента. Уменьшив разрешение принтера с 600 DPI до 300 DPI вы можете уменьшить размер задания на 75%.

Дополнительное преимущество состоит в том, что такое задание завершается быстрее, поскольку меньше передается данных. Недостатком является то, что задания, требующие высокого разрешения, будут выглядеть зернистыми, что не всегда приемлимо. Для текста вполне достаточно разрешения 300 DPI.

Управление драйверами печати

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

Как работают драйверы принтеров

В общем, драйверы принтеров Windows транслируют задания печати из формата EMF, независимого от принтеров, в формат, понятный принтеру. Вот почему принтер печатает «мусор», когда используется неправильный драйвер. Перед тем, как использовать драйверы, их необходимо инсталлировать.

При установке драйвера на терминальный сервер или сервер Windows 2000 происходят две вещи. Во-первых, на сервер копируются необходимые файлы драйвера. Сервер сохраняет файлы драйвера в каталоге %systemroot%system32spooldriversw32x863. В имени каталога “w32x86” означает платформу Windows 32-bit, а “3” означает версию драйвера (3 = Windows 2000/XP/2003). Во-вторых, подробности о драйвере записываются в реестр в ключ HKLM\System\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers\Version-3 .

Индивидуальные настройки печати пользователя сохраняются в реестре в ключе HKCU\Printers. Эти настройки специфичны для каждого пользователя и сохраняются в его профиле.

Установка драйверов принтеров

Установка драйверов на терминальный сервер не отличается от установке их на обычном компьютере Windows. Простейший способ состоит в установке через апплет “Printers and Faxes” (Start | Printers and Faxes | File Menu | Server Properties | “Drivers” tab | кнопка “Add” ) На терминальном сервере важно лишь добавить версию драйвера для Windows 2000/XP/2003.

Если требуется установить множество драйверов, вы можете создлать скрипт, используя rundll32.exe для вызова printui.dll (интерфейс вызова свойств принтера).

Если вы используете только стандартные драйверы, входящие в комплект Windows 2003 (в файле “driver.cab”), то можно не заботиться об инсталляции драйверов. Но если у вас есть драйверы, не входящие в комплект Windows 2003, вы можете автоматизировать процесс установки большого количества драйверов, выполнив следующую команду:

rundll32 printui.dll,PrintUIEntry /ia /m "Driver Name" /h "Intel" /v "Version of driver" /f Sourceprint.inf

Заменитите в этой строке Driver Name именем драйвера, как в файле .INF, замените Version of Driver платформой, на которой будете его использовать (обычно Windows 2000 или XP) и замените Sourceprint.inf на маршрут к файлу .INF драйвера. Подробности по использованию rundll32.exe для установки драйверов вы можете получить, дав команду «rundll32 prinui.dll,PrintUIEntry /?” с командной строки. При использовании этой команды обратите внимание, что между prinui.dll и PrintUIEntry нет пробела.

Удаление драйверов

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

К счастью, апплет «Printers and Faxes» в Windows 2003 (и 2000) можно использовать также и для удаления драйверов с сервера терминалов. (Start | Printers and Faxes | File Menu | Server Properties | “Drivers” tab | “Remove”)

В качестве альтернативы вы можете использовать команду “rundll32” с парой опций. Это полезно для удаления драйверов на удаленных машинах. Вот пример использования команды для удаления драйвера на удаленном сервере.

Для удаления драйвера на машине, на которой вы зарегистрировались:

rundll32 printui.dll,PrintUIEntry /dd /m "HP DeskJet 500" /h "Intel" /v "Windows 2000"

Для удаления драйвера на удаленной машине:

rundll32 printui.dll,PrintUIEntry /dd /cComputername /m "HP DeskJet 500" /h "Intel" /v "Windows 2000"

Если эти методы завершились неудачей, вы можете удалить драйвер вручную:

  1. Удалите принтер из папки “Printers”
  2. Остановите службу спулера
  3. Откройте в редакторе реестра ключ реестр HKLM\System\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers\Version-x , где x номер версии (2 = NT 4.0, 3 = Windows 2000/2003).
  4. Запишите имена используемых файлов
  5. Удалите ключ реестра yourprinterdriver.
  6. Удалите файлы драйвера в каталоге %systemroot% system32 spooldriversw32x86x. Если у вас установлено несколько принтеров, вы можете скопировать файлы драйверов во временный каталог перед удалением, поскольку некоторые драйверы используют одни и те же файлы.
  7. Если вы не можете удалить файлы, вам следует запретить службу спулера, перезагрузиться и снова удалить файлы. После этого вновь включите автоматический режим запуск службы спулера.
  8. После удаления драйвера принтера перезагрузите сервер.

Какой драйвер использует принтер?

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

Каждый сервер Windows 2000 и Windows 2003 содержит основной список принтеров, которых он поддерживает, и драйверы, которые требуют принтеры. Этот основной список хранится в файле %systemroot%infntprint.inf. Вы можете открыть этот файл в текстовом редакторе и увидеть, какой драйвер требуется для какого принтера. Записи в Ntprint.inf сгруппированы по призводителям и перечисляют индивидуальные принтеры и их драйверы.

 [HP]
 “HP 2000C” = HPV2000C.GPD.ICM

Репликация драйверов и принтеров

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

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

В средах с балансировкой нагрузки или с кластерами каждый сервер должен быть сконфигурирован идентично остальным. Это означает, что драйверы, принтеры и конфигурация принтеров должны быть одинаковыми для всех серверов кластера. Ручная настройка кластера из 5 серверов с 100 принтерами займет очень много времени. А теперь представьте то же количество принтеров в кластере из 20-30 серверов. Вы быстро придете к мысли, что необходим иной способ управления драйверами.

Существует немного способов перенести принтеры и драйверы, созданные на одном терминальном сервере, на другой терминальный сервер:

  • Репликация с использованием Print Migrator.
  • Ручная репликация
  • Использование инструментов сторонних разработчиков (будет рассмотрено дальше)

Метод 1. Использование Print Migrator

Print Migrator — это утилита от Microsoft, который можно использовать для репликации драйверов принтеров между серверами. Printer Migrator позволяет сохранять принтеры, очереди, драйверы в файл CAB. Затем вы восстанавливаете содержимое CAB на другом сервере. Вы можете использовать этот инструмент даже для миграции принтеров между разными версиями терминального сервера.

Преимущества

  • Можно реплицировать драйверы и принтеры на удаленные серверы
  • Можно реплицировать с сетевого сервера печати на терминальные серверы
  • Print Migrator можно использовать с командной строки и запускать по расписанию из планировщика (запустите printmig /?)
  • Утилита легка в использовани

Недостатки

  • Миграцию необходимо запускать вручную
  • При использовании утилиты служба спулера останавливается
  • Файл CAB может быть довольно большим
  • Целевой терминальный сервер необходимо переводить в режим инсталляции

Метод 2. Репликация вручную

Еще один способ репликации драйверов принтеров состоит сделать это вручную. Вы должны вручную инсталлировать или скопировать все необходимые файлы драйвера на ваши терминальные серверы.

Преимущества

  • Нет кривой обучения
  • Возможность установки разных драйверов на разные серверы
  • Подходит для небольших сред с небольшим числом драйверов

Недостатки

  • Необходимость ручной инсталляции драйверов на каждый терминальный сервер

Настройка принтеров для пользователей

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

Но клиентские принтеры в реальной жизни не всегда используются, поэтому необходимо использовать серверные принтеры. При использовании серверных принтеров вы должны продумать, как пользователи будут осуществлять к ним доступ. Следует ли назначить принтеры для отдельных пользователей? Или дать возможность их использовать всем пользователям? Тогда как пользователи будут знать, какие принтеры им использовать? Для ответа на эти вопросы мы рассмотрим две стратегии:

  • Назначение принтеров пользователям
  • Способы, позволяющие пользователям использовать свои принтеры

Назначение принтеров пользователям

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

Например, если вы хотите, чтобы пользователь “brian” печатал на принтере \\printerserver\fastlaser, вы можете отредактировать свойства этой очереди печати и дать пользователю «brian» привилегии печати. Однако, откуда Брайан будет знать, как получить доступ к принтеру? Достаточно ли он смышлен, чтобы запустить обозреватель сети, найти компьютер \\printserver, выбрать принтер fastlaser? Скорее всего, если вы решите, что Брайан должен использовать принтер \\printserver\fastlaser, то вам потребуется способ назначения ему этого принтера, чтобы когда он выбирает «Печать» из приложения на терминальном сервере, принтер \\printserver\fastlaser показывался в списке принтеров.

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

  • Отображение принтера в скрипте входа
  • Отображение принтера в пользовательском профиле и настройках политики
  • Установка принтера локально на сервере и настройка его прав доступа

Способ 1. Настройка принтеров в скриптах входа

Один из проверенных способов предоставления доступа пользователей к принтерам состоит в отображении принтеров в скрипте входа.

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

Отображение с командной строки
Вы можете использовать команду “rundll32” для отображения пользовательских соединений на сетевые принтеры (этот метод заменяет ранее использовавшуюся менее гибкую утилиту “con2prt.exe”). Для этого добавьте следующие строки в скрипт входа:

rundll32 printui.dll,PrintUIEntry /in printserverprinter

Убедитесь, что между словами “printui.dll” и “PrintUIEntry” нет пробела. Вы можете повторить эту команду несколько раз для разных принтеров.

Отображение принтеров с помощью Kixtart
Если вы в качестве языка скрипта входа используете Kixtart, то можете использовать его собственные возможности для подключеня к сетевым принтерам. Например, следующий код Kixtart проверяет, является ли пользователем членом группы “PrinterGroupName”. Если да, то он добавляет принтер \\printserver\fastlaser и настраивает его как используемый по умолчанию.

 if ingroup(“PrinterGroupName”)
 addprinterconnection (“printserverfastlaser”)
 setdefaultprinter (“printserverfastlaser”)
 endif

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

Преимущества назначения принтеров через скрипты входа

  • Вы можете назначать принтеры на базе пользователей или групп
  • Вы можете назначать разные принтеры на разных серверах
  • Скрипты входа можно использовать разными способами

Недостатки

  • Требуется знание языка скрипта

Способ 2. Нстройка принтеров через профили пользователей

Еще один способ предоставления доступа пользователей к принтерам состоит в использовании перемещаемых профилей. Тогда пользователям потребуется всего один раз подключить принтер. Затем соединение с принтером становится частью перемещаемого профиля и будет автоматически восстанавливаться при последующих входах.

Преимущества назначения принтеров через перемещаемые профили

  • Этот метод работает без скриптов входа
  • Один и тот же принтер доступен вне зависимости от места входа

Недостатки

  • Необходима настройка перемещаемых профилей
  • Первоначально пользователь (или вы) должен вручную настроить принтер.
  • Один и тот же принтер достпен вне зависимости от места входа

Способ 3. Установка принтеров на сервере терминалов

Последний способ нельзя назвать «лучшей практикой», но он работает в небольших сетях с небольшим числом принтеров. Для его использования вам необходимо инсталлировать принтеры локально на сервер терминалов. Это не означает, что вы должны физически подключить принтер к серверу. Это просто означает, что вы должны добавить принтер на сервере как локальный принтер, а не сетевой. Для этого:

  1. Войдите на терминальный сервер под администратором
  2. Запустите мастер “Add Printer”
  3. Выберите “Local printer attached to this computer.”
  4. Убедитесь, что опция “Automatically detect and install my Plug and Play printer” отключена.
  5. Создайте новый порт вместо выбора существующего
  6. Выберите «Standard TCP/IP port».
  7. Введите адрес IP принтера или сервера печати
  8. Настройте нужные опции для выбранного порта

Указанная процедура создает общую очередь печати на терминальном сервере. Хотя эта очередь для удаленного принтера, сервер считает его локально инсталлированным принтером. По умолчанию все пользователи, запускающие сеансы на терминальном сервере, могут печатать на локальные принтеры сервера, т.е. они автоматически имеют доступ к этим принтерам.

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

Основной недостаток такого подхода состоит в том, что очередь печати локальна по отношению к терминальному серверу, подсистема печати сервера создает файл спулера локально и посылает его по сети в сыром формате, а не в EMF (в некоторых случаях, например, при использовании плат JetDirect, это происходит всегда).

Преимущества установки принтеров на каждом сервере

  • Вы можете назначить принтеры просто отредактировав его права доступа
  • Все пользователи сервера терминалов автоматически будут видеть принтер

Недостатки

  • Необходимо конфигурировать каждый принтер (хотя принтеры можно реплицировать утилитой Print Migrator)
  • Этот метод обходит реальные серверы печати в вашей среде
  • Задания печати формируются на сервере терминалов, а не на сервере печати
  • Все пользователи используют одну и ту же очередь печати

Как разрешить пользвателям использовать свои собственные принтеры

Вместо того, чтобы назначать пользователям принтеры, вы можете разрешить пользователям самим выбирать свои принтеры. Это существенно облегчает вашу работу. Если важна безопасность, у вас остается возможность устанавливать привилегии печати.

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

Преимущества

  • Вы можете устанавливать права доступа к принтеру, ограничивая печать на нем
  • Меньше усилий по конфигурации

Недостатки

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

Если ваши пользователи способны настроить свои собственные принтеры через Windows Explorer или папку “Printers” в меню Start, все прекрасно. Но в реальной жизни многие предпочитают не позволять пользователям подключаться к рабочему столу Windows или Windows Explorer, а вместо этого использовать только одно приложение, поэтому пользователи не могут подключить сетевые принтеры, поскольку для этого не имеют доступа к интерфейсу.

Учитывая это, многие администраторы предоставляют пользователям соединение к серверу, которое запускает папку Printers. Конечно, для пользователя это лишний шаг, но зато дает возможность предоставить доступ к ресурсам без предоставления доступа ко всему рабочему столу.

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

Подключение к папке Printers сделать несложно. Эта папка не имеет собственного исполняемого файла, на самом деле она встроена в оболочку Windows (explorer.exe). Такие типы компонентов оболочки называются «расширениями оболочки» (shell extensions). Каждое расширение имеет собственный идентификатор GUID, который напоминает серийный номер и позволяет отличаться от других расширений. Информация о различных расширениях находится в реестре в ключе HKEY_CLASSES_ROOTCLSID .

В случае папки Printer уникальный GUID равен {2227A280-3AEA-1069-A2DE-08002B30309D}.

Любая программа Windows может обращаться к расширению, вызывая explorer.exe и требуемый GUID расширения. Вы можете создать начальное приложение, которое указывает на расширение оболочки — папку Printers. Вот как это сделать:

  1. Создайте новую папку на вашем рабочем столе Windows
  2. Назовите папку “Printers.{2227A280-3AEA-1069-A2DE-08002B3030 9D}” без пробелов внутри имени

Как только вы нажмете Enter, значок для папки изменится на значок принтера. Если вы откроете папку, она будет вылядеть также, как папка Printers в главном меню. Чтобы сделать папку Printers доступной как автономное приложение, вам следует создать командную строку.

  1. Создайте папку с именем “Printers.{2227A280-3AEA-1069-A2DE-08002B30309D}.”
  2. Поместите папку куда-нибудь, откуда она будет запускаться. Например, для каталога c:\print полный путь будет выглядеть так:
    c: printPrinters.{2227A280-3AEA-1069-A2DE-08002B30309D}.
  3. Теперь вам нужно запустить папку с командной строки. Сначала необходимо сделать копию explorer.exe. Назовите копию как угодно, только не explorer.exe. Дело в том, что нужно будет создать вторую копию explorer.exe, а для этого файлы должны называться по-разному.
  4. Скопируйте копию explorer.exe (назовем ее printexplorer.exe) в папку m:\print .
  5. Команда доступа к новой папке будет следующей:
    C:printprintexplorer.exe /n,/root,C:printPrinters.{2227A280-3AEA-1069-A2DE-08002B30309D}.

Эта командная строка начинается с запуска printexplorer.exe с несколькими опциями командной строки. Опция /n указывает открыть однопанельное окно. Опция /root указывает открыть окно в корне, предотвращая использование “Вверх” для браузинга по каталогам. Командная строка завершается полным маршрутом к вашей папке.

Использование инструментов сторонних производителей

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

  • Драйверы принтеров необходимо устанавливать на каждом терминальном сервере для каждого клиентского принтера
  • Плохая производительность клиентской печати, как с точки зрения больших объемов пересылаемых по сети данных, так и с точки зрения нагрузки на сервер для визуализации заданий.
  • Нет хороших готовых решений в ситуации, когда сервер и клиент RDP разделены медленным каналом WAN.

К счастью, есть программные решения третьих фирм, помогающие решать эти проблемы. Наиболее известны следующие производители:

 Emergent Online (EOL): большая консалтинговая компания, которая также производит программное обеспечение для облегчения администрирования в среде с множеством тонких клиентов.
• ThinPrint: немецкая компания, фокусирующаяся на решении проблем с печатью в мобильных средах и средах с низкой пропускной способностью.
• triCerat Software: предлагает ряд продуктов, которые помогают упростить управление в терминальной среде, включая решения, связанные с печатью.
• Qnetix: компания, предлагающая продукт Uniprint

Поскольку встроенные решения печати в терминальном сервере довольно бедны, стоит рассмотреть решения сторонних разработчиков. После этого раздела вы поймете, нужны ли вам эти продукты и как они смогут вам помочь. Все четыре производителя предоставляют 30-дневные пробные версии своих продуктов.

Инструменты перечисленных разработчиков можно разбить на две группы:

  • Продукты, которые инсталлируют на терминальный сервер «универсальный» драйвер, который работает с любым принтером: в эту группу попадают EOL, Qnetix и конечно Citrix.
  • Продукты, которые позволяют печать на базе EMF — ThinPrint и triCerat.

Продукты универсального драйвера принтера (UDP)

Универсальный драйвер от EOL, Qnetix и Citrix позволяет инсталлировать на сервер терминалов один «универсальный» драйвер, который будет использоваться для любого принтера. (Этот драйвер, к сожалению, не будет работать для специфических принтеров, таких как плоттеры, принтеры этикеток и принтеры штрих-кодов).

Во время печати подсистема печати терминального сервера использует универсальный драйвер для визуализации задания в файл PDF или PCL (в зависимости от продукта). Затем задание печати передается на устройство клиента, где локальная подсистема печати передает его в нужную очередь печати.

  1. Пользователь запускает печать из приложения на сервере терминалов
  2. GDI сервера создает файл EMF
  3. Подсистема печати отправляет файл EMF в локальный спулер
  4. Спулер печати использует универсальный драйвер для визуализации задания печати в универсальный формат (PDF или PCL)
  5. Файл PDF/PCL передается клиенту RDP. Некоторые продукты делают это через виртуальный канал протокола RDP, другие — через TCP/IP.
  6. Компонент ПО на стороне клиента получает файл PDF/PCL.
  7. Компонент ПО на стороне клиента запускает локальный процесс печати. GDI клиента генерирует файл EMF на устройстве клиента.
  8. Спулер клиентского устройства визуализирует задание печати с помощью локально установленного драйвера принтера.
  9. Задание печати передается на принтер клиента.

Преимущества универсального драйвера

  • Универсальный драйвер позволяет печатать на любом принтере, не требуя установки разнообразных драйверов на терминальном сервере.
  • Вы можете не беспокоиться о том, какой принтер использует клиент. Этот принтер можно заменить, не предупреждая администратора.
  • Файлы PDF / PCL меньше, чем сырые задания печати, что ускоряет печать и уменьшает нагрузку на сеть.

Недостатки

  • Задания печати визуализируются на сервере, что потребляет его ресурсы
  • Поскольку файлы PDF/PCL сжимаются, сжатие может оказать влияние на качество распечатки.
  • Возможности принтера уменьшаются до «наименьшего знаменателя» — возможностей самого универсального драйвера.
  • Универсальный драйвер подходит не для всех принтеров

Продукты, использующие печать EMF

Продукты ThinPrint и triCerat попадают во вторую группу, известную как продукты для EMF-печати. TriCerat выпускает продукт под названием “ScrewDrivers”, а ThinPrint выпускает “ThinPrint.”

Технически, EMF-печать более высокоуровневая, чем использование UPD, но и более дорогостоящая. triCerat ScrewDrivers и ThinPrint инсталлируют на сервер эмулятор драйвера принтера, который получает данные печати от GDI. Этот подход аналогичен UPD. Однако, в отличие от UPD, эти продукты на базе EMF не визуализируют задания печати. Вместо этого они посылают файл EMF (который не зависит от принтера) на устройство клиента. Там клиентское ПО от triCerat или ThinPrint перенаправляют данные EMF в подсистему печати клиента. Устройство клиента визуализирует задание печати и отправляет его на соответствующий принтер как обычное задание печати вне терминальной среды.

  1. Пользователь запускает печать из приложения на сервере терминалов
  2. GDI сервера создает файл EMF
  3. Компонент ПО на стороне сервера получает файл EMF
  4. Компонент ПО на стороне сервера сжимает и передает файл EMF клиенту RDP. Передача обычно осуществляется по протоколу RDP, но ThinPrint содержит опцию передавать по TCP/IP вне протокола RDP.
  5. Компонент ПО на стороне клиента получает файл EMF
  6. Компонент ПО на стороне клиента передает файл EMF локальному спулеру на устройстве клиента.
  7. Локальный спулер клиента визуализирует задание.
  8. Задание печати передается на принтер клиента.

Преимущества EMF-печати

  • EMF-печать позволяет печатать на любой принтер, не требуя установки разнообразных драйверов на терминальные серверы.
  • Данные EMF меньше по объему, чем сырые задания печати, что увеличивает скорость печати и снижает нагрузку на сеть.
  • Данные EMF также меньше по объему, чем файлы PDF / PCL (используемые в UPD). Кроме того, коэффициент сжатия файлов EMF выше, чем файлов PDF / PCL.
  • Можно не беспокоиться о том, какой принтер у клиента. Его можно заменить без уведомления администратора.
  • Поскольку задания печати визуализируются только на клиенте, вы можете использовать все возможности своего принтера.
  • Поскольку задания печати не визуализируются на сервере, вы не будете испытывать падения производительности, как это бывает с продуктами UPD
  • Документы печатаются с 100% качеством

Недостатки

  • Более дорогое решение, чем универсальный драйвер
  • Более сложное решение, чем UPD

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

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

Проблема состоит в неэффективности использования WAN. Если используются клиентские принтеры, сервер терминалов формирует задание печати целиком перед тем, как послать его через WAN.

Перечисленные инструменты третьих фирм несколько облегчают эту ситуацию.

Продукты на основе UPD посылают данные PDF или PCL клиенту, а клиент вызывает свою локальную подсистему печати и распечатывает документ как обычно.

Решения на базе EMF посылают клиенту сжатые данные EMF, где клиент опять же вызывает свою подсистему печати и распечатывает документ как обычно.

Казалось бы, никаких проблем с продуктами третьих фирм не должно быть. Но что случится, если ваше клиентское устройство подключено по медленному каналу? Или если ваше клиентское устройство работает на платформе, не поддерживаемой перечисленными продуктами?

К счастью, и для этой проблемы есть решение. Некоторые производители предлагают продукты, которые позволяют передавать информацию напрямую на сервер печати, минуя устройство клиента.

Реализация такого подхода зависит от производителя. Поставщики UPD, как EOL и Qnetix, предлагают решения, которые посылают файлы PDF непосредственно на серверы печати, а ThinPrint может посылать данные EMF непосредственно на сервер печати.

Здесь тоже есть свои преимущества и недостатки. Решения на базе EMF лучше с точки зрения производительности и качества, но ценой более высокой стоимости по сравнению с решением на базе UPD.

Пример из реальной жизни

Dina’s Gourmet Food Service

Компания Dina’s Gourmet решила внедрить Windows 2003 Terminal Servers для предоставления доступа к приложениям своим пользователям. Компания имеет 13 офисов и 950 пользователей. Команда проектировщиков произвела инвентаризацию офисов и пользователей. По результатам инвентаризации они смогли сформировать основные приницпы проектирования своей терминальной среды. Теперь необходимо разобраться с печатью. Проектировщики решили, что проще всего создать решение на основе сценариев печати. Рассматривая свой проект терминального сервера, они решили, что существует четыре основных сценария печати:

  • Головной офис: Есть один головной офис с 550 пользовтаелями и 4 терминальными серверами. Вся печать обслуживается локальными серверами печати.
  • Региональные офисы. Есть 2 региональных офиса, каждый по 150 пользователей и 5 серверов терминалов. Вся печать обслуживается локальными серверами печати. Однако, этим пользователям также требуется печать из сеансов, выполняющихся на термнальном сервере в головном офисе.
  • Малые офисы. Есть 10 малых офисов, в каждом от 5 до 15 пользователй. В этих офисах нет локальных терминальных серверов — все пользователи запускают приложения на терминальных серверах в головном офисе. В каждом из офисов есть свой файл-сервер, одновременно выполняющий роль сервера печати, с подключенными лазерным и струйным цветным принтерами.
  • Домашние пользователи. Около пятидесяти пользователей работают из дома. У каждого есть свой локальный принтер, подключенный к ноутбуку. Отдел IT распространил «список поддерживаемого оборудования», в котором перечислены четыре разных модели поддерживаемых принтеров.

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

  • Пользователи должны быть способны регистрироваться откуда угодно и должны иметь возможность печатать.
  • Процесс печати не должен сбивать пользователей с толку
  • Печать должна работать с разумной скоростью

Учитывая эти цели, проектировщики решили заняться этими сценариями по отдельности, начиная с головного офиса.

Головной офис

Все принтеры в головном офисе являются стандартными сетевыми принтерами. Большинство серверов печати работают на базе Windows 2000. Все сетевые принтеры стандартные и все имеют платы JetDirect.

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

Кто-то из проектировщиков заметил, что печать из сервера терминалов будет быстрее, поскольку он расположен в центре данных на одной стойке с сервером печати. Задания печати, генерируемые на сервере терминалов, даже не будут выходить за пределы центра данных. Но тут есть одна проблема — на терминальные серверы необходимо устанавливать драйверы принтеров. Некоторые из проектировщиков предложили инсталлировать все драйверы для всех принтеров; другие предложили установить только основные. Чтобы разобраться в этих разных вариантах, давайте глубже разберемся в проблеме.

В головном офисе компании Dina Gourmet есть восемь разных типов принтеров. Три четверти из них составляют принтеры HP LaserJet. Остальные более специализированные, такие как цветные и матричные принтеры. Некоторые проектировщики считают, что все принтеры LaserJet могут использовать один и тот же драйвер, скорее всего драйвер LaserJet 4. Хотя при этом теряется часть функциональности более продвинутых принтеров, можно не поддерживать большое количество разнообразных драйверов.

Другие проектировщики считают, что без проблем можно поддерживать все 8 типов принтеров. Они говорят, что раз это сетевые принтеры, то вряд ли будут использоваться неподдерживаемые принтеры.

В конце концов, проблема с драйверами дошла до CTO. Его видение было неоспоримо. Он сказал: «Мы уже потратили массу денег на крутые принтеры, которые могут печатать с двух сторон бумаги, нумеровать и сшивать. С другой стороны, переход на терминалы должен стать ключевой частью нашей инфраструктуры на следующие пять лет. По этой причине мы должны сделать все, чтобы получить полную отдачу от наших принтеров в терминальной среде.»

Исходя из этого, проектировщики решили установить все родные драйверы принтеров на свои серверы терминалов Windows 2003.

Региональные офисы

В компании Dina Gourmet есть два региональных офиса по 150 пользователей в каждом. Большинство приложений обслуживаются на локальных терминальных серверах. Однако, некоторым пользователям необходим доступ к приложениями на терминальных серверах, расположенных в головном офисе. В обоих случаях все принтеры в региональных офисах являются сетевыми принтерами. Серверы печати на базе Windows 2000 расположены в региональных офисах.

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

Единственная проблема связана с теми пользователями, которым требуется печать из приложений, выполняющихся на терминальных серверах головного офиса. Чтобы разобраться, как настроить для них печать, проектировщики устроили опрос и создали «профиль печати пользователя».

  • Сколько разных принтеров вы используете?
  • Используете ли вы продвинутые функции принтера, такие как двусторонняя печать, сшивка, копирование?
  • Печатаете ли в цвете? Как часто?
  • Используете ли ва разные типы и размеры бумаги?
  • Есть ли у вас дополнительные требования к печати?
  • Печатаете ли вы формы, документы Word, изображения или презентации?
  • Кто просматривает ваши распечатки?
  • Сколько раз в день вы печатаете?
  • Какой у вас тип устройства? Какая операционная система?
  • Сколько страниц вы обычно печатаете одновременно?

Помимо опроса индивидуальных пользователей, проектировщики рассмотрели используемые принтеры и собрали следующую информацию о них:

  • Какова скорость принтера, стр/мин?
  • Как часто принтер используется в течении дня?
  • Как принтер подключен к сети? Доступен ли он через адрес IP или через сервер печати?
  • Какие специальные функции поддерживает принтер, которые могут быть потеряны при использовании альтернативных общих драйверов? Многим ли необходимы эти функции?

Оценка выявила, что лишь двадцати пользователям необходима печать на терминальных серверах в головном офисе. Большинство из них используют рабочие станции с Windows XP, и лишь немногие — тонкие клиенты HP Evo. Некоторым пользователям требуется печать в цвете, и они печатают довольно часто. Они используют принтеры HP LaserJet 8000N и печатают с двух сторон бумаги.

На основе анализа и собранной информации, проектировщики составили следующие требования:

  • Платформа клиента должна быть Windows XP и Windows CE.
  • Монохромная и цветная печать
  • Высокая скорость
  • Принтер должен поддерживать двустороннюю печать

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

Малые офисы

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

В этом случае проектировщиеи решили использовать такую же схему, как в региональных офисах и внедрить продукты третьих фирм.

Домашние пользователи

Наконец, проектировщики обратили внимание на домашних пользователей. Эти пользователи запускают приложения на серверах головного офиса. Большиснтво домашних пользователей имеет локальные принтеры. Эти принтеры подключены к ноутбукам по USB или LPT. Основная проблема состоит в том, что заранее неизвестно, какие принтеры пользователи будут использовать.

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

  • Любая модель компьютера
  • Любая операционная система
  • Любая модель принтера
  • Низкоскоростное соединение (через модем)
  • Нет вмешательства пользователя

Все эти требования естественно приводят к единственному решению: программы третьих фирм. Серверный компонент ПО устанавливается на каждый терминальный сервер. Клиентский компонент устанавливается на каждом устройстве клиента RDP. После установки клиента, сервер терминалов отправляет клиенту небольшой файл в формате EMF.
Оригинал : admin.notes.org.ua/printing-guide-to-terminal

Запись опубликована в рубрике *Windows. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91