Глава 20. Спулер lpd

В UN*X стандартным спулером является lpd (Line Printer Daemon). Он состоит из сервера lpd и набора клиентских программ для работы с ним. Нас в первую очередь будут интересовать lpr, lpq и lprm.

lpr

lpr используется для отправки документа на печать. Если в вашей системе печать уже настроена, то можете дать команду lpr мой_файл для вывода на печать документа мой_файл. Если настроено несколько принтеров (например, printer1 и printer2), то для посылки документа на конкретный принтер следует добавить параметр -P имя_принтера, например для печати на принтере printer1 используйте команду lpr -P printer1 мой_файл.

lpq

lpq используется для просмотра очереди из всех посланных на печать заданий. Для этого дайте команду lpq. Если вас интересует состояние очереди конкретного принтера, то следует добавить ключ -P имя_принтера.

lprm

lprm удаляет из очереди последнее (или имеющее заданный идентификатор) задание.

Как видите, все гениально и просто. Все программы посылают документ на печать, запуская команду lpr, так что если у вас не работает печать из какого-нибудь офисного приложения, попробуйте вручную дать команду lpr мой_файл. Если печать прошла успешно, значит виновато само приложение — например, оно формирует неправильный файл в PostScript. Большие графические среды, такие как GNOME и KDE имеют свои общие интерфейсы печати. Поэтому если не печатают все приложения такой среды, значит что-то не так в ней. Кроме того если не получается распечатать из одной (например GNOME, из Gedit) попробуйте напечатать из другой (KDE, например Kedit).

Как всякий сервер, lpd имеет свой файл конфигурации. Выглядит он несколько жутковато (сказывается возраст программы), но его вполне можно понять. Находится он по адресу /etc/printcap. Описание каждого принтера пишется в одну строчку или несколько строк, разделённых символом \ непосредственно перед символом конца строки. Формат записи следующий:

    <имя принтера> | <альтернативное имя> | <ещё одно имя> : 
    : <параметр> = <значение>::<параметр>:\
    :<параметр>#<значение>
  

Все параметры двухбуквенные, чаще всего используются следующие:

lp (line printer)

устройство, к которому подсоединён принтер. Пример: lp=/dev/lp0

sd (spool directory)

каталог, где будут накапливаться задания, поставленные в очередь. Пример: sd=/var/spool/lpd

lf (log file)

файл журнала, в который будут записываться сообщения об ошибках. Пример: lf=/var/log/lpd/messages

if (input filter) фильтр

программа, через которую будет пропущен документ, прежде чем будет отправлен на принтер. Здесь и появляется GhostScript, который переводит на язык принтера. Устройство фильтра зависит от того, какая система настройки печати используется в системе, но общий принцип действия неизменный — на стандартный вход подаётся документ, а со стандартного вывода забирается результат.

sh (supress headers)

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

mx (mаximum)

ограничение максимального размера файла. Если параметр установлен в ноль, то ограничений нет. Пример: mx#0

rp (remote printer)

имя удалённого принтера, на который будут уходить документы.

rm (remote machine)

имя машины на которой установлен этот принтер.

Вот пример файла /etc/printcap, настроенного на принтер HP LaserJet, подключённого к первому параллельному порту машины:

    printer||HP LaserJet 6L||lp:\      
    :sd=/var/spool/lpd/printer:\
    :lf=/var/log/lp-errs:\      
    :if=/usr/sbin/lpdomatic:\
    :af=/etc/foomatic/lpd/printer.lom:\      
    :lp=/dev/lp0:\
    :sh:\      
    :mx#0:
  

Если вы печатаете на удалённом принтере, то файл может выглядеть примерно следующим образом:

    lp|dj|deskjet:\      
    :sd=/var/spool/lpd/dj:\
    :rm=machine.out.there.com:\      
    :if=/usr/bin/filter:\
    :rp=printername:\      
    :sh:
  

Более подробную информацию о значении параметров вы можете почерпнуть из страниц руководств man.