@ Карта сайта News Автора!

Bog BOS: Сетевая печать

Последние изменения:
2015.11.18: hard: обновлена статья про ИБП и их мониторинг

Последнее изменение файла: 2008.10.16
Скопировано с www.bog.pp.ru: 2016.07.27

Bog BOS: Сетевая печать

Подсистема сетевой печати состоит из:

Подключение обычного принтера к сети с помощью JetDirect EX

В качестве примера разберем подключение к сети обычного принтера с помощью устройства HP JetDirect EX (HP J2382B). Принтер подключается к JetDirect с помощью усовершенствованного параллельного интерфейса (Centronics, Bitronics, IEEE 1284). Все попавшиеся мне под руку принтеры подключались без проблем.

JetDirect EX не имеет клавиатуры и экрана для настройки и памяти для хранения параметров при отключении питания, поэтому все параметры подключения к сети он получает при включении питания с помощью протокола BOOTP (JetDirect, встроенный в принтер можно настраивать с пульта принтера). Формат конфигурационного файла зависит от реализации сервера BOOTP, но необходимо обеспечить следующую информацию:

Файл, который JetDirect запрашивает с TFTP сервера может содержать следующие директивы:

Теперь включаем оборудование:

После изменения любого параметра необходимо "передернуть" питание JetDirect.

Управление JetDirect EX с помощью SNMP

Наш JetDirect EX поддерживает модули RFC1213-MIB (mib-2) и JETDIRECT3-MIB (hpnp.mib из старой поставки JetAdmin), RFC 1759 не поддерживается. Видимо, описание SNMP переменных является стратегическим секретом фирмы-изготовителя, но есть добрые люди, коллекционирующие чужие секреты. Беру у них JDMIB498 и кладу в /usr/share/snmp/mib/JetDirect.mib (использую ucd-snmp, AKA net-snmp). Теперь можно получить всю имеющуюся у агента информацию по команде

snmpwalk -m RFC1213-MIB:JETDIRECT3-MIB -Of адрес-принтера имя-комьюнити .iso

В ветви .iso.org.dod.internet.mgmt.mib-2 доступна стандартная для MIB-2 информация, часть которой может быть полезна (при опросе не забывайте добавлять суфикс ".0"):

Так как к JetDirect подключен принтер, сделанный не HP, то полезной информации в ветви .iso.org.dod.internet.private.enterprises.hp.nm немного (при опросе не забывайте добавлять суфикс ".0"):

JetDirect и присоединенным с его помощью к сети принтером можно управлять, устанавливая следующие переменные (управление IPX и AppleTalk опускаю):

Еще это устройство позволяет посылать прерывания (trap), но с ними я не разбирался.

Сервер очереди печати lpd

Сервер очереди печати lpd (пакет lpr) запускается как обычный сервис (/etc/rc.d/init.d/lpd start), считывает параметры из /etc/printcap. Запросы на постановку задания в очередь, удаление из очереди и выдачу информации принимаются через порт 515/tcp (/etc/services:printer) или сокет /dev/printer для локальных запросов. Печать одного файла - одно задание. Каждое задание имеет уникальный номер. Каждый запрос обслуживается отдельным процессом (используется исключительная блокировка файлов, после аварийного завершения процесса этот файл необходимо удалить, содержит pid и имя файла с описанием текущего задания). Запросы фильтруются с помощью файлов /etc/hosts.equiv и /etc/hosts.lpd (содержит список хостов, с которых разрешена печать). Запросы из каждой очереди обрабатываются по порядку, пропускаются через соответствующий фильтр форматирования и либо выводятся на локальный принтер, либо передаются удалённому серверу печати в соответствии с настройками в /etc/printcap.

Каждая очередь описывается отдельной строкой в /etc/printcap. Файл считывается заново при обработке каждого задания, что позволяет вносить изменения не останавливая сервер печати. Символ "\" в конце строки является символом продолжения строки, продолжение на следующей строке должно начинаться с табуляции. Символ "#" в начале строки используется для комментариев. Строка состоит из полей, разделённых двоеточиями. Первое поле определяет синонимы очереди печати (разделяются символами "|"). Имя "lp" описывает очередь по умолчанию. В начале каждого следующего поля указывается имя поля. Значение численного поля отделяется от имени знаком '#', значение символьного поля - знаком '='. Поля с логическими значениями по умолчанию равны false, их указание в описании очереди устанавливает значение поля в true. Поля:

Очереди хранятся в /var/spool/lpd в каталогах, имена которых совпадают с именем очереди. Сообщения записываются в syslog (тип LPR). Файл minfree в каталоге, хранящем очередь, позволяет задать резервируемое на диске место в блоках. Файлы, имена которых начинаются с "cf", содержат описания заданий, первая буква каждой строки определяет значение строки:

Программа lpr ставит в очередь на печать (соединяется с локальным сервером печати) указанный в качестве параметра файл. Имя очереди по умолчанию берётся из переменной окружения PRINTER или /etc/printcap. Ключи:

lpq - просмотр очереди местного сервера печати. В качестве параметров может указываться идентификатор задания или имя пользователя. По умолчанию выдаётся информация обо всех заданиях в очереди по умолчанию (задаётся переменной окружения PRINTER или в /etc/printcap). Для очередей принтеров на удалённых компьютерах делается запрос к соответствующему серверу печати (он, в свою очередь, также может обратиться далее). Ключи:

lpc - управление сервером печати. Команда и параметры задаются в командной строке или в интерактивном режиме. Команды:

В реализации LPRng добавлена возможность указать "@имя-хоста" после имени очереди и ключи:

lprm - удаление задания из очереди местного сервера печати. По умолчанию удаляется текущее задание пользователя из очереди. Имя очереди по умолчанию берётся из переменной окружения PRINTER или /etc/printcap. Для очередей принтеров на удалённых компьютерах после очистки локальной очереди делается запрос к соответствующему серверу печати (он, в свою очередь, также может обратиться далее). Для удаления конкретного задания необходимо узнать его идентификатор с помощью команды lpq. Можно указать имя пользователя, задания которого необходимо удалить (проверяется имя пользователя и имя хоста, на котором была выполнена команда lpr). Ключи:

pr - утилита для преобразования текстового файла перед печатью (разбиение на страницы и колонки, отступы и заголовки, нумерация страниц).

pac - утилита обработки учётной информации (кто сколько страниц напечатал). Имя очереди по умолчанию берётся из переменной окружения PRINTER или /etc/printcap.

Протокол LPD (RFC 1179) использует по умолчанию порт 515/tcp. Исходящий порт должен быть привилегированным (менее 1024; в стандарте указано от 721 до 731). Первый байт сообщения определяет его тип, далее идёт имя очереди печати и параметры. Сообщение завершается сиволом '\n'. Типы сообщений:

В новых дистрибутивах Red Hat работа lpr, lpq, lprm эмулируется системами LPRng или CUPS.

printtool

Пакет printtool (printtool-3.0-14 в RH4.1; printtool-3.29-3 и rhs-printfilters-1.46-3 в RH5.2), написан на Tcl/Tk, обеспечивает графический интерфейс для настройки /etc/printcap (локальные, удалённые и SMB принтеры). Настроенный с помощью printtool /etc/printcap не стоит изменять вручную. Для преобразования файлов в формате Postscript в формат печати используется ghostscript. Каталог /usr/lib/rhs/printtool (/usr/lib/rhs/rhs-printfilters) содержит набор фильтров (Postscript в ASCII, TIFF в PNM, PNM в Postscript и др.), master-filter (автомагический фильтр, распознающий тип печатаемого файла и строящий цепочку фильтров от исходного формата файла в формат, понимаемый принтером), smbprint (скрипт для печати на SMB принтерах).

SVR4 lp

Команда lp посылает запрос на печать. В качестве аргументов указываются имена файлов ("-" означает стандартный ввод). Ключи:

Команда cancel посылает запрос на удаление запроса из очереди печати. В качестве параметра указывается идентификатор запроса (возвращается командой lp) или имя очереди. Ключи:

Команда lpstat выводит информацию о соостоянии подсистемы печати. В качестве параметра указывается идентификатор запроса (возвращается командой lp) или имя очереди. Ключи (вместо списка можно использовать магическое слово "all"):

Работа lp, lpstat, cancel эмулируется системами LPRng или CUPS.

RK

Печать на лазерный принтер в RK осуществляется при нажатии клавиш F4 и H (раскладка PC), если курсор находится в строке с именем файла. Символы с атрибутом инверсия печатаются жирным шрифтом. Символы с атрибутом пониженной яркости печатаются курсивом. Строка с именем файла в файле-каталоге или строке запроса может содержать ключи печати.

RK запускает при этом скрипт /dss/bin/php с ключами и именем файла (преобразование делает /dss/bin/prkhp, результат передаётся lpr [-P имя-очереди]). Скрипт можно использовать и самостоятельно. Ключи также могут браться (служебный скрипт /dss/rk/kph) из файлов (приоритет в указанном порядке): имя-файла.ph, .суффикс.ph, .ph из каталога, /dss/bin/.ph. Ключи (имеется множество дополнительных ключей для печати специальных файлов типа платёжного поручения):

LPRng

LPRng (ранее назывался PLP - Public Line Printer) представляет собой улучшенную реализация сервера печати lpr/lpd из Unix BSD. Умеет также имитировать поведение lp/lpstat из SystemV. Запросы обоих форматов попадают в одну очередь. Поддерживает SSL аутентификацию, балансировку загрузки (несколько принтеров на одну очередь), интерфейс с SAMBA. Фильтр ifhp (ASCII, HP PCL, PostScript) не поставляется в дистрибутиве Red Hat.

В дополнение к /etc/printcap информация может храниться в ~/.printcap. В printcap необязательно указывать '\' в конце строки для продоления её на следующей строке, но первый значимый символ строки продолжения д.б. ':'. Имеется оператор include (необходимо указывать абсолютное имя файла). Числа можно записывать в шестнадцатеричном формате (0x1F). Логические переменные можно устанавливать (:flag:) и сбрасывать (:flag@:). Дополнительные поля (некоторые):

По умолчанию, имя очереди берётся из переменной окружения PRINTER, LPDEST, NPRINTER, NGPRINTER; если ни одна из них не установлена, то используется первая строка /etc/printcap или значение default_printer в lpd.conf

Настройка LPRng и значения по умолчанию для printcap задаются в /etc/lpd.conf (lpd.conf(5)). Начальные пробелы в строках игнорируются, комментарии начинаются с символа '#'. Строка продолжения должна завершаться '\'. Каждая строка задаёт значение параметра в виде (как в printcap)

Макроподстановка:

Параметры:

Права пользователей на печать определяются в файле /etc/lpd.perms (параметр perms_path в /etc/lpd.conf). Комментарии начинаются с символа '#'. Каждая строка файла содержит правило ACCEPT или REJECT. Правила просматриваются последовательно до первого успеха. Если не подошло ни одно правило, то используется значение из последней директивы DEFAULT. Формат (несколько ключей в строке действуют как логическое И; можно использовать символьные шаблоны (*, []), шаблоны IP адресов (192.168.0.0/24) и интервалы чисел (PORT=1-1023); шаблоны можно чтать из файла - </имя-файла):

Ключи и значения:

Фильтры lpbanner, pclbanner, psbanner создают титульную страницу в формате ASCII, HP PCL и PostScript соответственно.

Фильтр lpf предназначен для указания в printcap.

Утилита checkpc позволяет проверить и исправить /etc/printcap и файлы в каталоге очереди печати.

Прямая печать на JetDirect EX (порт 9100)

JetDirect EX - это очень старое устройство, которое не поддерживает протокол lpd. Софт от HP делает SNMP (udp/161) запрос к JetDirect EX, на который он рассказывает об открытых портах: tcp/9099 и tcp/9100. Cтандартный lpr безуспешно пытается обратиться к lpd (tcp/515).

В процессе изучения LPRng (в сочетании с redhat-config-printer) наткнулся на netcat, решивший все мои текущие проблемы (мне всего-то надо раз в день напечатать текстовый или PS-файл). Устанавливаем netcat (например, из contrib). В /usr/local/bin уже лежит фильтр для преобразования PS в PCL (ps2pcl.sh). Добавляем туда же:

  tojd.sh
/usr/sbin/nc имя-принтера 9100
  pstojd.sh
ps2pcl.sh | tojd.sh

Теперь вместо команды lp/lpr для печати PS-файлов надо использовать pstojd.sh.

Сервер печати HP network printer: порты 22370/udp и 22370/tcp (сервис hpnpd в /etc/services).

redhat-config-printer

redhat-config-printer (aka printconf, пакет redhat-config-printer-0.6.47-1 в RH9; system-config-printer в RHEL, Fedora Core, Fedora) берёт исходную информацию из БД конфигурации (используется alchemist, xml/gzip) и заново создаёт /etc/printcap или /etc/cups/. Не стоит изменять их вручную, т.к. при запуске lpd или cups они будут обновлены из БД (/etc/alchemist/namespace/printconf/), либо необходимо убрать запуск /usr/sbin/printconf-backend в init.d (cups и lpd). При обновлении БД /etc/printcap.local добавляется после генерации к /etc/printcap без изменений, т.е. в него можно добавлять принтеры для LPRng. Очереди, описанные в файлах CUPS без использования printconf, используются CUPS, но не отображаются printconf. В RH9 поддерживается как CUPS (по умолчанию), так и LPRng (какая система печати используется определяется в rc.d). В RHEL 5 поддерживается только CUPS. Имеет текстовый (-tui) и графический (-gui, требуется ssh -Y) вариант. Вывод БД в формате XML:

redhat-config-printer-tui --Xexport

Восстановление БД (ключ --merge позволяет добавить вместо замещения; после восстановления необходимо перезапустить cups или lpd):

redhat-config-printer-tui --Ximport

Работа из командной строки (полезно для %post в kickstart; имя изготовителя (MFOMATIC) и модели из БД foomatic (Generic-PCL_6_PCL_XL_Printer, pxlmono); необходимо перезапустить cups или lpd):

redhat-config-printer-tui --X[add|remove]-local --device=/dev/lp --make=имя-изготовителя
   --model=имя-модели --name=имя-очереди [--as-default]
redhat-config-printer-tui --Xdefault --queue=имя-очереди

При установке нового принтера запрашивается:

Параметры могут быть изменены в дальнейшем. Имеется кнопка для установления принтера по умолчанию. После внесения изменения в БД (кнопка Apply), printconf перезапускает сервер печати. При использовании CUPS возможно разрешить доступ к очереди печати для внешних пользователей (Action -> Sharing) и эмуляцию lpd сервера.

Драйвер преобразует данные из формата прикладной программы в формат, понимаемый принтером. Такое преобразование должно производиться только один раз, т.е. если мы подключаемся к внешнему серверу печати, то на нём уже может работать драйвер. В этом случае необходимо указывать тип драйвера RAW (изготовитель Generic) или PostScript (изготовитель Generic), если все прикладные программы выводят в PostScript.

Вспомогательные программы:

xfprint для Xfce.

Сервер печати CUPS

Сервер печати CUPS (подарок от Easy Software Products).

cups.d(8)

cupsd.conf(5) - основные настройки, формат похож на формат файла настройки Apache, в частности:

printers.conf (может формироваться службой printconf.

lpoptions

client.conf - позволяет задать шифрование при обмене данными с клиентами (SSL).

classes.conf(5).

/usr/share/doc/cups*.

В /var/spool/cups/ хранятся заголовки заданий, в т.ч. выполненных.

Обслуживание протокола lpd сделано через xinetd (/etc/xinetd.d/cups-lpd).

Пакет foomatic содержит настройки для различных принтеров.

При отсутствии пакета ghostscript задание зависает в очереди навсегда.

Сервер печати D-Link DP-300U

D-Link DP-300U (DP300UE...A1, H/W ver. A1, F/W ver. 1.20 ) представляет собой аппаратный сервер печати c двумя портами IEEE-1284 (LPT, bi-directional, PJL, high speed) и одним портом USB 1.1, подключаемый к Fast Ethernet (100Base-TX, autonegotiate). Поддерживает протоколы TCP/IP (lpr/lpd), NetBEUI, AppleTalk. Управление с помощью HTTP, telnet или SNMP. Адрес по умолчанию - 192.168.0.10/24, сначала подключить сервер печати к LAN, подключить принтер, включить его, затем включить питание сервера печати. Можно переключить на получение адреса по DHCP.

Сервер печати JetDirect 170x

Сервер печати JetDirect 170x (J3258C, хотя к нему прилагается документация для J3258B; ROM: F.08.08; Firmware: F.08.52) представляет собой аппаратный сервер печати с одним портом IEEE-1284 (LPT, bi-directional, high speed), подключаемый к Ethernet (10Base-TX, обязательно heart-beat). Имеются лампочки статуса и работы. Имеется кнопка, посылающая тестовую страницу на принтер (в зависимости от времени удержания выбирается язык описания страницы: HP PCL, ASCII, Postscript, HP-GL/2). Сброс настроек осуществляется при включении питания при нажатой кнопке Test (удерживать 5 секунд). GDI-принтеры не поддерживаются. Управление с помощью HTTP (HTTPS в старших моделях, требуется Java и доступ в интернет, загруженный Java-аплет управляет устройством по протоколу SNMP, а не HTTP), telnet (можно поставить пароль - печатается на экране и передаётся открытым текстом, соединение разрывается по истечению интервала времени) или SNMPv1 (стандартное имя сообщества для чтения - public). Может получать IP-адрес и другие параметры по BOOTP/DHCP (дополнительные параметры могут запрашиваться с TFTP сервера) или вручную, при неудаче через 2 минуты захватывает адрес 192.0.0.192. В крайнем случае можно использовать RARP или "arp -s IP MAC; ping IP" (в течении 2 минут после включения!). DHCP с первого раза не подхватился. Пришлось заходить telnet на 192.0.0.192 и менять параметры вручную (заодно отключил IPX, AppleTalk и DLC/LLC). Поддерживает протоколы печати: LPD (515/tcp), IPP (631/tcp, в настройках необходимо указать http://адрес/ipp/portномер), FTP (имя и пароль игнорируются, не более 3 управляющих сессий и одной сессии передачи данных, в заголовке сессии выдаётся инструкция по использованию), поток данных в порт (RAW, номер порта или портов настраивается). Есть ACL (по IP-адресам), выдача информации на SYSLOG (сервис lpr).

Тэги BOOTP/DHCP:

Некоторые дополнительные параметры (читается с TFTP-сервера, каждый параметр на отдельной строке в виде: имя, двоеточие, значение; комментарии начинаются с символа '#'):

Команды telnet (установка параметров в виде "имя-параметра: значение"):

Некоторые параметры можно настроить только через web-интерфейс (это тот, который запускает Java-аплет, роняющий через раз браузер и который общается с устройством по SNMP). Например, реакция на ошибку принтера.

Как его перезагрузить из telnet? Приходится ждать пока не истечёт интервал лизинга DHCP (при этом заново читаются все настройки DHCP и файл TFTP).

Ссылки

@ Карта сайта News Автора!

Bog BOS: Сетевая печать

Последние изменения:
2015.11.18: hard: обновлена статья про ИБП и их мониторинг

TopList

Copyright © 1996-2015 Sergey E. Bogomolov; www.bog.pp.ru (КГБ знает все, даже то что у Вас на диске ;)