Interested Article - Line Printer Daemon

LPD (от англ. Line Printer Daemon — демон печати, реализующий одноимённый протокол ( англ. Line Printer Daemon Protocol — «протокол демона построчной печати»). Этот протокол также известен под именем LPR ( англ. Line Printer Remote — протокол «построчной печати на удалённом принтере»). LPR / LPD сетевой протокол прикладного уровня для передачи документов на печать, является стандартом де-факто для UNIX-систем, предоставляющий базовые возможности печати. Вне Unix-мира клиентская часть LPR поддерживается всеми современными ОС, серверная — некоторыми принтерами, маршрутизаторами и микросерверами (не массово).

В отличие от Windows-печати, оперирует не «принтерами», а «очередями» — в простейшем случае очередь отождествляется с именем порта принтера: например, очередь lpt2 будет обозначать принтер, подключённый к порту LPT2 на сервере печати.

Исторически для печати в UNIX-системах существовали две системы печати: LPD, разработанная для Berkeley UNIX, и AT&T Line Printer system. Эти системы печати были созданы в 70-х годах для печати текстов на построчно-печатающих (линейных) принтерах. Принимая во внимание, что аппаратные средства печати с тех пор существенно изменились, можно было бы предположить, что существенно переработаны и программные средства для управления печатью. Однако, этого не произошло. Хотя и были созданы различные улучшенные системы печати, например, , однако ни одна из этих новых разработок не изменяла фундаментальные возможности этих систем.

Принцип работы LPD

Из-за того, что принтеры являются относительно медленными устройствами, с целью исключить задержки в программах система печати использует фоновую печать с кешированием данных. Файл данных, предназначенный для печати на принтере, сначала помещается во временную область (временный каталог на диске), которая называется областью спулинга или каталогом спула. Фоновый процесс — демон печати — периодически сканирует область спулинга в ожидании файлов, предназначенных для печати. Для каждого принтера, подключенного к системе, используется свой подкаталог в области спулинга. Таким образом, область спулинга представляет собой набор очередей заданий на печать, дожидающихся того момента, когда освободится соответствующий принтер и демон печати отправит данное задание на печать (в фоновом режиме ).

Основные команды

Современной реализацией LPD/LPR является пакет программ . Каждая программа пакета обеспечивает выполнение отдельной функции подсистемы печати:

  • lpd — line printer daemon — демон системы печати. Обычно запускается на этапе загрузки системы из файла rc, но может быть запущен и пользователем.
  • lpr — line print — пользовательская команда печати. Программа lpr принимает подлежащие печати данные и помещает их в спул, где их находит lpd и выводит на печать. Программа lpr — единственная программа, которая может ставить новые задания в очередь печати. Другие программы, которым необходимо использовать печать, обращаются для этого к lpr.
  • lpq — line printer queue — программа, позволяющая просматривать очередь заданий, ожидающих печати на указанном принтере.
  • lpc — line printer control — команда контроля системы lpd. С помощью lpc можно отключать принтеры, останавливать или переупорядочивать очереди печати и т. п. Некоторые из функций этой команды доступны пользователям, но в основном это средство для администратора.
  • lprm — line printer remove — команда управления очередью печати, позволяет удалить одно или несколько заданий из очереди печати. При этом стираются соответствующие файлы данных и из системы печати удаляются все ссылки на них.

Реализация LPR включена также в пакет CUPS , но CUPS поддерживает и другие протоколы печати.

Протокол

Команды протокола начинаются с однобайтового кода функции, непосредственно за которым следует имя очереди печати, к которой относится данная функция. Если функция имеет дополнительные операнды, то они отделяются от имени очереди символом пробела, горизонтальной табуляции, вертикальной табуляции или прогона страницы. Конец команды обозначается символом перевода строки . Для передачи каждой команды открывается новое соединение. Подкоманды и данные передаются после команды по тому же соединению. Сервер будет обрабатывать подкоманды до закрытия соединения.

Код Параметры Данные Ответ Описание
01 Очередь Начать печатать любую ожидающую работу
02 Очередь Подкоманды Получить задание для печати
+ 01 Удалить все принятые в этой команде файлы
02 Длина, Имя Файл, 0x00 0x00 - успешно, прочее - ошибка Получить управляющий файл
03 Длина, Имя Получить файл данных
03 Очередь, Список Описание очереди, заканчивающееся разрывом соединения Послать состояние очереди (краткая форма)
04 Очередь, Список Послать состояние очереди (длинная форма)
05 Очередь, Агент, Список Удалить задание для печати

В таблице используются следующие обозначения параметров:

  • Агент — имя пользователя, делающего запрос;
  • Длина — количество байт в передаваемом файле;
  • Имя — имя файла, должно начинаться с префикса «cfA» для управляющего файла и «dfA» — для файла данных, за которым следует номер задания для печати и имя компьютера, сформировавшего задание;
  • Очередь — имя очереди печати;
  • Список — имена пользователей и (или) номера заданий для печати, к которым будет применена команда.

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

Команда Параметры Описание
C Имя класса Имя класса разделительной страницы.
H Компьютер Имя компьютера, который будет считаться источником задания
I Отступ Горизонтальный отступ для файлов, печатающихся командой f
J Имя документа Имя документа для печати на разделительной странице
L Пользователь Печатать разделительную страницу
M Пользователь Отправить письмо после окончания печати
N Файл Имя исходного файла, из которого был создан файл данных
P Пользователь Идентифицирует пользователя, создавшего задание
S устройство узел Записывает симлминк для предотвращения повторной печати файла
T заголовок Заголовок, который будет печататься командой p
U Файл Удалить ненужный файл данных
W Ширина Ширина листа для команд f, l, p
1 Шрифт Имя файла для шрифта R системы troff (по умолчанию Times Roman)
2 Шрифт Имя файла для шрифта I системы troff (по умолчанию Times Italic)
3 Шрифт Имя файла для шрифта B системы troff (по умолчанию Times Bold)
4 Шрифт Имя файла для шрифта S системы troff (по умолчанию Special Mathematical Font)
c Файл Вывести файл данных на графопостроитель , обрабатывая как формат CIF
d Файл Печатать файл данных, обрабатывая как формат DVI
f Файл Печатать файл данных как ASCII текст
g Файл Вывести файл данных на графопостроитель, обрабатывая как результат работы Berkeley Unix plot library
l Файл Печатать файл данных как текст, не удаляя никакие управляющие символы
n Файл Печатать файл данных как результат работы ditroff
o Файл Печатать как файл PostScript
p Файл Печатать файл данных с разбивкой на страницы, с номерами страниц и заголовками
r Файл Печатать файл данных, считая первый символ каждой строки управляющим в стиле Fortran
t Файл Печатать файл данных как результат работы troff
v Файл Печатать файл в растровом формате Sun

См. также

Ссылки

  • Line Printer Daemon Protocol .
  • // Самсонов А. Протоколы сетевой печати . — 28 февраля 2006 г.
  • . — СПб. : БХВ-Петербург, 2002. — 672 с. — (Самоучитель). — ISBN 5-94157-183-6 .
Источник —

Same as Line Printer Daemon