CUPS Linux: Полное руководство по установке, настройке и безопасной эксплуатации печатного сервера

Подробное руководство по CUPS в Linux: установка, настройка, веб-интерфейс, команды lp, безопасность, фильтры и устранение неполадок. Для администраторов и продвинутых пользователей.

Что такое 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.jpg

lpstat — просмотр статуса принтеров и очередей:

lpstat -p -d
lpstat -o

lpq — просмотр очереди печати (аналог BSD):

lpq -P printer_name

lprm — удаление задания из очереди:

lprm job-id

lpoptions — настройка параметров по умолчанию:

lpoptions -d printer_name
lpoptions -p printer_name -o media=A4 -o sides=two-sided-long-edge

cancel — отмена задания:

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 системах. Поэтому настройка безопасности — обязательный этап.

Основные меры:

  1. Ограничение доступа по сети
  • Не открывайте порт 631 на публичные интерфейсы без необходимости.
  • Используйте файрвол (ufw, iptables, nftables) для ограничения доступа только доверенными подсетями.
  1. Аутентификация и авторизация
  • Используйте сильные пароли для всех учётных записей, имеющих доступ к администрированию.
  • Ограничьте группу lpadmin только необходимыми пользователями.
  • Рассмотрите использование аутентификации через PAM или LDAP для централизованного управления.
  1. Шифрование трафика
  • CUPS поддерживает HTTPS. Настройте TLS-сертификат для веб-интерфейса, чтобы защитить данные при передаче.
  • Используйте IPP-over-TLS (ipps) для защищённой печати.
  1. Регулярные обновления
  • Следите за обновлениями пакета CUPS в вашем дистрибутиве. Критические исправления выходят оперативно.
  1. Мониторинг и аудит
  • Включайте логирование в cupsd.conf:
     LogLevel info
     AccessLog /var/log/cups/access_log
     ErrorLog /var/log/cups/error_log
     PageLog /var/log/cups/page_log
  • Регулярно проверяйте логи на предмет подозрительной активности.
  1. Ограничение привилегий
  • Запускайте 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).