CUPS
CUPS (от англ. Common Unix Printing System — общая система печати Unix) — это модульная система управления печатью для операционных систем семейства Unix, включая Linux, macOS и BSD. Она обеспечивает взаимодействие между компьютером и принтерами, преобразуя задания печати в формат, понятный конкретному устройству. CUPS использует протокол IPP (Internet Printing Protocol) в качестве основного средства передачи данных и поддерживает широкий спектр драйверов и форматов файлов. Разработка системы началась в 1997 году компанией Easy Software Products, а в 2007 году она была приобретена корпорацией Apple, которая сделала её стандартным компонентом macOS. С 2020 года CUPS развивается как открытый проект под эгидой OpenPrinting (Linux Foundation).
История
Предпосылки создания
До появления CUPS каждая Unix-система использовала собственные, часто несовместимые, подсистемы печати. Наиболее распространёнными были LP (Line Printer) в System V и LPD (Line Printer Daemon) в BSD. Они имели ограниченную поддержку сетевых принтеров, требовали ручной настройки драйверов и не обеспечивали унифицированного интерфейса для всех типов устройств. Администраторам приходилось писать сложные скрипты для обработки очередей и фильтрации данных.
Разработка и ранние версии
В 1997 году американский программист Майкл Свит (Michael Sweet) из компании Easy Software Products начал разработку новой системы печати, основанной на протоколе IPP. Первая стабильная версия CUPS 1.0 была выпущена в 1999 году. Она предлагала:
- Поддержку IPP как нативного протокола.
- Веб-интерфейс для управления (на порту 631).
- Модульную архитектуру с фильтрами для преобразования PostScript в другие форматы.
- Совместимость с LPD и SMB (для Windows-сетей).
Система быстро завоевала популярность благодаря простоте настройки и поддержке современных принтеров. К 2002 году CUPS стала системой печати по умолчанию во многих дистрибутивах Linux (Red Hat, Debian, SUSE).
Приобретение Apple и стандартизация
В 2007 году корпорация Apple приобрела права на CUPS и наняла Майкла Свита. Система была интегрирована в macOS (тогда Mac OS X) и стала её единственным сервисом печати. Apple существенно расширила функциональность:
- Добавлена поддержка драйверов в формате PPD (PostScript Printer Description) с автоматическим распознаванием устройств.
- Реализована технология Bonjour (Zero-configuration networking) для обнаружения принтеров в локальной сети.
- Внедрена поддержка печати через AirPrint (беспроводная печать с мобильных устройств).
В 2012 году Apple передала управление проектом сообществу OpenPrinting, сохранив за собой право на товарный знак. С 2020 года CUPS развивается как полностью открытый проект под лицензией Apache 2.0.
Архитектура и компоненты
Основные модули
CUPS состоит из нескольких ключевых компонентов, работающих как единая система:
- cupsd — фоновый демон (сервис), который принимает задания печати, управляет очередями и обрабатывает запросы через IPP.
- cups-lpd — совместимый с протоколом LPD сервис для приёма заданий от старых систем.
- cups-browsed — служба обнаружения сетевых принтеров через протоколы Bonjour, SLP и LDAP.
- cups-filters — набор фильтров для преобразования данных (например, из PDF в PostScript или PCL).
- PPD-файлы — описания драйверов принтеров, содержащие параметры устройства (разрешение, формат бумаги, режимы печати).
Протоколы и форматы
CUPS использует IPP (Internet Printing Protocol) как основной транспортный протокол. IPP работает поверх HTTP/HTTPS и позволяет:
- Отправлять задания печати.
- Управлять очередями (приостановка, отмена, просмотр статуса).
- Получать информацию о состоянии принтера (замятие, отсутствие бумаги, уровень тонера).
Для обратной совместимости CUPS поддерживает:
- LPD (Line Printer Daemon) — старый протокол, используемый в BSD-системах.
- SMB/CIFS — протокол Windows для печати по сети.
- JetDirect — прямой вывод на принтер по TCP-порту 9100.
Классификация драйверов
PostScript-принтеры
Принтеры, поддерживающие язык PostScript (обычно профессиональные и офисные модели), не требуют дополнительных драйверов. CUPS отправляет на них данные в формате PostScript или PDF, который устройство обрабатывает самостоятельно. Для таких принтеров достаточно PPD-файла, описывающего их возможности.
PCL-принтеры
Принтеры, использующие язык PCL (Printer Command Language) от Hewlett-Packard, требуют фильтра-конвертера. CUPS преобразует PostScript или PDF в PCL с помощью утилиты Ghostscript или специализированных драйверов (например, hplip для HP, gutenprint для универсальных моделей).
GDI-принтеры
Недорогие принтеры (часто от Canon, Brother, Samsung) используют собственные закрытые протоколы GDI (Graphics Device Interface). Для них CUPS требует проприетарные драйверы, поставляемые производителями. В некоторых случаях используются эмуляторы (например, foo2zjs для принтеров на базе ZjStream).
Использование в операционных системах
Linux
В большинстве дистрибутивов Linux (Ubuntu, Fedora, Debian, Arch Linux) CUPS является стандартным сервисом печати. Пользователи могут настраивать принтеры через:
- Графические утилиты (system-config-printer, cups-config).
- Веб-интерфейс по адресу
http://localhost:631`. - Командную строку (команды
lp,lpstat,cancel).
macOS
В macOS CUPS встроен в систему начиная с версии 10.2 (Jaguar). Пользователи взаимодействуют с ним через системные настройки «Принтеры и сканеры». Apple использует CUPS для поддержки AirPrint и автоматического обнаружения принтеров через Bonjour.
BSD и другие Unix
CUPS портирована на FreeBSD, NetBSD, OpenBSD и Solaris. В этих системах она устанавливается как опциональный пакет, заменяя устаревшие LPD-сервисы.
Применение и значение
Домашнее и офисное использование
CUPS обеспечивает печать на локальных и сетевых принтерах в домашних и малых офисах. Система автоматически определяет большинство современных устройств через USB или Wi-Fi, что упрощает настройку для неопытных пользователей.
Серверы печати
В корпоративной среде CUPS используется для создания централизованных серверов печати. Администраторы могут:
- Настроить общие очереди для нескольких принтеров.
- Ограничить доступ к печати по пользователям или группам.
- Включить ведение логов для учёта расхода бумаги и тонера.
Специализированные задачи
CUPS применяется в системах, где требуется нестандартная обработка заданий:
- Печать на старых матричных принтерах (через эмуляцию LPD).
- Интеграция с ERP-системами (например, SAP) для массовой печати документов.
- Поддержка печати на наклейках, этикетках и конвертах.
Интересные факты
- Порт 631 (используемый CUPS по умолчанию) был выбран в честь даты 6 марта 1991 года — дня, когда Майкл Свит начал работу над первой версией системы.
- Название «CUPS» изначально было акронимом от «Common Unix Printing System», но после приобретения Apple официальное значение не расшифровывается — считается, что это просто имя собственное.
- CUPS поддерживает печать на принтерах, выпущенных более 30 лет назад, благодаря эмуляции старых протоколов и драйверов.
- В 2019 году в CUPS была обнаружена уязвимость (CVE-2019-8842), позволявшая удалённо выполнять код через специально сформированные IPP-запросы. Apple выпустила исправление в течение нескольких дней.
Критика и ограничения
- Сложность для новичков: Несмотря на графические утилиты, настройка нестандартных принтеров (особенно GDI) требует знания командной строки и редактирования конфигурационных файлов.
- Зависимость от драйверов: Для многих старых или редких принтеров отсутствуют открытые драйверы, что вынуждает использовать проприетарные решения.
- Проблемы с безопасностью: CUPS исторически имела уязвимости, связанные с удалённым управлением (например, отсутствие аутентификации по умолчанию в ранних версиях). В современных сборках эти проблемы решены, но администраторам рекомендуется настраивать брандмауэр.
- Производительность: При большом количестве одновременных заданий (сотни и тысячи) CUPS может потреблять значительные ресурсы CPU и памяти, особенно при конвертации сложных PDF-файлов.
Источники
- Sweet, Michael. «CUPS: Common Unix Printing System». Easy Software Products, 1999.
- OpenPrinting. «CUPS Documentation». Linux Foundation, 2020.
- Apple Inc. «macOS Printing Architecture». Apple Developer Documentation, 2015.
- RFC 2567: «Design Goals for an Internet Printing Protocol». IETF, 1999.
- Сайт проекта CUPS: cups.org (архив).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →