Добавление и использование принтеров в системе
Статья включает:
Самый простой способ напечатать файл – это послать его непосредственно на принтер. Например, если принтер подключен к параллельному порту компьютера, то для вывода на печать нужно просто ввести строку:
cat файл > /dev/par
Однако при таком способе возникают некоторые проблемы:
При печати лучше всего использовать функцию спулинга (spooling). При использовании функции спулинга задание на печать помещается в очередь, ожидая момента, когда принтер будет в состоянии его напечатать.
В ЗОСРВ «Нейтрино» существуют два различных механизма спулинга печати:
Вы можете использовать любой из способов, либо тот и другой в зависимости от начальных настроек вашей машины и сети. Далее перечислены некоторые особенности подключения принтера.
В этом случае при работе программ распознавания устройств в момент загрузки системы происходит автоматический запуск программы spooler (см. раздел Распознавание устройств). Конфигурационные файлы для большинства часто используемых принтеров находятся в каталоге /etc/printers
.
Для выполнения удаленной печати необходимо изменить параметры настроек в некоторых конфигурационных файлах в зависимости от того, используются для печати семейство утилит lpr или утилита spooler.
Еще одно отличие состоит в том, что сервис lpd управляет всеми определенными в конфигурационном файле принтерами, в то время как программа spooler управляет только одним принтером, однако несколько экземпляров этой программы может работать одновременно.
Система печати lpr поддерживает:
Для работы через систему печати lpr необходимо иметь:
В систему стандартной печати входят следующие основные файлы и команды (рис. 1):
root
;
lpd — сервис принтера
Программа lpd, которая обычно запускается на этапе загрузки системы из файла /etc/rс.d/rc.local
(см. раздел Управление запуском ЗОСРВ «Нейтрино»), выполняет роль главного сервера координации и управления очередью спулера, параметры которой заданы в файле /etc/printcap. При запуске программы lpd происходит однократный просмотр базы данных /etc/printcap и перезапуск всех принтеров, для которых назначены задания на печать. При нормальной работе программа lpd принимает запросы на обслуживание сокета в домене Интернета (со спецификацией обслуживания "printer") при запросах на доступ к принтеру.
Для обработки запроса сервис принтера порождает копию собственного процесса, при этом в главном процессе продолжается анализ появления новых запросов. Для синхронизации сервисов используются простые текстовые файлы в качестве блокировки. Родительский процесс сервиса использует файл /usr/spool/output/lpd.lock
, а дочерний процесс — файл .lock
в каталоге спулинга принтера в соответствии с записью в файле printcap
.
Взаимодействие клиентов с программой lpd происходит посредством обычного транзактного протокола. Аутентификация удаленных клиентов осуществляется на основе схемы "привилегированного порта" ("privileged port"), см. подраздел "Управление доступом" далее в этой статье.
lpr — запустить задание на печать
С помощью команды lpr задание на печать ставится в локальную очередь, после чего локальному сервису lpd отправляется уведомление о том, что новое задание ожидает запуск в спулинге. Сервис либо отправляет задание для печати на локальный принтер, либо (в случае удаленной печати) делает попытку перенаправления задания на соответствующую машину. Если невозможно открыть принтер или отсутствует доступ к удаленной машине, задание остается в очереди до тех пор, пока не будет возможности его выполнить.
lprq — показать очередь принтера
Программа lprq работает рекурсивно от конца к началу, отображая очередь заданий для машины с заданным принтером, а затем очереди машин, которые направляют задания на данный принтер. Имеется два формата отображения выходной информации:
lprrm — удалить задания из очереди
Команда lprrm удаляет задания из очереди спулера. При необходимости вначале по команде lprrm происходит уничтожение процесса сервиса, обслуживающего очередь, а затем перезапуск этого процесса после удаления указанных файлов. Если удаляется задание, назначенное удаленному принтеру, то команда lprrm работает так же, как и команда lprq с одним исключением: сначала проверяются удаляемые задания на локальной машине, затем делается попытка удаления файлов из очереди, находящихся на удаленных машинах.
Из очереди можно удалить только собственные задания на печать. |
lprc — программа управления принтером
Программа lprc используется для управления системой печати lpr. Для каждого принтера, заданного в файле /etc/printcap, команда lprc может:
Программа lprc предоставляет пользователю root
возможность локального управления принтерами. Далее приведен список основных команд программы и их назначение.
root
, но запрещается для всех остальных пользователей. Другая распространенная ситуация применения этой команды — запретить пользователям помещать задания в очередь, если ожидается недоступность принтера в течение длительного времени.
Каждый узел, с которого может производиться печать, должен иметь каталог спулинга, в котором сохраняются файлы для печати. По умолчанию для этого каталога назначается путь /usr/spool/output/lpd
(этот путь может быть изменен в файле /etc/printcap). Если этот каталог не существует, его нужно создать для всех узлов.
Сервис lpd не работает без каталога спулинга и не выдает никаких сообщений об этом. Поэтому весьма полезно при отладке проблем с принтером запускать работу системного журнала (см. описание утилиты syslogd). Тогда вы сможете прочесть сообщения об ошибках в файле /var/log/syslog . |
В системе управления принтером организуются защищенные области спулинга, чтобы пользователь не мог изменить относящиеся к принтеру учетные данные или удалить файлы для печати, кроме собственных. Правила, которые соблюдаются при этом, перечислены далее:
root
) и идентификатором группы (daemon
). При запуске от имени root
утилита lpr может читать любой файл. Доступность файла проверяется путем вызова команды access(). Идентификатор группы используется для установки соответствующих прав доступа на файлы в зоне спулинга для программы lprrm;
0660
. Это дает гарантии того, что пользователи не смогут изменить управляющие файлы и что никакой пользователь не сможет удалить файлы никаким способом, кроме применения утилиты lprrm;
root
и бит setgid
для группы daemon
;
rg
в файле /etc/printcap:
:rg=lprgroup:
Для передачи задания на печать конкретному принтеру пользователи должны относиться к группе lprgroup
. По умолчанию доступ разрешен всем пользователям. Имейте в виду, что после того как файлы попали в локальную очередь, они могут быть напечатаны на локальном принтере или перенаправлены на другой хост (в зависимости от конфигурации);
/etc/hosts.equiv
или /etc/hosts.lpd
, а сообщение о запросе должно исходить из зарезервированного порта. В других утилитах для определения принадлежности к хосту тоже используется информация из файла /etc/hosts.equiv . Файл /etc/hosts.lpd служит только для того, чтобы установить, какие хосты имеют доступ к принтерам. |
:rs:
Если вы хотите печатать на удаленном принтере, то в ЗОСРВ «Нейтрино» необходимо запустить сетевой менеджер io-pkt-*. Этот сервис загружает разделяемые объекты (библиотеки DLL), которые обеспечивают поддержку требуемых протоколов и драйверов устройств.
Например, чтобы загрузить полный стек протоколов TCP/IP и драйвер адаптеров Gigabit Ethernet производства Intel ( devnp-e1000.so), нужно ввести следующую команду:
io-pkt-v4 -de1000
Чтобы использовать стек TCP/IP таким образом, возможно, потребуется задать конфигурацию своего сетевого интерфейса с указанием типа и номера сетевой интерфейсной платы (NIC), IP-адреса и сетевой маски интерфейса TCP/IP. Более подробные сведения об этом приведены в разделе Сетевой стек и протоколы TCP/IP. |
До начала печати на узлах должна присутствовать информация о конкретном используемом принтере (как минимум, должно быть известно, где находится принтер). Описание принтера на каждом узле хранится в файле /etc/printcap. В базе данных /etc/printcap для каждого принтера имеется одна или несколько записей.
Этот файл отсутствует после первоначальной установки ЗОСРВ «Нейтрино», поэтому при необходимости его нужно создать вручную. |
В данном разделе приводится описание основных полей файла. Сведения об остальных полях приведены в руководстве /etc/printcap.
Типовые начальные установки
Вот как выглядит типичный файл /etc/printcap, который вы можете модифицировать:
lpt1|tpptr|printer in Docs department: \ :lp=/dev/par1: \ :sd=/usr/spool/output/lpt1: \ :lf=/usr/adm/lpd-errs: \ :mx#0: \ :sh:
Каждая запись в файле /etc/printcap описывает принтер. Комментарии начинаются с символа (#). Запись состоит из некоторого числа полей, разделенных символами двоеточия (:). В приведенном примере каждое поле размещено на отдельной строке, но все поля можно располагать и на одной строке при условии, что они начинаются и заканчиваются двоеточием.
Далее приводятся пояснения, касающиеся каждой строки вышеприведенной записи:
/dev/lp
). /usr/spool/output/lpd
). Для каждого принтера должен быть определен отдельный каталог спулинга. При его отсутствии задание на печать будет передаваться на другие принтеры в зависимости от того, какой из них будет запущен сервисом раньше. Каталог спулинга принято называть таким же именем, что и соответствующий ему принтер. Перед печатью убедитесь в том, что каталог спулинга существует. |
Иногда сообщения об ошибках, которые посылаются на стандартное устройство для вывода ошибок, не сохраняются в файле отчетов. Настоятельно рекомендуется использовать программу-сервис для формирования системных журнальных записей syslogd. |
Принтеры на последовательных портах
При подключении принтера через последовательный порт необходимо установить соответствующую скорость и режимы терминала. Далее приводится пример, где заданы параметры принтера DecWriter III, подключенного локально к последовательному порту с пропускной способностью 1200 бод.
lp|LA-180 DecWriter III: \ :lp=/dev/lp:br#1200:fs#06320: \ :tr=\f:of=/usr/lib/lpf:lf=/usr/adm/lpd-errs:
Здесь:
lpf
(см. раздел "Фильтры" далее в этой статье); /usr/adm/lpd-errs
, а не на консоль. Удаленные принтеры
Для принтеров, которые подключены к удаленным хостам, запись lp следует оставить пустой. Например, приводимая далее запись в файле /etc/printcap направляет вывод на принтер lp, подключенный к машине ucbvax
.
lp|default line printer:\ :lp=:rm=ucbvax:rp=lp:sd=/usr/spool/vaxlpd:
Поле rm задает имя удаленной машины, соединение с которой нужно установить. Это имя должно быть известным именем хоста для компьютера в сети. Поле rp указывает, что имя удаленного принтера — lp (в данном случае это можно не указывать, поскольку такое значение устанавливается по умолчанию). Поле sd определяет, что в качестве каталога спулинга задается /usr/spool/vaxlpd
, а не задаваемый по умолчанию каталог /usr/spool/output/lpd
.
Фильтры
Фильтры используются для управления взаимозависимостями устройств и функциями учета.
printcap
. Если такое поле присутствует как во входном, так и выходном фильтрах, то выходной фильтр используется только для печати заглавной страницы (banner page). После этого выходной фильтр останавливается, давая возможность работать входным фильтрам. /usr/lib/rvcat
используется в качестве фильтра при печати с выходным форматом troff. Этот фильтр необходим для установки устройства в режим печати текста при работе с текстовыми файлами и в режим плоттера при печати файлов типа troff или растровых изображений. Обратите внимание на то, что запись pl определяет размер страницы 58 строк при размере бумаги 8,5 x 11 дюймов (т.е. 21 x 27 см).
В состав ЗОСРВ «Нейтрино» не входят фильтры печати. Эти фильтры нужно либо перенести из другой ОС типа UNIX, либо написать самостоятельно. Если вы не хотите это делать, то можно использовать систему спулинга, в которой имеются драйверы печати для конкретных семейств наиболее популярных принтеров. (cм. раздел, касающийся утилиты spooler) |
Фильтры вызываются сервисом lpd. Стандартными входными данными для фильтров являются данные для печати, стандартным выходом — принтер. Стандартные сообщения об ошибках добавляются в файл lf
, который является журналом ошибок (в качестве альтернативы можно использовать систему syslogd). При отсутствии ошибок фильтр должен возвращать код 0, при необходимости перепечатки — код 1, а при необходимости снятия задания на печать — код 2.
Когда утилита lprrm посылает сигнал SIGINT
процессу lpd, который управляет печатью, сигнал SIGINT
посылается всем фильтрам и их потомкам. Этот сигнал может перехватываться фильтрами, для которых необходимо выполнить операции очистки (например, удаление временных файлов).
Аргументы, передаваемые из программы lpd фильтру, зависят от типа фильтра:
фильтр -w ширина -l длина
Значения ширина и длина берутся из записей pw и pl в базе данных /etc/printcap.
фильтр [-c] -w ширина -l длина -i отступ -n входное_имя -h хост файл_учета
Необязательный ключ -c используется лишь в случае, когда управляющие символы должны пересылаться принтеру без их интерпретации, т.е. когда для печати в команде lpr используется ключ -l. Параметры -w и -l имеют тот же смысл, что и в выходном (of) фильтре. Параметры -n и -h применяются для задания входного имени пользователя и имени хоста владельца задания. Последний аргумент является именем файла учета из записи в файле /etc/printcap.
фильтр -w ширина -y длина -n входное_имя -h хост файл_учета
Ключи -x и -y определяют горизонтальный и вертикальный размеры страницы в пикселах (значения берутся из записей px и py в файле /etc/printcap). Остальные аргументы имеют тот же смысл, что и во входном (if) фильтре.
В этом разделе приводится несколько примеров, показывающих, как задаются описания принтеров. См. также описание файла /etc/printcap.
USB принтер
При подключении USB-принтера к компьютеру и запуске USB стека и devu-prn, как было описано в разделе Устройства USB, необходимо, чтобы содержимое файла /etc/printcap было следующим:
hpps: \ :lp=/dev/usbpar0 :sd=/usr/spool/output/hpps
Данный файл устанавливает имя hpps для USB-принтера, идентифицирует файл для открытия /dev/usbpar0
(или любого другого устройства, созданного devu-prn), идентифицирует каталог спулинга /usr/spool/output/hpps
.
Для доступа к принтеру необходимо установить lpr -Phpps или задать значение hpps переменной окружения PRINTER.
Необходимо убедиться, что каталог спулинга существует. |
Единственный разделяемый принтер
Пусть имеются два узла: node1 и node2, при этом в узле node1 имеется принтер, присоединенный к /dev/par1
(рис. 2).
Тогда файл /etc/printcap на узле node1 должен быть таким:
lpt1: \ :lp=/dev/par1:
В файле просто задается имя lpt1 для принтера, присоединенного к /dev/par1
. Нет необходимости описывать что-нибудь еще, поскольку установки по умолчанию выполняют все необходимое. Для получения доступа к принтеру с узла node1 нужно выдать команду lpr -Plpt1 или установить для переменной окружения PRINTER значение lpt1.
Убедитесь в том, что существует каталог спулинга и что для узла node2 в файле /etc/hosts.lpd имеется запись, указывающая на узел node1. |
Файл /etc/printcap
на узле node2 должен быть таким:
rlpt1: \ :rm=node1:rp=lpt1:lp=:
В этом файле определяется, что удаленному хосту с принтером, имеющим имя lpt1, соответствует узел node1. Имя локального принтера (rlpt1) используется локальными клиентами и может быть аналогичным имени удаленного принтера lpt1.
Следует проверить, что в файле /etc/hosts имеется запись для узла node1
.
Несколько принтеров
Теперь добавим к узлу node1 другой принтер, на этот раз он подключается к /dev/par2
(рис. 3).
Нужно быть внимательным при определении нескольких принтеров, поскольку предлагаемые по умолчанию параметры не подходят для всех принтеров. Например, используйте поле sd для задания каждому принтеру уникального каталога спулинга.
Файл /etc/printcap на узле node1 имеет следующее содержимое:
lpt1: \ :lp=/dev/par1:sd=/usr/spool/output/lpt1: lpt2: \ :lp=/dev/par2:sd=/usr/spool/output/lpt2:
В приведенном описании определяются следующие принтеры:
/dev/par1
и использует для спулинга каталог /usr/spool/output/lpt1
); /dev/par2
и использует для спулинга каталог /usr/spool/output/lpt2
). Проверьте, чтобы в файле /etc/hosts.lpd
на узле node1 имелась запись для узла node2.
Для того чтобы обращаться в удаленном режиме к этим принтерам с узла node2, нужно на узле node2 в файле /etc/printcap создать такие записи:
lpt1: \ :rm=node1:rp=lpt1:sd=/usr/spool/output/lpt1:lp=: lpt2: \ :rm=node1:rp=lpt2:sd=/usr/spool/output/lpt2:lp=:
Таким образом, были определены два принтера, которые размещаются на узле node1 с именами, которые можно использовать на узле node2. Проверьте, чтобы в файле /etc/hosts имелась запись для узла node1.
Локальные и удаленные принтеры
Рассмотрим что нужно сделать, если мы захотим переместить один из двух принтеров (например, lpt2) с узла node1 на узел node2 (рис. 4).
На обоих узлах нужно изменить содержимое файла /etc/printcap. Аналогичным образом нужно изменить содержимое файла /etc/printcap на любом другом узле, с которого нужно производить печать. Конкретные изменения для каждого узла таковы:
lpt1: \ :lp=/dev/par1:sd=/usr/spool/output/lpt1: lpt2: \ :rm=node2:rp=lpt2:sd=/usr/spool/output/lpt2:
lpt1: \ :rm=node1:rp=lpt1:sd=/usr/spool/output/lpt1: lpt2: \ :lp=/dev/par1:sd=/usr/spool/output/lpt2:
lpt1: \ :rm=node1:rp=lpt1:sd=/usr/spool/output/lpt1: lpt2: \ :rm=node2:rp=lpt2:sd=/usr/spool/output/lpt2:
Проверьте, чтобы на каждом узле в файле /etc/hosts имелись бы записи для узлов node1 и node2. Также необходимо проверить наличие записей на узлах node1 и node2 в файле /etc/hosts.lpd
для каждого узла, с которого могут использоваться принтеры.
Если вы произведете настройки своей сети для выполнения удаленной печати в соответствии с приведенными примерами, то вы сможете послать файл, находящийся в каталоге /tmp/test
на узле node2, на принтер, подключенный к узлу node1, с помощью такой команды:
lpr -h -Plpt1 /tmp/test
В этом случае происходит следующее.
С помощью протокола TCP/IP и утилиты lpr можно выполнять печать файла на удаленном принтере, присоединенном к серверу другой сети. Нужно просто сделать соответствующую настройку сетевого узла ЗОСРВ «Нейтрино» для удаленной печати, а удаленный сервер настроить на работу по протоколу TCP/IP и на обработку принтеров, совместимых с требованиями утилиты lpr.
Например, пусть необходимо напечатать PostScript-файл /root/junk.ps
с некоторого узла сети ЗОСРВ «Нейтрино», но единственный доступный PostScript-принтер (windows_printer) присоединен к серверу Windows с IP-адресом 10.2.1.8
.
Вначале нужно убедиться, что Windows-сервер сконфигурирован для печати через протокол TCP/IP и что принтер совместим с утилитой lpr. После этого, войдя под учетной записью root
с узла сети ЗОСРВ «Нейтрино», нужно выполнить следующие действия.
rlpt4: \ :rm=windows_server:lp=:rp=windows_printer: \ :sd=/usr/spool/output/lpd/rlpt4:
10.2.1.8 windows_server
mkdir /usr/spool/output/lpd/rlpt4
Для запуска печати PostScript-файла на принтере введите следующую команду:
lpr -Prlpt4 junk.ps
Принтер, имеющий возможность работать напрямую через протокол TCP/IP, для выполнения печати не требует подключения к какому-либо компьютеру. Все запросы принтер обрабатывает самостоятельно. Поэтому для работы с таким принтером необходимо проделать все те же шаги по настройке, что описаны выше, со следующими небольшими изменениями.
10.2.0.4 tcpip_printer
rlpt2: \ :rm=tcpip_printer:rp=/ps:sd=/usr/spool/output/lpd/rlpt2:
В этом примере видно, что tcpip_printer используется в качестве имени удаленной машины (в данном случае роль машины выполняет непосредственно принтер), а каталог спулинга определен как /usr/spool/output/lpd/rlpt2
. Обратите внимание на то, что удаленный принтер определен как /ps
. В некоторых сетях это имя назначается принтерам, которые могут работать с файлами формата PostScript. Нужно отыскать то имя, которое необходимо для работы с принтером в требуемом формате. Для работы с разными форматами печатаемых файлов могут требоваться разные имена (например, для печати PostScript-файлов и обычных текстовых файлов).
Еще раз проверьте, что создан каталог спулинга. Следуйте процедуре, описанной в разделе "Локальные и удаленные принтеры" ранее в этой статье, и тогда вы сможете выполнить печать на удаленном принтере с помощью команды:
lpr -Prlpt2 /root/junk.ps
По этой команде PostScript-файл с именем /root/junk.ps
посылается на принтер с именем tcpip_printer, имеющий IP-адрес 10.2.0.4
.
В приведенном примере мы выбрали простой вариант отправки PostScript-файла на PostScript-принтер. Это легко реализовать, поскольку форматирование встроено в текст PostScript-файла. Иногда может потребоваться фильтрация содержимого файла, отправленного для печати с помощью утилиты lpr. Для принтера можно определить фильтр посредством добавления соответствующей записи в файл /etc/printcap (более подробно об этом см. в разделе "Фильтры" ранее в этой статье). |
В качестве альтернативы стандартному механизму печати с использованием UNIX-подобного семейства программ lp* в ЗОСРВ «Нейтрино» служит утилита spooler. Она применяется в приложениях оконного окружения Photon для печати. Для преобразования выходного оконного окружения (draw-stream) оболочки Photon (phs) в формат, воспринимаемый принтером, используется специальный фильтр.
Утилита spooler обычно запускается программой распознавания устройств (enumerator) при старте ЗОСРВ «Нейтрино» (см. раздел Управление запуском ЗОСРВ «Нейтрино»). Утилита управляет работой одного принтера, однако можно запускать более одного экземпляра утилиты spooler.
После запуска утилиты spooler (вручную или на системном уровне) происходит следующее (рис. 5):
/dev
создается необходимая запись для принтера:
/dev/printers/имя_принтера/spool
/dev
.
/var/spool/printers/имя_принтера.хост
В каталоге /etc/printers
хранятся файлы общей конфигурации для наиболее часто используемых типов принтеров, в том числе перечисленные в таблице ниже.
Принтер | Файл конфигурации | Фильтр |
---|---|---|
Canon | bjc.cfg | phs-to-bjc |
Epson | epson.cfg | phs-to-escp2 |
Epson IJS | epijс.cfg | phs-to-ijs |
Hewlett-Packard | pcl.cfg | phs-to-pcl |
PostScript | ps.cfg | phs-to-ps |
Существует также специальный фильтр phs-to-bmp
, с помощью которого файл оконного окружения оболочки Photon преобразуется в формат BMP. В файлах конфигурации определяются возможные установки принтера и установки по умолчанию, а также, какой из фильтров подходит для данного принтера.
Когда производится печать из приложения оболочки Photon, то файл для печати отправляется в каталог спулинга /dev/printers/имя_принтера/spool
. Приложение оболочки Photon может построить другой файл конфигурации для выбранного принтера в зависимости от введенной дополнительной информации.
Если уже имеется файл, формат которого правильно воспринимается принтером или для которого существует фильтр, то печать можно производить путем копирования файла в каталог спулинга для необработанных данных:
cp мой_файл /dev/printers/имя_принтера/raw
Когда программа spooler обнаруживает задание на печать в каталоге /dev/printers/имя_принтера/raw
, файл задания копируется в каталог спулинга /var/spool/printers/имя_принтера.хост
, после чего запускается соответствующий фильтр, с помощью которого происходит подготовка файла и отправка его на принтер.
Обычно файл спулера для печати сохраняется в каталоге на диске, затем эта информация о местонахождении файла передается фильтру. Если нужно сэкономить дисковую память, то при вызове программы spooler можно использовать ключ -F для отключения буферизации файлов для печати в каталоге спулинга. При наличии этого ключа программа spooler посылает фрагменты печатаемого файла непосредственно в буфер FIFO для печати по частям. Фильтр получает эти данные из буфера FIFO, и после обработки происходит печать фрагмента. После освобождения буфера spooler загружает в буфер следующий фрагмент файла и т.д. до окончания печати всего файла.
Если в приложении оболочки Photon вызывается команда предварительного просмотра печати (print preview), то в этом случае файл отправляется для обработки утилитой preview. Если необходимо просмотреть очередь печати или выполнить управление ею, то нужно запустить из командной строки команду prjobs или из меню запуска (Launch) выбрать пункт меню Utilities → Print Manager.
При подключении USB принтера к компьютеру и запуске USB-стека и devu-prn, как описано в подразделе «USB-устройство» раздела «Подключение оборудования», необходимо запустить дополнительно spooler для управления (например, в /etc/rc.d/rc.local
).
ЗОСРВ «Нейтрино» не может обнаруживать (детектировать) USB принтеры. |
Для установки USB принтера необходимо выполнить следующее:
/usr/spool/output/device
, где device – это устройство, созданное devu-prn для принтера (например, usbpar0).
spooler -d /dev/usbpar0
Принтер должен появится в /dev/printers
.
Для печати через сеть Qnet необходимо отправить файл в каталог /net/имя_узла/dev/printers/имя_принтера/spool
. Программа spooler для принтера должна быть запущена на узле с именем имя_узла.
Для настройки печати с использованием программы spooler на удаленном принтере необходимо перенаправить задание на печать программе lpr. Такая возможность обеспечивается тем, что задание на печать пересылается на принтер фильтром. Поэтому необходимо просто указать имя удаленного принтера в командной строке фильтра в файле конфигурации, используемом программой spooler.
Для того чтобы освоить такую возможность, попробуйте сначала организовать работу удаленного принтера через программу lpr (см. раздел "Удаленная печать на TCP/IP-принтере с использованием утилиты lpr" ранее в этой статье). После этого выполните следующее.
cp /etc/printers/ps.cfg /etc/printers/test.cfg
test.cfg
найдите командную строку фильтра, которая выглядит приблизительно так:
Filter = phs:$d:phs-to-ps Filter = raw:$d:cat
Командные строки фильтра имеют формат:
источник:приемник:фильтр
Командная строка фильтра phs указывает фильтру обработать файлы с расширением .phs
посредством фильтра с именем phs-to-ps прежде, чем отправить их по адресу назначения, указанному программой spooler. Команда фильтра raw предназначена для утилит, которые на выходе дают уже корректно форматированный для печати результат.
Filter = phs:$d:phs-to-ps
на такой:
Filter = phs:ps:phs-to-ps
Filter ps:$d:lpr -Prlpt2
Эти действия приведут к изменению задаваемого спулером адреса назначения на значение ps, так что после преобразования .phs
-файла фильтром phs-to-ps в формат ps файл будет отправлен на ps-фильтр. Благодаря добавленной строке ps-фильтра, файлы отправляются для обработки в программу lpr, в качестве ключа которой указано выполнение печати на удаленном принтере (точно такая же ситуация была описана в разделе "Удаленная печать на TCP/IP-принтере с использованием утилиты lpr" ранее в этой статье).
Возможно, вам интересно узнать, что произошло с адресом назначения ($d), передаваемым программой spooler. Этот адрес отброшен, потому что программа lpr (в отличие от фильтра phs-to-ps) не возвращает задание фильтру, а сама завершает все необходимые действия.
/etc/printers/test.cfg
) и имя необходимого принтера (в нашем случае rlpt2). Строка запуска будет выглядеть так:
spooler -d /dev/null -с /etc/printers/test.cfg -n rlpt2 &
С помощью ключа -n определяется имя принтера, которое появляется в диалоге печати приложения оболочки Photon.
/etc/rс.d/rc.local
. Более подробно об этом см. раздел Управление запуском ЗОСРВ «Нейтрино». Теперь можно печатать PostScript-файлы на удаленном TCP/IP-принтере либо из приложений оболочки Photon, либо из командной строки.
cp /root/my_file.ps /dev/printers/rlpt2/spool/
Далее приводятся примеры файлов конфигурации для печати с использованием программ lpr, SAMBA и NCFTP.
В данном разделе приводятся примеры конфигурационных файлов, которые используются для удаленной печати с помощью утилиты lpr и программного обеспечения SAMBA
и NCFTP
.
Программное обеспечение SAMBA и NCFTP можно найти в архивных хранилищах сторонних разработчиков. |
PNPCMD=POSTSCRIPT #---------------------------------------------------------------------- # # Указанные далее макросы разворачиваются для строки команд фильтра: # $d — устройство (Device); # $m — id модели/производителя PnP; # $n — имя принтера; # $s — имя каталога спулера (Spooldir); # $$ — реальный символ $. # #---------------------------------------------------------------------- FileVersion = 2 # имя_принтера — это имя, которое вы задали в файле /etc/printcap. Filter = ps:$d:lpr -Pимя_принтера Filter = phs:ps:phs-to-ps Supported Resolution = 300 * 300, 600 * 600, 1200 * 1200 Supported PaperSize = 8500 * 11000 : Letter, 8500 * 14000 : Legal Supported Orientation = 0 : Portrait, 1 : Landscape Supported Intensity = 0 : Min, 100 : Max Supported InkType = 1 : "B&W", 3 : "Color (CMY)", 4 : "Color (CMYK)" Resolution = 600 * 600 PaperSize = 8500 * 11000 : Letter Orientation = 0 : Portrait Intensity = 50 InkType = 4 : "Color (CMYK)" NonPrintable = 500:Left, 500:Top, 500:Right, 500:Bottom #---------------------------------------------------------------------- if PNPID=HEWLETT-PACKARDHP_850DDE PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 8500;CLS:PRINTER;CMD:POSTSCRIPT; Supported PaperSize = 8500 * 11000 : Letter, 8500 * 14000 : Legal, 7250 * 10500 : Exec, 11000 * 17000 : B, 8262 * 11692 : A4, 5846 * 8262 : A5, 7000 * 9875 : B5, 11692 * 16524 : A3 #---------------------------------------------------------------------- if PNPID=HEWLETT-PACKARDHP_25A854 PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 2500C;CLS:PRINTER;CMD:PCL,MLC,PML,POSTSCRIPT; Supported PaperSize = 8500 * 11000 : Letter, 8500 * 14000 : Legal, 7250 * 10500 : Exec, 11000 * 17000 : B, 8262 * 11692 : A4, 5846 * 8262 : A5, 7000 * 9875 : B5, 11692 * 16524 : A3 #----------------------------------------------------------------------
PNPCMD=POSTSCRIPT #---------------------------------------------------------------------- # # Указанные далее макросы разворачиваются для строки команд фильтра: # $d — устройство; # $m — id модели/производителя PnP; # $n — имя принтера; # $s — имя каталога спулера (Spooldir); # $$ — реальный символ $. # #---------------------------------------------------------------------- FileVersion = 2 # x.x.x.x is the IP address of the printer # prt0 is the port used on the printer (in this case, port zero). Filter = ps:$d:ncftpput -V -E x.x.x.x /prt0 Filter = phs:ps:phs-to-ps Supported Resolution = 300 * 300, 600 * 600, 1200 * 1200 Supported PaperSize = 8500 * 11000 : Letter, 8500 * 14000 : Legal Supported Orientation = 0 : Portrait, 1 : Landscape Supported Intensity = 0 : Min, 100 : Max Supported InkType = 1 : "B&W", 3 : "Color (CMY)", 4 : "Color (CMYK)" Resolution = 600 * 600 PaperSize = 8500 * 11000 : Letter Orientation = 0 : Portrait Intensity = 50 InkType = 4 : "Color (CMYK)" NonPrintable = 500:Left, 500:Top, 500:Right, 500:Bottom #---------------------------------------------------------------------- if PNPID=HEWLETT-PACKARDHP_850DDE PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 8500;CLS:PRINTER;CMD:POSTSCRIPT; Supported PaperSize = 8500 * 11000 : Letter, 8500 * 14000 : Legal, 7250 * 10500 : Exec, 11000 * 17000 : B, 8262 * 11692 : A4, 5846 * 8262 : A5, 7000 * 9875 : B5, 11692 * 16524 : A3 #---------------------------------------------------------------------- if PNPID=HEWLETT-PACKARDHP_25A854 PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 2500C;CLS:PRINTER;CMD:PCL,MLC,PML,POSTSCRIPT; Supported PaperSize = 8500 * 11000 : Letter, 8500 * 14000 : Legal, 7250 * 10500 : Exec, 11000 * 17000 : B, 8262 * 11692 : A4, 5846 * 8262 : A5, 7000 * 9875 : B5, 11692 * 16524 : A3 #----------------------------------------------------------------------
PNPCMD=POSTSCRIPT #---------------------------------------------------------------------- # # Указанные далее макросы разворачиваются для строки команд фильтра: # $d — устройство (Device); # $m — id модели/производителя PnP; # $n — имя принтера; # $s — имя каталога спулера (Spooldir); # $$ — реальный символ $. # #---------------------------------------------------------------------- FileVersion = 2 # Для получения доступа к разделяемому принтеру SAMBA нужно, чтобы # для smbspool была бы установлена переменная окружения DEVICE_URI. # # Формат для команды smb, используемый с smbspool, # который определяется в DEVICE_URI # Если не требуется имя пользователя и пароль: # — DEVICE_URI = "smb://сервер/принтер" # — DEVICE_URI = "smb://рабочая_группа/сервер/принтер" # Если требуется имя пользователя и пароль: # — DEVICE_URI = "smb://имя_пользователя:пароль@сервер/принтер" # — DEVICE_URI = # "smb://имя_пользователя:пароль@рабочая_группа/сервер/принтер" # # где имя_пользователя = имя пользователя в SAMBA # пароль = пароль в SAMBA # рабочая_группа = рабочая группа в SAMBA # сервер = имя сервера в SAMBA # принтер= имя разделяемого принтера в SAMBA # # Использование переменной окружения DEVICE_URI дает возможность # сделать так, чтобы для smbspool происходил автоматический поиск # значения, если оно не включено в командную строку. # Filter = ps:$d:smbspool 1 NULL none 1 1 Filter = phs:ps:phs-to-ps Supported Resolution = 300 * 300, 600 * 600, 1200 * 1200 Supported PaperSize = 8500 * 11000 : Letter, 8500 * 14000 : Legal Supported Orientation = 0 : Portrait, 1 : Landscape Supported Intensity = 0 : Min, 100 : Max Supported InkType = 1 : "B&W", 3 : "Color (CMY)", 4 : "Color (CMYK)" Resolution = 600 * 600 PaperSize = 8500 * 11000 : Letter Orientation = 0 : Portrait Intensity = 50 InkType = 4 : "Color (CMYK)" NonPrintable = 500:Left, 500:Top, 500:Right, 500:Bottom #---------------------------------------------------------------------- if PNPID=HEWLETT-PACKARDHP_850DDE PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 8500;CLS:PRINTER;CMD:POSTSCRIPT; Supported PaperSize = 8500 * 11000 : Letter, 8500 * 14000 : Legal, 7250 * 10500 : Exec, 11000 * 17000 : B, 8262 * 11692 : A4, 5846 * 8262 : A5, 7000 * 9875 : B5, 11692 * 16524 : A3 #---------------------------------------------------------------------- if PNPID=HEWLETT-PACKARDHP_25A854 PNPSTR=MFG:HEWLETT-PACKARD;MDL:HP 2500C;CLS:PRINTER;CMD:PCL,MLC,PML,POSTSCRIPT; Supported PaperSize = 8500 * 11000 : Letter, 8500 * 14000 : Legal, 7250 * 10500 : Exec, 11000 * 17000 : B, 8262 * 11692 : A4, 5846 * 8262 : A5, 7000 * 9875 : B5, 11692 * 16524 : A3 #----------------------------------------------------------------------
Далее приводятся способы решения типовых проблем, с которыми может столкнуться потребитель.
Приводимые далее описания сообщений об ошибках, генерируемые утилитами печати семейства lp*, помогут вам в разрешении возникающих в процессе печати проблем.
Сообщения об ошибках утилиты lpr
root
, а идентификатор группы не относится к категории daemon, то проверку можно выполнить с помощью команды: Сообщения об ошибках утилиты lprq
root
может воспользоваться программой lprc для аварийного завершения текущего сервиса и для запуска его нового экземпляра. root
должен воспользоваться программой lprc для аварийного завершения и перезапуска локального сервиса. syslog
. Для перезапуска сервиса lpd введите команду: Сообщение об ошибках утилиты lprrm
Сообщения об ошибках утилиты lprc
Сообщения об ошибках утилиты lpd
При работе утилиты lpd может выдаваться много различных сообщений, которые поступают в системный журнал программы syslogd. Большинство сообщений касаются файлов, которые нельзя открыть. Обычно это означает, что есть некорректности в файле /etc/printcap или в режимах защиты других файлов. Файлы могут быть недоступны, если к ним обращаются иными средствами (а не с помощью программы lpr).
В дополнение к сообщениям, генерируемым программой lpd, любой из фильтров, порождаемых lpd, может посылать сообщения в системный журнальный файл программы syslogd или в журнальный файл для сообщений об ошибках (файл, определенный в записи lf файла /etc/printcap). Если вы хотите диагностировать проблему, запустите программу syslogd.
Если не работает печать отправленного файла, то вы можете получить сообщение об ошибке от одной из утилит семейства lp*. Если же не появляется никаких сообщений об ошибках, то можно попробовать применить приводимые ниже действия.
/usr/spool/output/lpd
);
/etc/hosts.lpd
на узле, где происходит печать, есть запись об узле, с которого отправляются файлы на печать;
/usr/spool/output/lpd.lock
. Если данный файл существует и не запущен lpd (например, после сбоя питания или падения системы), файл необходимо удалить;
syslog
.
Предыдущий раздел: перейти