Вход:  Пароль:  
FreeSource: Статьи/СетеваяПечать ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

Протоколы сетевой печати


Оглавление документа


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

Вступление


Когда в очередной раз я задумался о том, как бы на тонком клиенте (который у нас сделан в виде обычной системы на основе Сизифа, загружаемой по сети или с локального диска) обеспечить предоставление подключенных к нему устройств печати в сеть, и в очередной раз поборолся со связкой Samba+CUPS+Ghostscript, занимающей кучу места и имеющей кучу возможности глючить, то выяснилось, что в LTSP, к примеру, тихо и преспокойно используется простая и надёжная технология – предоставление устройств печати по протоколу Socket API (Jet Direct?).


Существующие протоколы печати можно поделить на две части, в зависимости от того, располагается очередь печати на стороне клиента или принтера (серверы печати). К первым относятся LPD, Jet Direct?, App Socket? (по сути просто предоставляющие порт принтера в сеть), ко вторым – IPP (CUPS) и SAMBA (сложные программные продукты, осуществляющие буферизацию заданий, их перенаправление, учёт и пр.).

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

Jet Direct?


Для сети Jet Direct? – это устройство, имеющее IP-адрес и предоставляющее порт принтера по протоколу TCP/IP на порту 9100.


Преимущества перед IPP

Минусы:


Индустриальный стандарт Socket API, под названием Jet Direct? используется компанией HP в своих устройствах.

Настройка на клиентской стороне


В CUPS настраивается через указание адреса принтера "socket://host:9100".
В Windows – через создание локального порта Stardart TCP/IP (Стандартный TCP/IP), выбрать HP Jet Direct?.

Аппаратная реализация


В первую очередь это используется в продукции HP – по протоколу Jet Print? работают её принт-серверы, которые могут быть как встроенные в принтер, так и внешние, допускающие подключение любого принтера к сети.

Программная реализация


lp_server – программа, которая ожидает задания на порту 9100/TCP и перенаправляет их в порт принтера напрямую (параллельный порт /dev/lp0), без буфера.
Разрабатывается в рамках проекта LPRng.
Поддерживает параллельные (USB тоже?) и последовательные принтеры и запускается как сервис.
Пример запуска:

App Socket?

http://etherboot.sourceforge.net/p910nd/
p910nd может быть настроен для запуска через xinetd. Поддерживает только параллельный интерфейс (и USB?)
Использует port 9100 + n, получаемые задания направляет в порт напрямую, без буфера.
В CUPS настраивается как App Socket? protocol, адрес принтера указывается как socket://host:9100.

PDQ 

http://pdq.sourceforge.net

CUPS


Настройка cups-принтера в Windows.
При настройке сетевого принтера указывается путь к принтеру в виде http://server:631/printers/название или http://server:631/classes/название, в зависимости от того, используются
ли классы принтеров. Посмотреть точный путь лучше через веб-интерфейс, перейдя на конкретный принтер.
Драйвер принтера выбрать HP Laser Jet? 1200 Series PS (MS), либо для своего принтера, но тогда нужно разрешать raw-режим в CUPS, раскомментировав в /etc/cups/mime.types строку

и в /etc/cups/mime.convs

Это действительно для CUPS до версии 1.4.
В свойствах принтера «Дополнительные параметры», нужно отключить внутренние шрифты принтера.


Описание протоколов

Протокол Socket API 

  1. Пользователь устанавливает соединение с портом 9100. Соединение может быть отвергнуто, если принтер занят.
  2. После установки соединения по нему отправляется задание к печати. При передаче могут быть сформированы и переданы обратно сообщения об ошибках.
  3. После завершения отправки, отправитель наполовину (half-close) закрывает соединение. Это говорит принтеру, что данные больше передаваться не будут.
  4. После завершения печати задания, принтер закрывает соединение со своей стороны.

Пример использования с помощью программы netcat:

LPD 


Часто используемый TCP/IP протокол, описанный в RFC 1179. Краткое описание:

  1. Соединение устанавливается с портом 515/TCP принтера. Соединение будет отвергнуто, если принтер занят.
  2. После того, как соединение будет установлено, к принтеру посылается запрос команды, и если печать разрешается, в ответ будет получено подтверждение согласия.
  3. Задание на печать отправляется на принтер.
  4. Соединение с принтером закрывается.

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

APP Socket


Поддерживается Tektronix и некоторыми другими производителями. Он похож на Socket API, с некоторыми отличиями:

  1. Используются порты 9100/TCP и 9101/UDP
  2. При получении принтером пакета нулевой длины или содержащего только CR/LF на порт 9101, принтер возвращает пакет с информацией о своём состоянии.
  3. Для отправки задания, устанавливается соединение с портом 9100. Соединение отвергается, если принтер занят или к нему уже осуществлено подключение.
  4. После установки соединения, задание отправляется по нему. После передачи соединение должно быть отключено (shutdown) для отправки, но остаться открытым для приёма (сообщений об ошибках или другой информации).
  5. Символ конца задания (end of job, CTRL-D) в потоке также приведёт к завершению соединения.
  6. После того, как данные будут получены полностью, а задание распечатано, соединение будет завершено со стороны принтера.

IPP (CUPS)


Ссылки


Ссылок на эту страницу нет



 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]