HPUNIX Сайт о ОС и не только!

Сервер печати CUPS

30 марта 2009 - unix
Сервер печати CUPS
Сервер печати CUPS

#image.jpgНеплохого времени, читатели моего блога и гости. На данный момент желаю сделать небольшую заметку о системе печати Linux, чтобы ввести в курс дела и приготовить вас к следующей статье о сервере печати SAMBA.

Итак, исторически в Linux было Два системы печати LPRng и BSD LPD. Данные системы умеренно устаревают и на смену им приходит система печати CUPS, которая разработана как замена вышеуказанных систем и возможности которой еще шире.

При использовании GUI интерфейса GNOME, KDE или другого, управление принтерами с помощью CUPS осуществляется не сложнее, чем в Windows. В статье я же сделаю упор на работу в консольном режиме и GUI инструменты рассматривать практически не буду (кнопки Ctrl+P (печать в GUI) есть на всех клавиатурах и работают одинаково как в Windows, так и в Linux #image.jpg ). Отмечу только-только при использовании графической оболочки, запускаются те же команды, что мы рассмотрим далее.

Как система печати Linux обрабатывает файлы

Все мы знаем, что когда печать работает без перебоев, то отправив на печать какой-либо файл о нем можно забыть, пока листы не выйдут на принтере. Но если печать "поломалась", то необходимо обдумывать принцип работы, чтобы поправить делему.

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

Не считая всего остального, данные процессы делают преобразование содержимого исходных файлов, подготавливая его к выводу на определенный принтер. Для этого употребляются язык принтера и протоколы обмена, на основании которых настраивается разрешение печати, формируются страницы, если необходимо, убираются/добавляются колонтитулы, нумеруются страницы.

Система печати Linux находится под контролем беса cupsd, который обладает всеми необходимыми преимуществами, чтобы обращаться к принтерам от имени пользователя. Данный бес автоматом загружается при запуске Linux и настраивает систему для корректной работы печати. Все нужные свойства бес берет из каталога /etc/cups.

В Linux, где установлен CUPS, для печати употребляются два основных метода. В базе первого лежат команды lpr и lp (в более новых версиях CUPS). Которые в качестве аргумента принимают имя печатаемого файла и отправляют его на печать на принтер по умолчанию.

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

В ответ на такой запрос, CUPS возвращает приложению файл в формате PPD (PostScript Printer Definition - описание принтера PostScript). Данные файлы обрисовывают возможности, которыми обладают принтеры (размер страницы, разрешение, ориентация и т.п.).

Файлы PPD являются главными компонентами в пакете драйверов для принтеров. Для принтеров, которые не поддерживают язык PostScript, предоставляются PPD-файлы, описывающие возможности через GhostScript.

Совершенно не принципно, поддерживает приложение CUPS или нет - после того, как бес cupsd примет задание печати, он расположит его в каталог буфера печати - спулер (обычно - /var/spool/cups) вместе с файлом, описывающим данное задание. Далее cupsd сортирует список заданий и отправляет на принтер одно за другим.

Управление печатью в Linux

Система печати в Linux довольно сложна и настройка обычно происходит либо очень просто (потому что CUPS все сам увидит и настроит), либо очень тяжело (к примеру попробуйте быстро вынудить работать принтер Canon LBP-810 с Linux). Работа печати в Linux базирована на нескольких различных пакетах.

Основной - это пакет cups, содержащий бес печати. В большинстве дистрибутивов имеется пакет cups в репозитории. Право выбора, каким образом устанавливать ПО в Linux оставляю для вас.
Я установил так: apt-get install cups. Данный пакет отлично подхватывает все нужные зависимости.

Давайте малость разберемся, что же такое PostScript, а что такое GhostScript? Как показывает практика, приложения Linux и UNIX практически всегда генерируют на выходе файлы 2-ух форматов:

Обыденный текст

Программы могут отправлять на принтер файлы в простом текстовом формате исходя из гипотезы, что в качестве принтера употребляется обыденное устройство постраничной печати.

PostScript

Язык Adobe PostScript - это один из многих языков принтеров. Большая часть приложений, использующих сложное форматирование на выходе всегда делают файл формата PostScript.

Сервер печати CUPS

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

Следует узреть, что GhostScript рассматривает все принтеры, как графические устройства. Таким образом, при выводе на печать обыденного текстового документа GhostScript преобразует текст в растровый  рисунок и отправляет этот рисунок принтеру.

Это означает, что GhostScript не может использовать шрифты, встроенные в принтер. Это так же означает, что печать документов через GhostScript временами делается более копотливо, чем печать тех же документов на драйверах Windows. Хотя практически всегда эта разница практически не видна, бывают и большие задержки.

Стандартная установка CUPS поддерживает довольно узкий спектр принтеров (хотя, это довольно спорный момент #image.jpg ). Как правило это модели с поддержкой PostScript и принтеры компаний HP и Epson. Если принтер автоматом не определился, то необходимо посетить сайт производителя принтера для получения пакета драйверов и инструкций об установке принтера в системе Linux.

Подключение и настройка принтеров в Linux

Поначалу, подключение и настройка заключается в настройке аппаратных средств. Другими словами необходимо убедиться, что принтер физически соединен с компьютером  и убедиться в исправности принтера и соединительных проводов.

Проще всего настроить печать в Linux через принтер который совместим с Linux. Лучший признак сопоставимости с Linux - это наличие поддержки языка PostScript в принтере. Временами, производители любят заявлять о поддержке PostScript ошибочно.

Под словом "Ошибочно" необходимо обдумывать то, что поддержка PostScript реализована не в самом принтере, а в драйверах, поставляемых к принтеру, которые скорее всего рассчитаны на ОС Windows. Примеров можно привести кучу: принтеры компании Canon серии LBP, модели 810, 1120, принтеры компании HP серии LJ 10xx.

Чтобы убедиться в поддержке принтера Linux, можно сходить сюда: http://www.linuxfoundation.org/collaborate/workgroups/openprinting/database/databaseintro. На данном сайте можно так же скачать файлы PPD для вашего принтера.

Для подключения принтеров существует несколько интерфейсов, таких как: USB, Ethernet, LPT и COM (последний безбожно устарел). Данным интерфейсам соответствуют устройства LPT - /dev/lp*, COM - /dev/ttyS* (вместо звездочек, естественно - цифра, обозначающая номер порта, к которому подключено устройство), для взаимодействия с USB употребляется дерево каталогов /proc/bus/usb, для Ethernet, естественно - IP.

До того как настроить службы печати в Linux, необходимо убедиться, что соединение с принтером взаправду установлено. Наверное, лучше всего это проверить из операционной системы windows, если она у вас установлена 2ой системой.

Если нет такой возможности, то давайте попробуем отыскать наш принетр средствами Linux. Если принтер подключен к LPT, либо COM, то можно выполнить команду для LPT: cat /etc/fstab > | /dev/lp0 или для com: cat /etc/fstab > | /dev/ttyS0.

При всем этом, на устройстве в лучшем случае должно напечататься содержимое файла, в худшем - мигнуть индикаторы состояния. Если употребляется порт USB, то можно проверить подключение устройства с помощью команды lsusb, вывод которой должен содержать маркировку принтера. Для Ethetnet соединения, думаю достаточно проверить доступность IP принтера командой ping.

Настройка безопасности CUPS

В отличии от старых систем LPD, управлять системой печати CUPS удобнее через Web. Но, по умолчанию, настройка доступа к web интерфейсу может быть  настроена не корректно. Некоторые дистрибутивы предоставляют свои инструменты управления CUPS.

Все функции CUPS хранятся в файле /etc/cups/cupsd.conf. Данный файл смоделирован по виду файла Веб сервера Apache. Данному веб серверу я обязательно посвящу обзор.

Файл конфигурации cupsd.conf начинается с ряда глобальных черт директив, которые оформлены в виде пар имя - значение. Для примера, чтобы поменять имя сервера, отправляемое другим системам, необходимо ввести директиву:

SeverName my.ptintserver.local

Данная строка определяет имя сервера как my.printserver.local. Файл конфигурации обладает обилием директив, описание которых выходит далеко за рамки данной статьи.

К огорчению, на русском языке я так и не нашел полного описания конфигурационного файла. Могу сказать одно - полный пакет документации можно будет почитать на английском прямо из настроенного веб интерфейса. А так же, документация по конфигурационному файлу доступна тут. Приведу Для вас начало собственного конфигурационного файла, содержащего глобальные директивы:

Print-server:~# cat /etc/cups/cupsd.conf # указание имени сервера ServerName print-server.domain.local # указание уровня логирования LogLevel warning SystemGroup lpadmin # Разрешить доступ к серверу Port 600 30 один Listen /var/run/cups/cups.sock Listen 192.168.56.3:631 # Включение/выключение функции обзора. Browsing Off #BrowseOrder allow,deny #BrowseAllow all #BrowseAddress @LOCAL # указание типа аутентификации DefaultAuthType Basic <Location /> Allow @LOCAL # Доступ к консоли управления только из локальной сети.

Order deny,allow </Location> <Location /admin> # Доступ к администрированию только с определенной машины Allow From 127.0.0.1 Allow From 192.168.56.10 Order deny,allow </Location> <Location /admin/conf> # Доступ к изменению конфига только с аутентификацией, обозначенной в DefaultAuthType AuthType Default Order deny,allow </Location>

Давайте разберем каждый параметр.Как уже упоминалось выше, ServerName указывает имя сервера печати. LogLevel указывает подробность журналирования (по умолчанию при установке параметр равен info, если появились какие-то трудности с CUPS, а в протоколе нет ничего информативного, можно поднять уровень до большего — debug2), Port указывает на каком порту будет доступен веб-интерфейс, Listen позволяет указать на каком IP адресе будет доступен веб-интерфейс, а так же прослушиваемый сокет.

Linux2 LP11 CUPS Server

Свойства, начинающиеся на Browsing требуют отдельного разговора, они задают функции "просмотра". В данном случае, под термином просмотр необходимо обдумывать возможность CUPS обнаруживать принтеры в сети.

Данная возможность поддерживается на уровне протокола IPP. Обнаружение происходит средством широковещательных рассылок, что при большом количестве серверов CUPS или при частом выключении/подключении принтеров может порождать дополнительную нагрузку на сеть.

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

BrowseAllow и BrowseDeny

Сервер печати CUPS

Указывают CUPS на стороне клиента адреса, от которых может приниматься или отвергаться, соответственно, информация о принтерах. Формат директив соответствует директивам Allow и Deny.

В качестве аргумента для данной директивы может быть как отдельный IP, так и подсеть в формате 10.0.0.0/24 или 10.0.0.0/255.255.255.0 или 10.0.0.0-10.0.0.255, так и значение @LOCAL - обозначающее локальную сеть, а так же имена хостов. Может быть внедрение нескольких данных директив.

Browsing

Указывает CUPS предоставлять свои серверы в общий доступ, либо нет. Значения может принимать On или Off соответственно.

BrowseAddress

Подобна BrowseAllow. не считая того, что она задает КОМУ посылать пакеты, а не от кого принимать.

Далее в конфигурационном файле указана директива DefaultAuthTape, которая указывает механизм аутентификации, который будет употребляться для организации доступа по умолчанию. Basic - указывает использовать логины/пароли от локальной системы.

None - указывает не использовать аутентификацию. При указании параметра Digest все пароли будут передаваться в зашифрованном виде, но тогда необходимо сделать юзеров CUPS с помощью команды lppasswd, пользователи будут добавлены в файл /etc/cups/passwd.md5.

Существует так же директива AuthClass, которая не находится в моем конфигурационном файле. Данная директива определяет, какие группы юзеров могут иметь доступ к подсистеме. Может принимать значения: Anonymous, User, System, Group.

Параметр Anonymous указывает, что аутентификация производиться не должна. Параметр User говорит, что хоть какой пользователь системы, корректно указавший имя/пароль может иметь доступ.

System - говорит, что доступ к подсистеме могут получить только пользователи - члены системной группы cups. Group указывает возможность пользоваться подсистемой только членам группы, которая должна быть указана в последующей директиве AuthGroupName.

Директива Order определяет порядок предоставления доступа к CUPS по умолчанию. Значение Deny,Allow определяет - отвергать пробы доступа, если право на доступ не обозначено разумеется. Если директива имеет значение Allow,Deny, то доступ будет предоставлен, если разумеется не запрещен.

В конфиге можно узреть, что после DefaultAuthType идут свойства, сгруппированные в разделы <Location /...>. Такие директивы определяют доступ к определенным функциям сервера.

На этом настройку доступа к веб-интерфейсу CUPS считаю законченным. Другие деяния удобней делать через браузер. Для доступа к управлению необходимо ввести в веб-браузере строку http://ip.ad.dr.ess:631, в конечном итоге, должен показаться интерфейс управления CUPS.

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

В конечном итоге, все вышеуказанные функции сбиваются. Как говориться - удобство в угоду безопасности. Поэтому, я советую - настроив доступ к веб-морде, произвести функции принтеров в Веб-интерфейсе, проверить работоспособность, а после проверки - возвратить функции безопасности.

Особенности использования Веб интерфейса

Продолжительно о Веб-интерфейсе обрисовывать не буду. Последняя версия CUPS 1.4 практически полностью русифицирована. Управление принтерами через веб-морду не сложнее процесса установки принтера в операционной системе Windows.

Единственный нюанс в Linux - это то, что фактически, "принтер" есть очередь печати. Другими словами фактически мы посылаем документ в определенную очередь печати с определенными опциями. Очередь привязана к определенному принтеру-устройству.

Таким образом, к одному принтеру может быть привязано несколько очередей с разными опциями. Это как в Windows установить несколько "принтеров" с разными версиями драйвера, но привязанными к одному физическому устройству.

Не считая веб-интерфейса, есть так же консольные команды управления CUPS.

Свойства принтеров CUPS хранит в файле /etc/cups/printers.conf. В данный файл руками лезть не стоит. Он заполняется при настройке в веб интерфейсе. Пример файла:

Print-server:~# cat /etc/cups/printers.conf # Printer configuration file for CUPS v1.4.4 # Written by cupsd # DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING <DefaultPrinter it_216> Info Printer Location IT MakeModel HP LaserJet Series PCL 4/5 DeviceURI socket://10.0.0.216 State Idle StateTime Один млрд триста три миллиона семьсот 20 одна тыща четыреста шестьдесят Reason toner-low-report Reason toner-empty-warning Type Двенадцать тыщ триста 70 два Filter application/vnd.cups-raw Нуль - Filter application/vnd.cups-raster 50 rastertohp Accepting Yes Shared Yes JobSheets none none QuotaPeriod Нуль PageLimit Нуль KLimit Нуль OpPolicy default ErrorPolicy stop-printer Attribute marker-colors \#000000 Attribute marker-levels Нуль Attribute marker-names Black Cartridge HP Q7551A Attribute marker-types tonerCartridge Attribute marker-change-time Один млрд триста три миллиона семьсот 20 одна тыща четыреста шестьдесят </Printer>
#image.jpg

Описание каждого установленного принтера (соответствующий PPD-файл) находится в каталоге /etc/cups/ppd/<имя_принтера>.ppd.

Управление бесом CUPS ничем не отличается от управления хоть какой другой службой. Другими словами запуск, остановка, перезапуск можно выполнить командами:

Сервер печати CUPS
Print-server:~# /etc/init.d/cups start Starting Common Unix Printing System: cupsd. Print-server:~# /etc/init.d/cups restart Restarting Common Unix Printing System: cupsd. Print-server:~# /etc/init.d/cups stop

Желаю еще отметить такой нюанс.

CUPS разрабатывался как замена системе печати LPD. В LPD источником инфы о имеющихся принтерах очередях печати был файл /etc/printcap. CUPS вспять совместим с данной системой печати и если мы посмотрим на файл printcap, то увидим, что:

Print-server:~# ls -la /etc/ | grep print lrwxrwxrwx   Один root root      20 два Мар Пятнадцать 18:41 printcap -> /var/run/cups/printcap

файл printcap является символьной ссылкой на /var/run/cups/printcap. Т.о.

CUPS сама глядит за корректностью данного файла и тем обеспечивает обратную сопоставимость с LPD.

Устранение заморочек в системе печати

Не всегда удается настроить принтер с первого раза и временами настройка становится очень сложной, убивающей веры в свои силы. Постараюсь описать некоторые шаги по устранению заморочек с печатью:

  • Постарайтесь проверить работоспособность принтера на другой ОС. Естественно, если он не заработает в другой ОС, то неувязка скорее всего в аппаратной части.
  • Проверьте все физические соединения. Питание, информационный провод. Проверьте включен ли принтер и имеется ли бумага в лотке, а так же нет ли сигнализации об ошибках на принтере.
  • Если принтер подключается по USB, LPT, COM, то посмотрите выводы команд lsusb, dmesg на наличие записей о принтере. Если принтер с Ethernet-интерфейсом, проверьте связь с ним командой ping.
  • Если все вышеперечисленные проверки завершились успехом - тщательно проверьте функции CUPS.
  • Проверьте в Веб-интерфейсе, не остановлена ли очередь печати принтера.
  • Если в статусе принтера написано waiting for job copmlete, то что-то мешает CUPS очистить очередь печати принтера (например отсутствие физического соединения с принтером или нехватка прав доступа).
  • Сервер печати CUPS
  • Если при печати на бумаге выводится всякий мусор, то скорее всего выбраны некорректные свойства/модель принтера.
  • Так же, для поиска неисправности необходимо просмотреть логи принтера в каталоге /var/log/cups/
  • Ну и как обычно, для вас в помощь яндэкс и гугл.

Файлы и сборники CUPS

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

Итак, как уже говорилось, для хранения опций CUPS употребляет каталог /etc/cups/. Основной файл, имеющий для нас интерес - это cupsd.conf, который хранит глобальные функции, так же существует printers.conf, хранящий функции принтеров очередей печати.

Подкаталог ppd содержит файлы PPD для локальных принтеров. Файл passwd.md5 хранит зашифрованные пароли юзеров CUPS.

Большой объем данных лежит в /usr/share/cups/, в каком хранятся служебные файлы. Особый интерес представляет каталог /usr/share/cups/model/ (который в последней версии CUPS был перемещен в /usr/share/ppd/), который хранит описания для принтеров. При каждом старте сервер сканирует каталог /usr/share/cups/model на предмет появления новых описаний принтеров (PPD-файлов).

В процессе работы CUPS употребляет каталог /var/spool/cups/ для хранения описаний заданий печати и самих файлов заданий. Владельцем данного каталога должен быть пользователь root и группа lp. Права доступа определены, как Семьсот 10 (rwx--x---).

Так же употребляется каталог /var/run/cups/ для хранения инфы о работе беса, такой как сокет, файл printcap и др.

Резюме

На этом закончу статью. Очень расплывчатая вышла информация, более кропотливо можно изучить CUPS на сайте http://www.cups.org  в официальной документации. Считаю, что цель статьй - получить представление о работе CUPS достигнута.

Мы сообразили, как организовать доступ к веб-морде CUPS, а так же усвоили, где лежат файлы CUPS и для чего нужны, как управлять службой и устранять возможные задачи. Какие-то более узкие решения на базе CUPS буду публиковать в следующих статьях.

  Надеюсь статья Для вас будет полезна. Жду комментариев.

Похожие статьи

  • Сервер точного времени своими руками (на базе беса ntpd)

    Неплохого дня, гости и постоянные читатели  блога. Умеренно перехожу от основ к более углубленному исследованию Linux. На данный момент желаю рассмотреть работу протокола ntp, а так же настройку сервера...

  • Сервер SAMBA и сервер печати на CUPS

    Неплохого времени, гости и читатели блога! На данный момент продолжу рассматривать возможности пакета SAMBA. Перед чтением данного материала я бы посоветовал ознакомиться со статьями базы SAMBA и CUPS.

    Ит...

  • Перенос сервера DrWeb Enterprise Security Suite на Debian

    Неплохого времени, уважаемые читатели блога! На данный момент публикую малеханькое HOWTO для тех кто вводит OpenSource :)  Встала задача перенести сервер DrWeb EntSuite 6 с Windows Две тыщи три на Linux. Выкладываю...

  • Управление бесом syslogd и журналированием в Linux

    На данный момент на речь пойдет о журналировании в Linux. Функция системного журналирования (т.н. "логи" или логирование) - это основной источник инфы о работе системы и ошибках. Журналирование может осущ...

  • Работа DNS-сервера BIND

    Неплохого времени, уважаемые читатели. На данный момент в блоге желаю рассмотреть работу Domain Name System - сервера на Linux. Разбираясь с работой SAMBA попробовал поднять свой реальный контроллер...

Теги: ос
Рейтинг: +8 Голосов: 166 3823 просмотра
Комментарии (0)

Нет комментариев. Ваш будет первым!

Найти на сайте: параметры поиска

Windows 7

Среда Windows 7 на первых порах кажется весьма непривычной для многих.

Windows 8

Если резюмировать все выступления Microsoft на конференции Build 2013.

Windows XP

Если Windows не может корректно завершить работу, в большинстве случаев это

Windows Vista

Если к вашему компьютеру подключено сразу несколько мониторов, и вы регулярно...