В качестве примера разберем подключение к сети обычного
принтера с помощью устройства HP JetDirect EX
(HP J2382B). Принтер подключается
к JetDirect с помощью усовершенствованного параллельного интерфейса
(Centronics, Bitronics, IEEE 1284). Все попавшиеся мне под руку принтеры
подключались без проблем.
JetDirect EX не имеет клавиатуры и экрана для настройки
и памяти для хранения параметров при отключении питания, поэтому все параметры
подключения к сети он получает при включении питания с помощью протокола
BOOTP (JetDirect, встроенный в принтер можно
настраивать с пульта принтера). Формат конфигурационного файла зависит от
реализации сервера BOOTP, но необходимо
обеспечить следующую информацию:
адрес сервера SYSLOG для передачи сообщений об
ошибках (источник по умолчанию: lpr; уровень: error, notice, info)
простое имя принтера (рекомендую четную длину имени, т.к. я наткнулся
на ошибку в firmware)
указание, что вспомогательная информация должна передаваться в
соответствии с RFC 1048 (RFC 1084)
имя TFTP файла, содержащего прочие параметры принтера (рекомендуется
выбирать плохо угадываемое имя, т.к. этот файл может содержать
пароли SNMP доступа, а средств авторизации у протокола TFTP нет)
Файл, который JetDirect запрашивает с
TFTP сервера может содержать следующие
директивы:
idle-timeout: 120 (в секундам, время удержания TCP соединения)
syslog-facility: lpr, local0 - local7
allow: адрес-сети маска-сети (до 10 штук, сюда обязательно надо
вписать список хостов, с которых разрешена печать, а то хакеры всю бумагу
изведут :)
name: полное-доменное-имя (sysName)
location: параметр-SNMP-sysLocation
contact: параметр-SNMP-sysContact
get-community-name: public (JetAdmin для MS W95/98 другого не понимает,
а доступ иметь хочет)
set-community-name: большой-секрет
trap-dest: адрес-для-посылки-SNMP-trap (до 4 штук)
trap-community-name:
authentication-trap: on
old-idle-mode: off (принимать TCP соединение даже при выключенном принтере)
subnets-local: off (использовать пакеты размером 1460 байт для нелокальных
подсетей, иначе 536 байт)
Теперь включаем оборудование:
запускаем BOOTP сервер
запускаем TFTP сервер
настраиваем syslog сервер
подключаем принтер к JetDirect
подключаем JetDirect к Ethernet
включаем питание JetDirect и наблюдаем в syslog сообщения от BOOTP,
а затем TFTP серверов о загрузке файлов
включаем питание принтера и наблюдаем в syslog сообщение о готовности
устройства
нажимаем на JetDirect кнопку "Test", чтобы вывести на печать страницу
состояния
После изменения любого параметра необходимо "передернуть"
питание JetDirect.
Наш 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).
Теперь можно получить всю имеющуюся у агента информацию по команде
В ветви .iso.org.dod.internet.mgmt.mib-2 доступна стандартная
для MIB-2 информация, часть которой может быть полезна (при опросе не забывайте добавлять
суфикс ".0"):
Так как к JetDirect подключен принтер, сделанный не HP,
то полезной информации в ветви .iso.org.dod.internet.private.enterprises.hp.nm
немного (при опросе не забывайте добавлять суфикс ".0"):
system.net-peripheral.net-printer.generalDeviceStatus.gdStatusId содержит
информацию о принтере (изготовитель, модель, поддерживаемые языки,
текущий язык и состояние)
Сервер очереди печати 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. Поля:
af=имя-учётного-файла (каждое задание оставляет строки jobstart и jobend с информацией
о хосте, имени пользователя, имени очереди, времени, размере в байтах)
if=имя-фильтра-для-текстовых-файлов (программа вызывается с параметрами:
if [-c] -w$pw -l$pl -iотступ -n имя-пользователя -h хост $af ("-c" передаётся, если
lpr был вызван с ключом "-l"))
lf=имя-файла-сообщений-об-ошибках (/dev/console; для сообщений фильтров)
lo=имя-файла-блокировки (lock)
lp=имя-устройства (/dev/lp, д.б. пустым для удалённого сервера печати)
mx#максимальный-размер-файла (в блоках BUFSIZ, 1000, 0 - нет ограничений)
of=имя-выходного-фильтра (в отличие от if вызывается один раз на всех)
pl#число-строк-на-странице (66)
pw#число-символов-на-строке (132)
px#пикселов-на-строке (0)
py#пикселов-на-странице (0)
rg=имя-группы (только члены группы могут печатать в эту очередь)
rm=имя-хоста (притер подключён на указанном хосте)
rp=имя-очереди-на-удалённом-хосте (lp)
rs (разрешать печать только тем удалённым пользователям, которые имеют местные учётные
записи)
rw (открывать устройство на чтение и запись)
sb (короткий заголовок из одной строки)
sc (игнорировать параметр, задающий число копий)
sd=имя-каталога-для-очередей (/var/spool/lpd; один принтер на каталог!)
sf (игнорировать перевод страницы)
sh (не печатать заголовки страниц)
st=имя-файла-состояния (status)
...
Очереди хранятся в /var/spool/lpd в каталогах, имена которых совпадают с именем очереди.
Сообщения записываются в syslog (тип LPR).
Файл minfree в каталоге, хранящем очередь, позволяет задать резервируемое на диске
место в блоках. Файлы, имена которых начинаются с "cf", содержат описания заданий,
первая буква каждой строки определяет значение строки:
J - имя задания (задаётся прикладной программой, например: имя файла или _stdin_)
C - класс (A)
L - имя пользователя для печати в заголовке
T - заголовок для pr
H - имя хоста, на котором был запущен lpr
P - имя пользователя, запустившего lpr
M - почтовый адрес, куда послать извещение о завершении
W - число символов в строке (для pr и прочих фильтров)
I - отступ слева (в символах)
U - удалить файл после печати
S - файл является символьной ссылкой
N - имя печатаемого файла (до форматирования) или _stdin_
f - имя файла, содержащего уже отформатированный документ
l - имя файла с отформатированным документом, содержит управляющие символы
p - имя файла, который необходимо пропустить через pr перед печатью
o - файл в формате Postscript
t - файл в формате вывода troff
n - файл в формате вывода ditroff
r - файл в формате DVI
g - файл в формате вывода plot
c - файл в формате вывода cifplot
v - файл в растровом формате
r - текстовый файл с управляющими символами как в Фортране
1234 - имя файла, содержащего шрифт troff (форматы соответственно R, I, B, S)
Программа lpr ставит в очередь на печать (соединяется с локальным
сервером печати) указанный в качестве параметра файл.
Имя очереди по умолчанию берётся из переменной окружения PRINTER или /etc/printcap.
Ключи:
-P имя-очереди-печати
-# число-копий
-m (послать письмо по завершению печати; LPRng позволяет указать почтовый адрес)
-h (не печататать заголовок)
-C имя-класса (использовать указанное имя в заголовке; LPRng использует для установки
приоритета: A - самый низкий, Z - самый высокий)
-J имя-задания (использовать указанное имя в заголовке)
-U имя-пользователя (использовать указанное имя в заголовке и для учёта,
разрешается только при выполнении с uid сервера печати - для перепостановки
в очередь)
-r (удалить файл после помещения в очередь или завершения печати)
-s (использовать символьную ссылку вместо копирования файла в очередь)
-p (использовать pr для форматирования текстового файла)
-T заголовок (передать программе pr для печати заголовков страниц)
-i отступ (передаётся pr, в символах, по умолчанию - 8)
-w ширина-страницы (передаётся pr, в символах)
-l (печатаемый файл содержит управляющие символы и не нуждается в разбиении на страницы;
в LPRng можно использовать ключ -b)
-t (файл в формате вывода troff)
-n (файл в формате вывода ditroff)
-d (печатаемый файл имеет формат DVI)
-f (первый символ каждой строки файла интерпретируется как в Фортране)
-g (печатаемый файл имеет формат plot)
-c (печатаемый файл имеет формат cifplot)
-B (использовать фильтры из /etc/printcap; все файлы одним потоком; LPRng)
-G (использовать фильтры из /etc/printcap; каждый файл отдельно; LPRng)
-F спецификация-формата-файла (по умолчанию, печатаемый файл считается текстовым
и к нему применяется фильтр f; LPRng)
-k (не создавать временный файл при печати со стандартного ввода на удалённом
принтере; LPRng)
-R учётная-запись-на-удалённом-компьютере (LPRng)
-V (увеличить уровень болтливости; LPRng)
-X имя-файла-дополнительного-фильтра (выполняется на исходном хосте; LPRng)
-Y (вывод на печать в обход очереди; LPRng; для удалённой печати нужно указать
"-P хост%порт"; для печати на параллельный порт: "-P /dev/lp";
для печати с помощью программы: "-P '|программа"; прямая передача в очередь печати
на удалённом хосте: "-P очередь@хост" )
-Z опция (нестандартные возможности принтеров; LPRng)
lpq - просмотр очереди местного сервера печати. В качестве параметров
может указываться идентификатор задания или имя пользователя. По умолчанию выдаётся
информация обо всех заданиях в очереди по умолчанию (задаётся переменной окружения
PRINTER или в /etc/printcap). Для очередей принтеров на удалённых компьютерах
делается запрос к соответствующему серверу печати (он, в свою очередь, также
может обратиться далее). Ключи:
-P имя-очереди (LPRng: можно указывать имя-очереди@имя-хоста)
-l (выдаётся более детальная информация; LPRng: дополнительные ключи "-l" увеличивают
количество информации)
lpc - управление сервером печати.
Команда и параметры задаются в
командной строке или в интерактивном режиме. Команды:
help [имя-команды]
exit | quit
status {all | имя-очереди}
start {all | имя-очереди} (разрешить печать из очереди)
stop {all | имя-очереди} (после завершения текущего задания запретить печать из
очереди)
restart {all | имя-очереди} (перезапуск сервера после аварийного завершения)
disable {all | имя-очереди} (запретить помещение новых заданий в очередь сервера печати)
enable {all | имя-очереди} (разрешить помещение новых заданий в очередь локального
сервера печати)
down {all | имя-очереди} сообщение (запретить помещение новых заданий в очередь сервера
печати, прекратить печать из очереди, поместить сообщение в строку состояния
очереди)
up {all | имя-очереди} (разрешить помещение новых заданий в очередь, разрешить печать
из очереди, убрать текст сообщения)
topq имя-очереди [идентификатор-задания] [имя-пользователя] (поместить задание
в начало очереди)
abort {all | имя-очереди} (прервать задание, остановить выборку из очереди и остановить
сервер)
clean {all | имя-очереди} (удалить мусор на локальном сервере)
active имя-очереди (LPRng; проверить наличие сервера печати)
class {all | имя-очереди} [off | список-классов | буква=шаблон] (LPRng;
из очереди на печать
будут выбираться только задания соответствующего класса; буква соответствует первому
символу строки управляющего файла запроса печати)
defaultq (LPRng; вывести имя очереди печати по умолчанию)
defaults (LPRng; вывести параметры по умолчанию)
hold имя-очереди [идентификатор-задания] (LPRng; "заморозить" задание в очереди)
reread имя-очереди (LPRng; сервер (в т.ч. удалённый) перечитывает файлы настройки)
В реализации LPRng добавлена возможность указать "@имя-хоста" после
имени очереди и ключи:
-P имя-очереди
-S сервер
-U имя-пользователя (использовать может только root)
lprm - удаление задания из очереди местного сервера печати.
По умолчанию удаляется текущее задание пользователя из очереди.
Имя очереди по умолчанию берётся из переменной окружения PRINTER или /etc/printcap.
Для очередей принтеров на удалённых компьютерах после очистки локальной очереди
делается запрос к соответствующему серверу печати (он, в свою очередь, также
может обратиться далее).
Для удаления конкретного задания необходимо узнать его идентификатор с помощью команды lpq.
Можно указать имя пользователя, задания которого необходимо удалить (проверяется имя
пользователя и имя хоста, на котором была выполнена команда lpr). Ключи:
-P имя-очереди
- (удаляются все задания, принадлежащие пользователю; суперпользователь может
полностью очистить очередь; в LPRng требуется использвать имя задания "all";
для удаления заданий изо всех очередей требуется использовать ключ -a)
pr - утилита для преобразования текстового файла перед печатью
(разбиение на страницы и колонки, отступы и заголовки, нумерация страниц).
pac - утилита обработки учётной информации (кто сколько страниц напечатал).
Имя очереди по умолчанию берётся из переменной окружения PRINTER или /etc/printcap.
Протокол LPD (RFC 1179) использует по умолчанию порт 515/tcp.
Исходящий порт должен быть привилегированным (менее 1024; в стандарте указано
от 721 до 731).
Первый байт сообщения определяет его тип, далее идёт имя очереди печати и параметры.
Сообщение завершается сиволом '\n'.
Типы сообщений:
^A - распечатать задания в указанной очереди
^B - поместить задание в очередь, при успешном завершении возвращается байт 0;
далее клиент посылает подкоманды управляющего файла (длина, имя файла -
"cfA" // номер-задания // имя-хоста, содержимое файла, ноль) и файла данных
(длина, имя файла - "dfA" // номер-задания // имя-хоста, содержимое файла, ноль);
после каждой подкоманды клиент ожидает код завершения
^C - вернуть краткую информацию о заданиях в очереди (в качестве параметров можно
передавать имена пользователей или идентификаторы заданий)
^D - вернуть полную информацию о заданиях в очереди (в качестве параметров можно
передавать имена пользователей или идентификаторы заданий)
^E - удалить задание из очереди (обязательно передаётся имя пользователя, затребовавшего
удаление; можно передавать имена пользователей или идентификаторы заданий)
В новых дистрибутивах Red Hat работа lpr, lpq, lprm эмулируется системами
LPRng или CUPS.
Пакет 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 принтерах).
Команда lp посылает запрос на печать. В качестве аргументов
указываются имена файлов ("-" означает стандартный ввод). Ключи:
-B (использовать фильтры из /etc/printcap; все файлы одним потоком; LPRng)
-c (копировать файл перед печатью)
-d имя-очереди-печати
-f имя-формы (аналог lpr ключа -C)
-G (использовать фильтры из /etc/printcap; каждый файл отдельно; LPRng)
-m (посылать извещение о завершении печати по e-mail)
-n число-копий
-o опция (например: nobanner и width=число-символов)
-P список-номеров-страниц
-q приоритет (0 - высший, 25 - низший)
-s (меньше сообщений)
-S кодировка (LPRng)
-t заголовок-титульной-страницы
-T тип-файла (LPRng)
-w (послать сообщение на терминал после завершения печати)
-X имя-файла-дополнительного-фильтра
-y режим-печати (LPRng)
Команда cancel посылает запрос на удаление запроса из очереди печати.
В качестве параметра указывается идентификатор запроса (возвращается командой lp)
или имя очереди. Ключи:
-P имя-очереди-печати
Команда lpstat выводит информацию о соостоянии подсистемы печати.
В качестве параметра указывается идентификатор запроса (возвращается командой lp)
или имя очереди. Ключи (вместо списка можно использовать магическое слово "all"):
-a список-имён-очередей (принимает ли очередь запросы)
-c список-классов (вывести список классов и их членов)
-d (вывести имя очереди по умолчанию)
-f список-форм (вывести список принтеров, поддерживающих указанную форму)
-o список (состояние заданий; можно указывать имена очередей, имена классов,
идентификаторы заданий)
-p список (состояние заданий; можно указывать имена очередей; -D добавляет описание
очередей)
-r (вывести состояние планировщика заданий)
-R (вывести положения заданий в очереди)
-s (общее состояние системы печати)
-S список-имён-очередей (кодировки принтеров)
-t (вывести всю информацию о системе печати)
-u список-uid
-v список-имён-очередей (вывести имена устройств)
Работа lp, lpstat, cancel эмулируется системами
LPRng или CUPS.
Печать на лазерный принтер в RK осуществляется при нажатии
клавиш F4 и H (раскладка PC), если курсор находится в строке с именем файла.
Символы с атрибутом инверсия печатаются жирным шрифтом.
Символы с атрибутом пониженной яркости печатаются курсивом.
Строка с именем файла в файле-каталоге или строке запроса может содержать ключи печати.
RK запускает при этом скрипт /dss/bin/php с ключами и именем файла
(преобразование делает /dss/bin/prkhp, результат передаётся lpr [-P имя-очереди]).
Скрипт можно использовать и самостоятельно. Ключи также могут браться
(служебный скрипт /dss/rk/kph) из файлов
(приоритет в указанном порядке): имя-файла.ph, .суффикс.ph, .ph из каталога, /dss/bin/.ph.
Ключи (имеется множество дополнительных ключей для печати специальных файлов типа
платёжного поручения):
-Pимя-очереди (возможна привязка к имени терминала (/dev/tty??) очереди печати по умолчанию,
/dss/config/lpr.tab; имя очереди печати можно также передать через переменую окружения PRINTER)
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@:). Дополнительные поля (некоторые):
ae - формат для строки учёта завершения работы
af - кроме имени файла можно указывать имя программы ('|' перед именем),
хост%порт
all - список всех очередей (по соглашению заводится очередь с именем all,
содержащая только это поле)
ar - учитывать передачу задания на удалённый сервер
as - формат для строки учёта начала работы
bk - полная совместимость со стандартом
check_for_nonprintable
check_for_protocol_violations
cm - описание принтера
create_files - автоматически создавать файлы (log и др.)
default_format (f)
default_printer (lp)
default_priority (A)
default_remote_host (localhost)
done_jobs (1; хранить состояние последних выполненных заданий)
done_jobs_max_age (0; секунд)
fd - не принимать перенаправленных заданий
filter - фильтр для печати по умолчанию
force_localhost - запретить клиенстким программам обращаться к удалённым серверам
full_time - выдавать полную дату в сообщениях
fx - список допустимых форматов для фильтра
ignore_requested_user_priority
logger_destination (хост%порт,UDP)
lp - кроме имени устройства может иметь формат имя-очереди@хост или |имя-программы
lpd_port=printer (какой порт слушать, адрес%порт)
mail_from
mail_operator_on_error (адрес получателя)
max_servers_active
mc#1 (максимальное число копий)
minfree (0; минимальное число KB в разделе)
oh - задаёт список хостов (шаблонов), для которых данная запись действительна
retry_econnrefused (true)
save_on_error (false; при ошибке сохранять задание для расследования)
send_failure_action=remove (success, abort, retry, hold, |/имя-программы;
что делать после исчерпания попыток послать задание на печать)
send_try (3)
sendmail (команда и параметры для посылки почты)
server - данная запись действует только для сервера
По умолчанию, имя очереди берётся из переменной окружения
PRINTER, LPDEST, NPRINTER, NGPRINTER; если ни одна из них не установлена, то
используется первая строка /etc/printcap или значение default_printer в lpd.conf
Настройка LPRng и значения по умолчанию для printcap задаются в
/etc/lpd.conf (lpd.conf(5)). Начальные пробелы в строках игнорируются, комментарии
начинаются с символа '#'. Строка продолжения должна завершаться '\'.
Каждая строка задаёт значение параметра в виде (как в printcap)
имя (подчёркивания и тире эквивалентны)
имя@ (установка логического значения)
имя=символьное-значение
имя#численное-значение
Макроподстановка:
%h - короткое имя хоста
%H - полное имя хоста
%a - имя архитектуры (aix, i386 и т.д.; устанавливается параметром architecture)
%P - имя очереди из текущей секции printcap
%R - имя удалённой очереди из текущей секции printcap
%M - короткое имя хоста удалённой очереди из текущей секции printcap
Параметры:
include имя-файла
...
default_logger_port#2001
default_logger_protocol=UDP
default_printer=missingprinter
default_priority=A
default_remote_host=localhost
done_jobs=1 (хранить информацию об указанном количестве напечатанных заданий)
full_time@ (выдавать полную дату в журнал)
lf=log (имя журнала)
logger_destination="" (хост%порт,UDP)
lpd_port=printer (адрес%порт)
mail_operator_on_error=""
mc#1 (максимальное число копий)
rg=имя-группы (ограничить доступ к очереди членами указанной группы)
send_failure_action=remove (abort, retry, hold, имя-программы;
что делать после исчерпания попыток послать задание на печать)
...
Права пользователей на печать определяются в файле /etc/lpd.perms
(параметр perms_path в /etc/lpd.conf). Комментарии начинаются с символа '#'.
Каждая строка файла содержит правило
ACCEPT или REJECT. Правила просматриваются последовательно до первого успеха.
Если не подошло ни одно правило, то используется значение из последней
директивы DEFAULT. Формат (несколько ключей в строке действуют как логическое И;
можно использовать символьные шаблоны (*, []), шаблоны IP адресов (192.168.0.0/24)
и интервалы чисел (PORT=1-1023); шаблоны можно чтать из файла - </имя-файла):
DEFAULT ACCEPT
DEFAULT REJECT
ACCEPT {[not] ключ = значение {, значение} }
REJECT {[not] ключ = значение {, значение} }
Ключи и значения:
SERVICE
X - соединение
R - помещение в очередь
P - печать из очереди
M - удаление из очереди (LPRM)
C - управление очередью (LPC)
Q - запрос информации об очереди (LPQ)
REMOTEHOST (aka REMOTEIP) - список имён и IP-адресов после DNS и rDNS запросов
REMOTEPORT (aka PORT)
UNIXSOCKET - соединение через сокет
REMOTEUSER - берётся из управляющего файла задания
HOST - берётся из управляющего файла задания и делаются DNS и rDNS запросы
PRINTER - имя очереди
AUTH
AUTHJOB - при передаче задания использовалась аутентификация
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). Добавляем туда же:
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):
IPP (Internet Printing Protocol) принтер на другом хосте (имя сервера,
путь: /printers/имя-очереди),
по умолчанию ищутся все IPP принтеры в локальном сегменте, на сервере д.б. открыт
порт 631/udp и установлены права доступа
LPD принтер на другом хосте (имя сервера, имя очереди, на сервер), на сервере д.б. открыт
порт 515/tcp и установлены права доступа
SMB принтер на другом хосте (имя рабочей группы, имя сервера, имя принтера (share),
имя пользователя (анонимные: guest, nobody), пароль (хранится незашифрованным);
список серверов и принтеров появляется автомагически)
принтер, подключённый к сети прямым подключение JetDirect (имя сервера, порт 9100)
опции очереди (заголовок перед печатью, заголовок после печати, границы, число строк)
изготовитель
модель принтера
драйвер (для некоторых моделей предлагаются различные драйверы)
опции драйвера (посылать FF после печати, предобработка PostScript (замена
нестандартных шрифтов, PS3 в PS1, PS3 в PS2, PS2 в PS1),
преобразовывать текст в PostScript, дуплексная печать,
размер листа бумаги, разрешение, источник бумаги)
Параметры могут быть изменены в дальнейшем. Имеется кнопка для
установления принтера по умолчанию. После внесения изменения в БД (кнопка Apply),
printconf перезапускает сервер печати. При использовании CUPS возможно разрешить
доступ к очереди печати для внешних пользователей (Action -> Sharing) и эмуляцию
lpd сервера.
Драйвер преобразует данные из формата прикладной программы в формат,
понимаемый принтером. Такое преобразование должно производиться только один раз,
т.е. если мы подключаемся к внешнему серверу печати, то на нём уже может
работать драйвер. В этом случае необходимо указывать тип драйвера
RAW (изготовитель Generic) или PostScript (изготовитель Generic), если все прикладные
программы выводят в PostScript.
Вспомогательные программы:
gnome-default-printer (выбор принтера по умолчанию для Gnome для текущего пользователя)
gnome-print-manager (пакет printman в RH9), eggcups в FC3 (я нечаянно удалил
иконку печати и пока не знаю как её вернуть)
Print Notifier (аплет для Gnome)
redhat-switch-printer (redhat-switch-printer-nox) - переключение между LPRng и CUPS
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 (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:
nodename, host "имя"
ht ether, hardware ethernet MAC-адрес
ha MAC-адрес, hardware ethernet MAC-адрес
vm, always-reply-rfc1048 on
ip адрес, fixed-address адрес
sm маска, option subnet-mask маска-подсети
gw адрес, option routers адрес
ds адрес, option domain-name-servers адрес
lg адрес, option log-servers адрес
hn, option host-name "имя"
dn имя-домена, option domain-name имя-домена
sa адрес, next-server адрес-TFTP-сервера
специфические тэги (Tномер для BOOTP или option option-144 для dhcpd 2.0 или
дополнительное описание для dhcpd 3.0
(например, описание: option jetdirect144 code 144 = text, использование ):
T144 относительное-имя-файла-на-TFTP-сервере
T145 секунд (90; интервал неактивности)
T146 0 (выводить пакеты на печать в обход буфера JetDirect)
T147 0 (режим установки флажка TCP PSH - 0, 1, 2)
T148 0 (отключить использование шлюза)
T150 адрес-TFTP-сервера
Некоторые дополнительные параметры (читается с TFTP-сервера,
каждый параметр на отдельной строке в виде: имя, двоеточие, значение; комментарии начинаются
с символа '#'):
passwd: пароль доступа по telnet, HTTP и SNMP
sys-location (или location): объект SNMP sysLocation
sys-contact (или contact): объект SNMP sysContact
ssl-state: 1 (1 - только HTTPS, 2 - HTTP или HTTPS; только для старших моделей)
tftp-parameter-attribute: tftp-ro (tftp-ro - запретить изменение параметров, заданных по TFTP;
tftp-rw - разрешить; manual-ro - запретить перерисывать параметры, заданные вручную)
smtp-svr: адрес-smtp-сервера (для сканирующих устройств)
9100-printing: 1 (разрешить печать на порт 9100)
ftp-printing: 1
ipp-printing: 1
lpd-printing: 1
banner: 1 (печатать титульные листы)
buffer-packing: 0 (1 - отключить буферизацию пакетов перед печатью)
security-reset: 0 (1 - возврат к заводстким настройкам)
cold-reset: 0 (1 - сброс только параметров TCP/IP)
ip-config: (manual, bootp, dhcp; нет в 170x, вместо него dhcp-config:)
addq: имя-очереди [префикс-строка] [суффикс-строка] [RAW | TEXT | AUTO | BINPS]
(добавить очередь LPD; до 6 штук)
deleteq: имя-очереди
defaultq: имя-очереди (AUTO)
addstring: (позволяет добавить печать указанной строки перед заданием или после;
можно указывать шестнадцатеричные значения в виде '\1B')
deletestring:
Некоторые параметры можно настроить только через web-интерфейс (это тот,
который запускает Java-аплет, роняющий через раз браузер и который общается с устройством
по SNMP). Например, реакция на ошибку принтера.
Как его перезагрузить из telnet? Приходится ждать пока не истечёт интервал
лизинга DHCP (при этом заново читаются все настройки DHCP и файл TFTP).
HP Web Jetadmin for Linux (28 MB; инструкция по открыванию банки - внутри банки; в RH 7.0 не установился; в RH 7.2 установился, но не работает; в /etc/ld.so.conf добавить /opt/hpwebjet и ldconfig; для распаковки хочет права root; ключ -t - текстовый режим; -h - help; -r - удаление; /var/lib/fpm/, /etc/rc.d: *hpwebjetd, /opt/hpwebjet/)