Что такое CUPS и зачем он нужен в Linux
CUPS (Common UNIX Printing System) — это модульная система печати для Unix-подобных операционных систем, которая позволяет компьютеру выступать в роли сервера печати. Разработанная Майклом Свитом в 1997 году и выпущенная в 1999 году, она быстро стала стандартом для большинства дистрибутивов Linux. В 2002 году Apple интегрировала CUPS в macOS, а в 2007 году выкупила исходный код. С 2020 года разработка продолжается под эгидой OpenPrinting, а Apple поддерживает собственную ветку для своих платформ.
CUPS решает ключевую проблему: до его появления в Unix-мире не было единого стандарта управления печатью. Системы System V и Berkeley были несовместимы, требовали сложных скриптов для конвертации данных и не могли автоматически определять формат файла. CUPS унифицировал процесс, используя Internet Printing Protocol (IPP) в качестве основы. Он состоит из планировщика (scheduler), системы фильтров и бэкендов. Планировщик принимает задания, фильтры преобразуют данные в формат, понятный принтеру, а бэкенды отправляют их на устройство — будь то локальный USB-принтер или сетевое устройство.
Для администраторов CUPS — это не просто драйвер. Это полноценный сервер, который может обслуживать множество клиентов, управлять очередями, классами принтеров и поддерживать аутентификацию. Он также предоставляет веб-интерфейс для управления, что упрощает настройку даже для тех, кто не привык работать исключительно с командной строкой.
Установка CUPS в Linux: пошаговая инструкция
Установка CUPS в большинстве дистрибутивов Linux выполняется через пакетный менеджер. В системах на основе Debian и Ubuntu используется команда:
sudo apt update
sudo apt install cupsПосле завершения установки служба CUPS (cupsd) запускается автоматически. Проверить её статус можно командой:
systemctl status cupsЕсли служба не запущена, её можно активировать вручную:
sudo systemctl start cups
sudo systemctl enable cupsВ дистрибутивах на основе Red Hat (Fedora, RHEL, CentOS) установка выполняется через dnf или yum:
sudo dnf install cups
sudo systemctl start cups
sudo systemctl enable cupsВ Arch Linux и его производных:
sudo pacman -S cups
sudo systemctl enable --now cupsПосле установки рекомендуется проверить, что CUPS слушает порт 631 (IPP). По умолчанию он привязан только к локальному интерфейсу (127.0.0.1). Для удалённого доступа потребуется изменить конфигурацию.
Настройка CUPS: конфигурационный файл cupsd.conf
Основной файл конфигурации CUPS — /etc/cups/cupsd.conf. Его синтаксис напоминает конфигурацию веб-сервера Apache. Перед внесением изменений всегда делайте резервную копию:
sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original
sudo chmod a-w /etc/cups/cupsd.conf.originalНастройка администратора сервера
Укажите email администратора, на который будут приходить уведомления:
ServerAdmin admin@example.comНастройка прослушиваемых интерфейсов
По умолчанию CUPS слушает только loopback (127.0.0.1:631). Чтобы разрешить доступ с других компьютеров в локальной сети, добавьте IP-адрес сетевого интерфейса:
Listen 127.0.0.1:631
Listen /var/run/cups/cups.sock
Listen 192.168.1.100:631Если нужно слушать на всех интерфейсах, можно использовать директиву Port:
Port 631Настройка доступа к веб-интерфейсу и администрированию
Блоки `` управляют правами доступа. По умолчанию доступ разрешён только с localhost. Чтобы открыть доступ для подсети 192.168.1.0/24, добавьте:
Order allow,deny
Allow localhost
Allow 192.168.1.*
Order allow,deny
Allow localhost
Allow 192.168.1.*
AuthType Default
Require user @SYSTEM
Order allow,deny
Allow localhost
Allow 192.168.1.*
После изменений перезапустите службу:
sudo systemctl restart cupsНе забудьте открыть порт 631 в файрволе, если он активен:
sudo ufw allow 631/tcpВеб-интерфейс CUPS: управление печатью через браузер
CUPS предоставляет удобный веб-интерфейс, доступный по адресу http://localhost:631. Если вы настроили удалённый доступ, замените localhost на IP-адрес сервера. Интерфейс позволяет:
- Добавлять и удалять принтеры
- Устанавливать драйверы (PPD-файлы)
- Управлять очередями печати (приостанавливать, возобновлять, отменять задания)
- Просматривать состояние принтеров и историю заданий
- Настраивать классы принтеров (группы устройств)
- Просматривать документацию и справочные страницы
Для выполнения административных действий через веб-интерфейс требуется аутентификация. По умолчанию используется учётная запись root или пользователь, входящий в группу lpadmin. Добавить пользователя в эту группу можно командой:
sudo usermod -a -G lpadmin usernameВажно: CUPS не аутентифицирует пользователей без пароля. Убедитесь, что у учётной записи задан пароль.
В разделе «Administration» находятся все основные настройки. При добавлении принтера система автоматически сканирует локальные и сетевые устройства. Если принтер не обнаружен, можно указать его сетевой адрес вручную, выбрав соответствующий протокол (IPP, LPD, SMB и др.).
Команды CUPS: управление печатью из терминала
Для опытных пользователей и автоматизации CUPS предоставляет набор консольных утилит. Основные команды:
lp — отправка задания на печать:
lp document.pdf
lp -d printer_name document.txt
lp -o landscape -o fit-to-page -o media=A4 image.jpglpstat — просмотр статуса принтеров и очередей:
lpstat -p -d
lpstat -olpq — просмотр очереди печати (аналог BSD):
lpq -P printer_namelprm — удаление задания из очереди:
lprm job-idlpoptions — настройка параметров по умолчанию:
lpoptions -d printer_name
lpoptions -p printer_name -o media=A4 -o sides=two-sided-long-edgecancel — отмена задания:
cancel job-id
cancel -a printer_nameЭти команды совместимы как с System V (lp), так и с Berkeley (lpr) стилями, что облегчает миграцию со старых систем.
Фильтры и бэкенды: как CUPS преобразует данные
Одна из ключевых особенностей CUPS — система фильтров, которая преобразует данные из одного формата в другой. Это позволяет отправлять на печать файлы разных типов (PDF, PostScript, изображения, текст) без предварительной конвертации на клиенте.
MIME-базы данных
CUPS использует два файла для определения типов данных и правил конвертации:
/etc/cups/mime.types— определяет известные типы файлов (например,text/html,image/jpeg)/etc/cups/mime.convs— задаёт программы-фильтры для преобразования одного MIME-типа в другой
Пример записи в mime.types для HTML:
text/html html htm \
printable(0,1024) + (string(0,"") string(0,"Безопасность CUPS: защита сервера печати
Хотя CUPS — зрелая система, она не лишена уязвимостей. В 2024 году была обнаружена критическая уязвимость, позволяющая удалённое выполнение кода на всех GNU/Linux системах. Поэтому настройка безопасности — обязательный этап.
Основные меры:
- Ограничение доступа по сети
- Не открывайте порт 631 на публичные интерфейсы без необходимости.
- Используйте файрвол (ufw, iptables, nftables) для ограничения доступа только доверенными подсетями.
- Аутентификация и авторизация
- Используйте сильные пароли для всех учётных записей, имеющих доступ к администрированию.
- Ограничьте группу
lpadminтолько необходимыми пользователями. - Рассмотрите использование аутентификации через PAM или LDAP для централизованного управления.
- Шифрование трафика
- CUPS поддерживает HTTPS. Настройте TLS-сертификат для веб-интерфейса, чтобы защитить данные при передаче.
- Используйте IPP-over-TLS (ipps) для защищённой печати.
- Регулярные обновления
- Следите за обновлениями пакета CUPS в вашем дистрибутиве. Критические исправления выходят оперативно.
- Мониторинг и аудит
- Включайте логирование в cupsd.conf:
LogLevel info
AccessLog /var/log/cups/access_log
ErrorLog /var/log/cups/error_log
PageLog /var/log/cups/page_log- Регулярно проверяйте логи на предмет подозрительной активности.
- Ограничение привилегий
- Запускайте CUPS от непривилегированного пользователя (обычно
lp). - Используйте AppArmor или SELinux для дополнительной изоляции.
Устранение неполадок: типичные проблемы и их решение
Даже при правильной настройке могут возникать проблемы. Рассмотрим наиболее частые.
1. Принтер не определяется
- Проверьте физическое подключение (USB, сеть).
- Убедитесь, что служба CUPS запущена:
systemctl status cups. - Выполните перезапуск:
sudo systemctl restart cups. - Проверьте, видит ли система устройство:
lsusbдля USB,lpinfo -vдля всех.
2. Ошибка «Forbidden» при доступе к веб-интерфейсу
- Проверьте директивы `` в cupsd.conf. Убедитесь, что IP-адрес клиента разрешён.
- Если доступ с localhost работает, а с удалённого хоста нет — проверьте настройки
Listenи файрвол.
3. Задания зависают в очереди
- Проверьте, включён ли принтер и готов ли к печати.
- Посмотрите логи ошибок:
tail -f /var/log/cups/error_log. - Попробуйте отменить все задания и отправить тестовую страницу.
4. Неправильный драйвер или формат
- Убедитесь, что выбран правильный PPD-файл для вашей модели принтера.
- Попробуйте использовать универсальный драйвер (например, PostScript или PDF).
- Для некоторых принтеров требуются проприетарные драйверы от производителя.
5. Проблемы с сетевыми принтерами
- Проверьте доступность принтера по сети:
ping printer_ip. - Убедитесь, что на принтере включён IPP или другой поддерживаемый протокол.
- Попробуйте добавить принтер вручную, указав его URI:
ipp://printer_ip:631/ipp/print.
6. Медленная печать
- Проверьте загрузку CPU: фильтры могут потреблять много ресурсов при конвертации сложных документов.
- Уменьшите разрешение печати или используйте более простые драйверы.
- Для сетевых принтеров проверьте качество соединения (Wi-Fi vs Ethernet).
CUPS и безопасность сети: интеграция с VPN и прокси
В корпоративной среде или при работе из дома печатный сервер может быть доступен только через VPN. Это добавляет дополнительный уровень безопасности.
Настройка CUPS для работы через VPN
Если CUPS-сервер находится в защищённой сети, а клиенты подключаются через VPN (например, WireGuard или OpenVPN), настройки доступа можно ограничить IP-диапазоном VPN-подсети:
Listen 10.0.0.1:631
Allow localhost
Allow 10.0.0.0/24
Использование SSH-туннеля
Для разового доступа можно использовать SSH-туннель:
ssh -L 1631:localhost:631 user@cups-serverПосле этого веб-интерфейс будет доступен по адресу http://localhost:1631.
Проксирование через nginx
Если требуется более гибкое управление доступом, можно настроить nginx как обратный прокси для CUPS:
server {
listen 443 ssl;
server_name print.example.com;
ssl_certificate /etc/ssl/certs/print.crt;
ssl_certificate_key /etc/ssl/private/print.key;
location / {
proxy_pass http://127.0.0.1:631;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}Это позволяет использовать HTTPS, ограничивать доступ по IP или HTTP-авторизации, а также вести детальные логи.
Безопасность принтеров в гостевых сетях
Если вы предоставляете доступ к принтеру в гостевой Wi-Fi сети, обязательно:
- Изолируйте гостевую сеть от основной (VLAN).
- Настройте CUPS на приём заданий только от определённых IP.
- Используйте аутентификацию для административных функций.
- Отключите ненужные протоколы (например, LPD, если он не используется).
Вопросы и ответы
Какой порт использует CUPS по умолчанию?
CUPS использует порт 631 (TCP) для протокола IPP и веб-интерфейса. Этот порт должен быть открыт в файрволе, если вы хотите получить доступ к серверу печати из других компьютеров в сети.
Как добавить пользователя в группу lpadmin для администрирования CUPS?
Выполните команду:
sudo usermod -a -G lpadmin usernameПосле этого пользователь сможет аутентифицироваться в веб-интерфейсе CUPS для выполнения административных действий. Убедитесь, что у пользователя задан пароль.
Можно ли использовать CUPS для печати на принтерах, подключённых к Windows?
Да, для этого необходимо установить Samba. CUPS поддерживает протокол SMB, что позволяет отправлять задания на принтеры, подключённые к Windows-компьютерам. При добавлении принтера в веб-интерфейсе выберите протокол SMB и укажите путь в формате smb://hostname/printer.
Как отменить все задания в очереди печати?
Используйте команду:
cancel -a printer_nameЕсли нужно отменить все задания на всех принтерах, выполните:
cancel -a -xТакже можно использовать веб-интерфейс: перейдите в раздел «Jobs» и выберите «Cancel All Jobs».
Что делать, если CUPS не видит USB-принтер?
Проверьте, определяется ли принтер системой: выполните lsusb. Если устройство отображается, но не видно в CUPS, попробуйте перезапустить службу: sudo systemctl restart cups. Также убедитесь, что установлены необходимые драйверы. Для некоторых принтеров требуется пакет printer-driver-* или проприетарный драйвер от производителя.
Как настроить автоматическое определение сетевых принтеров?
CUPS автоматически обнаруживает сетевые принтеры, поддерживающие протоколы IPP, Bonjour (mDNS) или SNMP. Для этого не требуется дополнительной настройки — при добавлении принтера через веб-интерфейс они будут отображены в списке. Если принтер не обнаружен, попробуйте добавить его вручную, указав URI устройства.
Какие существуют альтернативы CUPS для Linux?
Хотя CUPS является стандартом де-факто, существуют альтернативы, такие как LPRng (устаревшая система на основе LPD) и Papyrus (современная замена, использующая IPP). Однако они не получили широкого распространения, и большинство дистрибутивов по умолчанию используют CUPS. Для простых сценариев можно также использовать драйверы принтеров, встроенные в приложения (например, через libcups).