Music Player Daemon
- 1 year ago
- 0
- 0
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/LPR является пакет программ . Каждая программа пакета обеспечивает выполнение отдельной функции подсистемы печати:
Реализация LPR включена также в пакет CUPS , но CUPS поддерживает и другие протоколы печати.
Команды протокола начинаются с однобайтового кода функции, непосредственно за которым следует имя очереди печати, к которой относится данная функция. Если функция имеет дополнительные операнды, то они отделяются от имени очереди символом пробела, горизонтальной табуляции, вертикальной табуляции или прогона страницы. Конец команды обозначается символом перевода строки . Для передачи каждой команды открывается новое соединение. Подкоманды и данные передаются после команды по тому же соединению. Сервер будет обрабатывать подкоманды до закрытия соединения.
Код | Параметры | Данные | Ответ | Описание | |
---|---|---|---|---|---|
01 | Очередь | Начать печатать любую ожидающую работу | |||
02 | Очередь | Подкоманды | Получить задание для печати | ||
+ | 01 | — | Удалить все принятые в этой команде файлы | ||
02 | Длина, Имя | Файл, 0x00 | 0x00 - успешно, прочее - ошибка | Получить управляющий файл | |
03 | Длина, Имя | Получить файл данных | |||
03 | Очередь, Список | Описание очереди, заканчивающееся разрывом соединения | Послать состояние очереди (краткая форма) | ||
04 | Очередь, Список | Послать состояние очереди (длинная форма) | |||
05 | Очередь, Агент, Список | Удалить задание для печати |
В таблице используются следующие обозначения параметров:
Управляющий файл представляет собой текстовый файл , каждая строка начинается с символа, обозначающего команду, за которым следуют её операнды. Строка оканчивается символом перевода строки.
Команда | Параметры | Описание |
---|---|---|
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 |