Все приглашаются улучшить эту страницу, потому что я пишу пока чисто теоретически на основе сведений из 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.
Настройка 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.
В свойствах принтера «Дополнительные параметры», нужно отключить внутренние шрифты принтера.
Часто используемый TCP/IP протокол, описанный в RFC 1179. Краткое описание:
Соединение устанавливается с портом 515/TCP принтера. Соединение будет отвергнуто, если принтер занят.
После того, как соединение будет установлено, к принтеру посылается запрос команды, и если печать разрешается, в ответ будет получено подтверждение согласия.
Задание на печать отправляется на принтер.
Соединение с принтером закрывается.
Большой проблемой является невозможность узнать состояние принтера в процессе печати. Чтобы получить информацию об ошибке, необходимо установить повторное соединение.
APP Socket
Поддерживается Tektronix и некоторыми другими производителями. Он похож на Socket API, с некоторыми отличиями:
Используются порты 9100/TCP и 9101/UDP
При получении принтером пакета нулевой длины или содержащего только CR/LF на порт 9101, принтер возвращает пакет с информацией о своём состоянии.
Для отправки задания, устанавливается соединение с портом 9100. Соединение отвергается, если принтер занят или к нему уже осуществлено подключение.
После установки соединения, задание отправляется по нему. После передачи соединение должно быть отключено (shutdown) для отправки, но остаться открытым для приёма (сообщений об ошибках или другой информации).
Символ конца задания (end of job, CTRL-D) в потоке также приведёт к завершению соединения.
После того, как данные будут получены полностью, а задание распечатано, соединение будет завершено со стороны принтера.