Система печати CUPS – универсальный и очень гибкий инструмент для организации печати и управления принтерами в сети. При этом CUPS довольно просто администрируется, из-за чего эта система очень популярна среди системных администраторов. Также эта система обладает некоторыми особенностями и возможностями. Которые, если ими грамотно и умело распоряжаться, делают CUPS незаменимой для построения системы печати в обслуживаемой сети.
Управление сервером CUPS
Работа системы печати CUPS завязана на взаимодействии клиентов печати с самим сервером cupsd. Вообще, то как работает cupsd, очень похоже на то как работает веб-сервер Apache. Даже формат конфигурационного файла /etc/cups/cupsd.conf очень похож на соответствующий файл Apache. Как можно видеть работа сервера cupsd определяется настройками, заданными в файле cupsd.conf, а настройка его работы и управление им аналогична настройке и управлению Apache.
По-умолчанию, так сказать «из коробки» файл cupsd.conf очень детально комментирован и разобраться с теми или иными опциями особого труда не составляет. Чтение конфигурации производится сервером cupsd только в момент запуска. Поэтому после внесения и сохранения сделанных настроек необходимо перезапустить cupsd. Это можно сделать стандартным для Linux образом, выполнив команду:
$ /etc/init.d/cups restart
или:
$ /etc/init.d.cupsys restart
Для редактирования конфигурационного файла системы CUPS можно использовать не только текстовые редакторы, но также и графический веб-интерфейс, доступный по адресу http://localhost:631/admin в веб-браузере.
Если используется графическая среда, то в современных дистрибутивах в настройках системы всегда имеется отдельный раздел для управления печатью и принтерами, который предоставляет, пусть и самые базовые, но достаточные возможности для управления и настройки системы печати.
Настройка сервера печати для сети
Когда в сети имеются несколько принтеров, которые по объективным причинам не могут быть подключены к одному компьютеру или когда принтеры не подключены непосредственно к тому компьютеру, на котором работает главный сервер CUPS, то целесообразно настроить сервер cupsd, так, чтобы он мог принимать задания на печать из сети. По-умолчанию CUPS работает с локально установленными принтерами, а для того, чтобы она могла обрабатывать задания из сети, в конфигурационном файле cupsd.conf нужно внести некоторые изменения. Для начала, в секции Location:
Order Deny,Allow Deny From All Allow From 127.0.0.1
нужно добавить ещё одну директиву «Allow From». В итоге должно получиться:
Order Deny,Allow Deny From All Allow From 127.0.0.1 Allow From адрес_сети
Таким образом, в качестве адреса сети может выступать IP-адрес (например 192.168.0.0), для которой следует обслуживать задания. После этого следует указать директиву BrowseAddress:
BrowseAddress 192.168.0.255:631
Она задаёт адрес и порт для рассылки информации об обслуживаемых сервером cupsd принтерах всем компьютерам из указанной с помощью директивы «Allow From» сети.
Конфигурирование в автоматическом режиме
В большинстве случаев при добавлении новых принтеров система CUPS способна самостоятельно определить, что в систему устанавливается новый принтер. В самом сложном случае придётся выполнить эту процедуру вручную через веб-интерфейс системы CUPS и пройти через несколько несложных этапов установки и настройки принтера. Это всецело заменяет работу того самого «удобного» установочного ПО (программного обеспечения). Которое поставляется производителями принтеров для систем Windows и Mac OS, но обходит стороной (довольно часто) системы Linux.
Если CUPS сконфигурирована так, что автоматически могут распознаваться принтеры, подключаемые к другим компьютерам в сети (и даже из других подсетей). То центральный сервер cupsd просто получит уведомление об этом и сможет обслуживать новые принтеры. Причём об этом будут «знать» все сконфигурированные клиенты данной сети и даже подсетей. Это возможно благодаря тому, что на каждом компьютере, на котором установлена и запущена система CUPS работает свой сервер cupsd, который обменивается (если задана соответствующая конфигурация) информацией о «своих» принтерах с серверами на других машинах, предоставляя общий пул принтеров в сети.
Это очень удобно, ведь в большинстве случаев нет необходимости добавлять новый локальный или даже удалённый принтер в перечень доступных устройств печати для локальной машины или копировать его PDD-файл.
Конфигурирование сетевых принтеров
Для этой задачи в системах Linux нет ничего необычного. В данном случае даже используемая система печати особой роли не играет, поскольку сетевая конфигурация сводится к заданию IP-адреса собственно, принтеру. Сделать это можно двумя способами:
- использовать DHCP-сервер, который автоматически будет «выдавать» сетевым устройствам, в том числе и подключенным к сети принтерам их IP-адреса;
- использовать статический IP-адрес для принтера, заданный вручную.
Для второго случая используется консоль принтера (с кнопками, табло и т. д.), в меню которого можно отыскать раздел для задания IP-адреса. Также некоторые принтеры предоставляют виртуальную консоль, доступную через подключение (к принтеру) по последовательному порту.
Некоторые модели принтеров даже предоставляют красивый и удобный веб-интерфейс для конфигурации. Однако задействовать его можно только после того как IP-адрес для принтера задан и он доступен в сети.
Добавление принтеров в систему CUPS может быть произведено с помощью команды lpadmin, например так:
$ lpadmin -р localprinter -Е -v parallel:/dev/lp0 -m pxlcolor.ppd
Или:
$ lpadmin -p netprinter -E -v socket://192.168.0.5 -m laserjet.ppd
Первая команда добавляет локально подключенный принтер (через параллельный интерфейс) под именем localprinter. Подключая его через порт /dev/lp0. А вторая команда добавляет сетевой принтер netprinter. Подключая его через IP-адрес 192.168.0.5. При этом в обоих случаях для каждого устройства указываются универсальные URI-идентификаторы (составляющие адрес подключения) и PPD-файл (PostScript Printer Description). Доступный из набора таких файлов в каталоге /usr/share/cups/model.
Теперь, если сервер cups настроен как сетевой сервер печати. То добавленные принтеры станут доступными для всей сети. При этом перезапуск cupsd не требуется.
Для разных конфигураций подключения существуют различные варианты URI-идентификаторов, например:
ipp://uni.finance.com/ipp lpd://uni.research.com/ps serial://dev/ttyS0?baud=9600+parity=even+bits=7 socket://dev.canary.com:9100 usb: //XEROX/Phaser%206120?serial=YGG210547
Как можно видеть, в URI-идентификаторах могут использоваться передаваемые параметры. Чтобы узнать, какие устройства печати доступны системе CUPS, а также понятный ей список типов URI-идентификаторов. Можно воспользоваться командой lpinfo -v:
$ lpinfo -v file cups-brf:/ serial serial:/dev/ttyS0?baud=115200 network https network lpd direct hp network socket network ipp network https network ipps direct hpfax
Классы принтеров
Классы принтеров предназначены для группирования принтеров, которые должны обслуживаться одной очередью заданий. Для любого из принтеров одного класса может быть доступно для выполнения текущее задание. Однако передано задание будет тому, кто первый освободился в очереди.
Чтобы создать класс принтеров classprint, и добавить в него принтеры printerone и printertwo, следует выполнить следующие команды:
$ lpadmin -р printerone -с classprint $ lpadmin -p printertwo -c classprint
Как видно, специальной команды для задания класса нет — он существует когда в него добавлен принтер. В системе CUPS также можно задавать нескольким принтерам одинаковые имена и при этом они будут считаться объединёнными в один класс. Такие вот интеллектуальные способности у CUPS.
Отключение принтеров
Иногда необходимо временно сделать принтер недоступным для печати. Т. е. чтобы сервер cupsd не удалял его из своего пула обслуживания, а просто не отправлял на него задания от клиентов. Такие ситуации возникают, когда принтер нужно временно отсоединить для обслуживания. Чтобы полностью удалить принтер (или класс) следует использовать команду:
$ lpadmin -х printerone $ lpadmin -х classprint
Для временного отключения принтера используется блокировка очереди печати для него. Причём блокироваться может как «выходная» часть очереди (на стороне принтера), так и «входная» — на этапе формирования самой очереди сервером. В первом случае задания всё равно будут отправляться на принтер, но никогда не будут выполнены. Во втором случае выполнены будут только те задания, которые уже находились в очереди. А все последующие после блокировки «входа» будут отклоняться.
Для контроля над выходной частью очереди печати (на стороне принтера) предназначены команды cupsdisable и cupsenable – которые выключают и включают выход соответственно. Для управления состоянием входа очереди предназначены команды reject и accept.
Если принтер становится «недоступным » на длительное время (например унесли на ремонт или обслуживание). То целесообразнее использовать отключение его от его очереди, т. е.:
$ sudo reject samsungml
Если же точно известно, что принтер будет недоступен около двадцати минут (пока будет производится замена картриджа). То можно использовать команду:
$ sudo cupsdisable samsungml
Чтобы легче запомнить и надёжнее применять эти команды в зависимости от ситуации. Нужно понимать, что отклоняются (reject) и принимаются (accept) задания очереди. А отключаются (cupsdisable) и включаются (cupsenable) только устройства — т. е. принтеры. Совсем неразумно использовать команду cupsdisable, если принтер недоступен длительное время. При этом на него поступают (через вход очереди) задания, которые скорее всего не выполнятся. Команда reject в данном случае предпочтительнее.
В следующей таблице приведены все команды, используемые системой CUPS:
Команда | Назначение |
cups-config | Выводит информацию об API-интерфейсе, компиляторе, каталоге и канале связи системы CUPS. |
cupsdconf | Утилита для конфигурирования. |
cupsdisable | Отключает печать принтера или класса. |
cupsenable | Включает печать принтера или класса. |
lpinfo | Показывает доступные устройства или драйверы. |
lpoptions | Отображает или устанавливает опции и параметры по умолчанию принтера. |
Ippasswd | Добавляет, изменяет или удаляет пароли дайджеста. |
По каждой из этих команд можно получить подробную справку из интерактивного справочного руководства. Используя команду man команда.
Заключение
Система печати CUPS пожалуй самая удачная среди открытых и свободных систем подобного рода. Не обременяющая администраторов излишней сложностью или неповоротливостью. Но при этом предоставляет практически неограниченные возможности для масштабирования и интеграции в целевых системах и сетях.