Демон lpd
Демон lpd — это системный процесс (демон) в операционных системах семейства Unix, отвечающий за приём, постановку в очередь и отправку заданий на печать. Он является основным компонентом традиционной системы печати Line Printer Daemon (LPD), реализующей одноимённый протокол Line Printer Daemon (LPD, также известный как LPR). Демон lpd работает в фоновом режиме, прослушивая сетевые порты (обычно TCP-порт 515) и обрабатывая запросы от клиентских утилит, таких как lpr (отправка задания), lpq (просмотр очереди) и lprm (удаление задания).
История
Протокол LPD и демон lpd были разработаны в начале 1980-х годов в Калифорнийском университете в Беркли для операционной системы BSD Unix. Первоначальная реализация предназначалась для управления локальными принтерами, подключёнными через последовательный или параллельный порт. С развитием сетей протокол был расширен для поддержки удалённой печати через TCP/IP, что сделало его одним из первых стандартных механизмов сетевой печати в Unix-среде.
В 1990 году протокол LPD был стандартизирован в документе RFC 1179 («Line Printer Daemon Protocol»), который описал формат команд и ответов, а также процедуры передачи данных. Этот документ стал основой для множества реализаций, включая встроенные демоны в принтерах и серверах печати. Однако RFC 1179 не был принят в качестве полного стандарта (он имел статус «Informational»), что привело к появлению несовместимых расширений.
С середины 1990-х годов демон lpd начал вытесняться более современными системами печати, такими как CUPS (Common Unix Printing System), которая использует протокол IPP (Internet Printing Protocol) и предоставляет более широкие возможности, включая поддержку драйверов, аутентификацию и шифрование. Тем не менее, lpd остаётся распространённым в старых Unix-системах, встраиваемых устройствах и принтерах с поддержкой LPD.
Принцип работы
Демон lpd обычно запускается при загрузке системы из стартового скрипта (например, /etc/init.d/lpd или через systemd). Он может работать как автономный процесс или управляться суперсервером (inetd, xinetd). В режиме автономного демона lpd прослушивает TCP-порт 515 и ожидает входящих соединений.
Обработка задания на печать
- Приём задания: Клиентская утилита
lprподключается к демону lpd на локальном или удалённом хосте и передаёт управляющий файл (содержащий имя пользователя, имя задания, параметры печати) и собственно данные для печати (обычно в формате PostScript, PCL или plain text). - Постановка в очередь: Демон lpd сохраняет полученные файлы в специальной директории (обычно
/var/spool/lpd/<имя_очереди>), присваивая каждому заданию уникальный идентификатор. Задания упорядочиваются по времени поступления или по приоритету. - Отправка на принтер: Когда принтер становится доступен, демон lpd извлекает задание из очереди и передаёт его на устройство. Для локального принтера данные отправляются через соответствующий порт (например,
/dev/lp0). Для сетевого принтера демон может выступать в роли клиента, подключаясь к другому демону lpd на удалённом хосте. - Уведомление: После завершения печати демон может отправить уведомление пользователю (через почту или системный журнал).
Протокол LPD (RFC 1179)
Протокол LPD использует простой текстовый формат команд. Каждая команда начинается с однобайтового кода, за которым следуют параметры и завершающий символ перевода строки. Основные команды:
\x01(Receive Printer Job): Приём задания на печать.\x02(Receive Queue State): Запрос состояния очереди.\x03(Receive Queue State (short)): Сокращённый запрос состояния очереди.\x04(Remove Job): Удаление задания из очереди.
Демон lpd также поддерживает команды для управления очередью, такие как остановка, запуск и перезапуск печати.
Конфигурация
Файл конфигурации демона lpd обычно находится по пути /etc/printcap. Этот файл определяет очереди печати, их параметры и принтеры. Формат printcap основан на записях, разделённых двоеточиями, где каждая запись описывает одну очередь. Пример записи:
`` lp|local printer:\ :lp=/dev/lp0:\ :sd=/var/spool/lpd/lp:\ :lf=/var/log/lpd-errs:\ :sh: ``
Параметры включают:
lp— устройство принтера (например,/dev/lp0для параллельного порта или:remote@hostдля сетевого принтера).sd— директория для хранения очереди.lf— файл журнала ошибок.sh— подавление заголовочной страницы.rmиrp— для удалённой печати: имя хоста и имя очереди на удалённом сервере.
Недостатки и критика
Несмотря на широкое распространение, демон lpd и протокол LPD имеют ряд недостатков:
- Отсутствие аутентификации и шифрования: Протокол LPD передаёт данные в открытом виде, что делает его уязвимым для перехвата и подмены заданий. В RFC 1179 не предусмотрены механизмы проверки подлинности.
- Ограниченная поддержка форматов: Демон lpd обычно ожидает данные в формате, понятном принтеру (PostScript, PCL, ASCII). Современные системы печати требуют автоматического преобразования (фильтрации), что в lpd реализовано слабо или требует внешних утилит.
- Сложность конфигурации: Файл
printcapимеет неинтуитивный синтаксис, а настройка удалённой печати может быть затруднительной. - Отсутствие стандартизации: RFC 1179 не является полным стандартом, и разные реализации демона lpd могут иметь несовместимые расширения.
- Проблемы с масштабированием: При большом количестве заданий демон lpd может работать неэффективно, особенно при одновременной работе нескольких клиентов.
Современное состояние
В современных дистрибутивах Linux и BSD-системах демон lpd обычно заменён на более функциональные системы, такие как CUPS (Common Unix Printing System). CUPS поддерживает протокол IPP, который обеспечивает шифрование, аутентификацию, гибкое управление драйверами и поддержку современных форматов. Однако CUPS может эмулировать работу LPD-сервера для совместимости со старыми клиентами.
В некоторых встраиваемых системах, маршрутизаторах и принтерах (например, от HP, Brother, Epson) демон lpd всё ещё используется как встроенный сервер печати. В таких устройствах он часто реализован в виде упрощённой версии, поддерживающей только базовые функции.
Альтернативы
- CUPS — современная система печати, использующая IPP. Поддерживает фильтры, драйверы, веб-интерфейс и шифрование.
- LPRng — улучшенная реализация протокола LPD с поддержкой аутентификации и более гибкой конфигурацией, но в настоящее время считается устаревшей.
- Samba — для печати через Windows-сети (SMB/CIFS) может использоваться демон
smbd, который также может эмулировать LPD.
Безопасность
В связи с отсутствием шифрования и аутентификации, использование демона lpd в открытых сетях (включая интернет) не рекомендуется. В современных системах доступ к порту 515 обычно ограничивается брандмауэром, а сам демон запускается только для локальных нужд или во внутренней сети. В некоторых реализациях (например, в LPRng) добавлена поддержка аутентификации через PAM (Pluggable Authentication Modules), но это не является стандартом.
Источники
- RFC 1179 — Line Printer Daemon Protocol (1990).
- W. Richard Stevens, «Unix Network Programming», Volume 1, 2nd Edition (1998).
- Документация к BSD-системам (FreeBSD Handbook, раздел «Printing»).
- Документация к CUPS (CUPS Software Administrators Manual).
- Man-страницы: lpd(8), lpr(1), lpq(1), lprm(1), printcap(5).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →