Система печати CUPS в Linux

Практически все сервисные подсистемы, будь то графическая подсистема X Window, службы резервного копирования и т. д., для операционной системы (ОС) Linux, как и сама ОС построены на модели «клиент-сервер». Не стала исключением и служба печати, такая как CUPS. На сегодняшний день эта система является самой популярной для UNIX-подобных систем. А также активно развивается и поддерживается разработчиками. В данной статье речь пойдёт о том, что собой представляет система печати CUPS в целом. О принципах её работы, а также об особенностях её использования. Поскольку это может помочь как обычным пользователям, так и администраторам UNIX/Linux при использовании принтеров. Да и вообще задач печати.

Что собой представляет CUPS?

Система печати CUPS – это обычный веб-сервер (cupsd) и веб-клиенты, взаимодействующие между собой по протоколу HTTP. На самом деле обмен данными происходит по протоколу IPP (Internet Printing Protocol). Который является тем же HTTP, в который добавлена поддержка печати. В основе взаимодействия лежат отправка клиентами своих заданий с помощью метода POST протокола HTTP (IPP), а также запросы соответствующих статусов по методу GET всё по тому же протоколу.

По-умолчанию сервер cupsd работает по порту 631. Поскольку это типичный веб-сервер, то для него доступен веб-интерфейс для администрирования. Достаточно в любом браузере перейти по адресу http://хост_печати:631. В локальной системе это будет адрес http://localhost:631. Естественно, если сконфигурировать сеть и требуемые виртуальные хосты для работы с SSL (для должной безопасности или секретности), то можно также использовать и соответствующий порт для доступа к админке CUPS: https://хост_печати:433.

Также для администрирования cupsd существуют и обычные команды. Обычно над такими командами создаются соответствующие «обёртки» в виде графических утилит. Они доступны «из коробки» для любой графической среды. Соответствующие разделы обычно находятся в составе главных утилит по настройке системы. Также управление печатью и принтерами доступно через виджеты и апплеты рабочего стола. К примеру в GNOME или KDE.

Как работает CUPS?

Как уже было отмечено, сервер cupsd хоть и поддерживает использование командной оболочки для своего управления, всё же имеющийся веб-интерфейс более удобен. Но более консервативные пользователи или администраторы, которым лень настраивать/запускать X-сервер, могут легко обойтись и интерфейсом командной строки. Например, чтобы распечатать документ таким способом, следует выполнить команду:

$ lpr ~/Documents/week_report.pdf

Команда lpr передаст копию файла week_report.pdf на сервер cupsd. Который в свою очередь формирует для принтера очередь печати. Как только принтер будет доступен (готов для печати), сервер cupsd начнёт последовательную обработку очереди. В процессе работы CUPS читает файл документа, а также файл описания принтера (PPD-файл) для получения сведений о том, какие действия необходимо дополнительно выполнять, чтобы конкретный документ был корректно распечатан.

Процесс формирования задания для печати системой CUPS также довольно примечателен. Дело в том, что прежде чем задание будет сформировано, оно должно пройти сквозь конвейер подготовки. Который состоит из специализированных фильтров. Каждый из таких фильтров задаёт, в частности, некоторые параметры печати. Например, если пользователем было задано, чтобы на одном листе печаталось несколько страниц, то будет применён соответствующий фильтр и в итоге задание печати будет иметь определённый формат, зависящий от исходных параметров, заданных пользователем. Фильтры могут выполнять самые различные функции, например помогают принтерам выполнять растеризацию печатаемых изображений или просто инициализировать сам принтер.

Заключительным и важным этапом в работе системы CUPS является передача сформированного задания через внутренний интерфейс с узла (на котором работает сервер cupsd) непосредственно на принтер через поддерживаемый протокол и/или сетевой интерфейс, например через Ethernet. В обратном направлении передаются сведения о состоянии задания. Следующая команда выводит все доступные внутренние интерфейсы, через которые возможно взаимодействие с принтером:

$ locate backend | grep -i cups

После получения задания от сервера cupsd, принтер приступает (точнее пытается это сделать, поскольку попытки могут быть не всегда успешными) к его выполнению. В свою очередь, сервер печати, передав задание принтеру, возвращается к формированию других заданий и обработке запросов от клиентов.

Очереди печати

Для клиентов системы CUPS есть возможность управлять очередями печати, которые уже сформированы сервером cupsd. Таким образом можно откладывать задания, отменять, изменять их приоритет и даже переносить их между разными очередями.

Для получения информации об имеющихся заданиях и их состояниях существует команда:

$ lpq

Именно из её вывода можно получить номер (или идентификатор) задания, который потом используется для управления этим заданием. Таким образом осуществляется непосредственное управление очередями печати. К примеру, для того, чтобы отменить какое-либо задание в очереди следует выполнить команду:

$ lprm номер_задания

Для получения информации о текущем состоянии сервера cupsd существует команда:

$ lpstat -t
планировщик запущен
назначение системы по умолчанию ML-2010
устройство для ML-2010: usb://Samsung/ML-2010?serial=3D678BKCN2671V.
ML-2010 сейчас принимает запросы с момента Пн 18 фев 2019 17:36:51
принтер ML-2010 сейчас печатает ML-2010-1. Включен с момента Пн 18 фев 2019 17:36:51
Rendering completed
ML-2010-1 john 450560 Пн 18 фев 2019 17:36:51

Использование нескольких принтеров

Когда в системе установлено и корректно настроено несколько принтеров, неплохо иметь какой-то один, используемый по-умолчанию. Это можно сделать, задав соответствующую переменную окружения PRINTER:

$ export PRINTER=имя_принтера

Или можно воспользоваться командой lpoptions, которая задаёт параметры работы (и использования) принтера по-умолчанию для текущей учётной записи пользователя:

$ lpoptions -d имя_принтера

Настройки, устанавливаемые по-умолчанию для пользователей хранятся в их домашних каталогах в файле ~/lpoptions. А для учётной записи администратора, для тех же целей существует файл /etc/cups/lpoptions.

Несколько экземпляров одного принтера

Система CUPS позволяет использовать один и тот же принтер для различных целей, определяя для него несколько режимов работы. Распространённым случаем является печать на одном принтере черновых (для экономии краски или тонера) и законченных документов с высококачественной печатью.

Всё, что нужно — это задать для принтера несколько его экземпляров со своими настройками, которые можно определить отдельно, как для «самостоятельного» принтера. Например, следующая команда для принтера ML-2010:

$ lpoptions -р ML-2010/2up -о number-up=2 -о job-sheets=standard

создаст для него экземпляр ML-2010/2up, который настроен таким образом, что будет печатать две страницы на листе, да ещё и добавлять к ним титульные страницы. Теперь для печати можно использовать команду lpr в следующем виде:

$ lpr -Р ML-2010/2up week_report.pdf

Как видно, ключ -P задаёт используемый принтер, в данном случае созданный экземпляр ML2010/2up для печати двух страниц на листе с соответствующими титульными страницами.

Печать по сети

Система CUPS обладает хорошей гибкостью для адаптации и развёртыванию в сетях. На каждом компьютере в сети работают свои сервера cupsd, которые при должной настройке можно заставить обмениваться информацией между собой. Благодаря этому возможен доступ к удалённым принтерам. Причём к тем, что находятся даже в других посетях. Все настройки для этого делаются в файле /etc/cups/cupsd.conf. Кроме того, этого же можно добиться, активировав соответствующие опции через веб-интерфейс сервера CUPS.

Пусть требуется, чтобы к серверам john (192.168.1.5) и michael (192.168.2.7). Которые находятся в разных подсетях, можно было получить доступ для печати из третьей подсети 192.168.3. Решением является организация «подчинённого» сервера печати (к примеру bob на 192.168.3.8). Путём добавления в его файл конфигурации cupsd.conf следующих строк:

BrowsePoll john
BrowsePoll michael
BrowseRelay 127.0.0.1 192.168.3.255

Как видно, первые две строки указывают «подчинённому» серверу bob запрашивать информацию у серверов john и michael о принтерах в их собственных подсетях. В третьей строке задаётся инструкция для предоставления полученной от john и michael информации о принтерах внутри подсети сервера bob.

Система CUPS довольно функциональная и позволяет решать широкий спектр задач, как например:

  • задание нескольких очередей для одного принтера со своими параметрами по-умолчанию;
  • балансировка нагрузки между несколькими принтерами с помощью отдельного сервера;
  • организация нескольких серверов для работы с несколькими экземплярами одного и того же принтера;
  • поддержка клиентов Windows;

и многое другое.

Заключение

В заключении следует отметить, что при рассмотрении приводимых в примерах команд подробно не рассматривались сами команды. Поскольку эта информация не является принципиальной или труднодоступной. Обо всех интересующих деталях можно подробнее узнать, используя справочные руководства, например посредством команды man lpoptions. Сама же процедура настройки системы печати даже в сложных сетях трудностей обычно не вызывает. Если нет проблем с драйверами самих принтеров. Сама же система CUPS очень надёжна и стабильна. Не говоря уже о её гибкости и возможностях масштабирования. Неудивительно, что именно системой CUPS комплектуются все современные дистрибутивы Linux по-умолчанию.

Настройка и управление сервером CUPS

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: