Подсистема печати (CUPS)

Станислав Иевлев

Введение

Электронный документооборот на протяжении нескольких последних лет все больше и больше набирает силу. Однако не менее актуальным остаётся и бумажная, «твёрдая» копия. Настроив компьютер, человек как правило первым же делом начинает устанавливать принтер. В этой главе вы узнаете, как настроить печать в дистрибутиве ALT Linux 2.4 Master, какие препятствия вас ждут на пути и как их можно преодолеть. Сначала обсудим несколько общих вопросов, которые прольют свет на проблемы печати в Linux.

Какие виды принтеров бывают?

Инженерная мысль не останавливалась ни на секунду; с момента появления первого печатающего устройства опробована и введена в эксплуатацию масса новых технологий. На данный момент наиболее распространены следующие технологии печати:

матричные принтеры

Матричные принтеры постепенно доживают свой век, но, обладая удивительной простотой и надёжностью, продолжают ещё использоваться. С настройкой этого типа принтеров, за редкими исключениями, проблем не должно возникать.

лазерные принтеры

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

струйные принтеры

Главный лозунг струйных принтеров «дёшево и в цвете». Так как в этой индустрии не появилось явного лидера, то процветает множество стандартов и существует вероятность иметь очень экзотический с точки зрения Linux принтер.

GDI- или Windows-принтеры

«Дёшево любой ценой». Используют компьютер вместо того, чтобы все делать самим. Проблемы очень вероятны, так как протокол работы зачастую закрыт. К счастью, существуют несколько моделей, имеющих интерфейс, напоминающий интерфейс полноценных принтеров, позволяющий все-таки производить печать с низким разрешением.

Где находится драйвер принтера?

Если вам доводилось работать в Microsoft Windows, то вы прекрасно знаете, что в комплекте с каждым принтером поставляется дискета или компакт-диск с драйвером для настройки печати. К великому сожалению, в мире UNIX/Linux пока так и не договорились о едином стандарте драйверов. В настоящее время стандартом де-факто является пакет ghostscript фирмы Aladdin Software.

Что такое ghostscript?

ghostscript (далее GS) — это программа перевода из векторного формата в растровый (RIP). На вход программы подаётся документ в формате PostScript или PDF, а на выходе получается документ на языке, понятном конкретной модели принтера или графическое изображение страницы. Большинство программ Linux формируют документ в формате PostScript, поэтому оказывается, что применения GS вполне достаточно для обеспечения печати из приложений.

Что такое PostScript?

PostScript — это самый настоящий язык программирования, который используется для того, чтобы описать содержимое страницы. Например, пишутся такие серии команд: переместиться туда-то, напечатать слово такое-то, сменить шрифт на такой-то. Существуют модели принтеров, непосредственно понимающие PostScript, для всех остальных требуется посредник, и GS успешно с этим справляется. Вы спросите, как он поддерживает столько принтеров? Дело в том, что количество языков принтеров намного меньше количества существующих моделей. Например, известные всем HP LaserJet 4, 4L, 5, 5L, 6, 6L, 1100, 2100 «понимают» один и тот же язык PCL5. Если вы не страшитесь этих слов и вам любопытно посмотреть, какие драйверы языков поддерживает ваш GS — дайте команду gs --help. Так, например, ljet4 как раз и обслуживает вышеупомянутую линейку моделей принтеров.

Итак, теперь понятно, как устроена печать в любом дистрибутиве Linux: программа формирует документ на языке PostScript, GS переводит его на язык принтера, установленного в вашей системе и передаёт эстафету принтеру.

Но это ещё далеко не всё. А что если вам надо послать документ на принтер, установленный на другой машине, или напечатать сразу несколько документов и нет времени ждать, пока каждый из них будет обслужен ghostscript и уступит место следующему? Для этого существует так называемый сервер печати или спулер (от англ. spooler), обслуживающий очереди печати. Последний термин более точно отражает суть, поэтому им мы и будет пользоваться и писать дальше просто «спулер».

В ALT Linux 2.4 Master у пользователя есть несколько возможностей, чтобы настроить систему печати. Проще всего запустить программу kdeprint, входящую в состав графической среды KDE. Она обладает дружественным графическим интерфейсом и в большинстве случаев правильно определяет параметры принтера. Другой путь — настроить систему при помощи CUPS или foomatic (оба эти способа будут подробно описаны далее в этом разделе). Такая настройка может показаться более сложной, однако вы в итоге с большей вероятностью получите работающий принтер и сможете тонко регулировать параметры печати.

Спулер CUPS

Классическим спулером для UNIX а затем и для Linux был lpd. Со времён первых версий lpd было предпринято несколько попыток сделать что-нибудь более гибкое и удобное в настройке. В ALT Linux 2.4 помимо классического (и, соответственно, простого и лёгкого) lpd включена также мощная ультрасовременная система печати CUPS (Common Unix Printing System). Эта система печати постепенно завоёвывает все больше поклонников и практически уже стала новым стандартом среди спулеров.

Особенности CUPS

CUPS предоставляет достаточно много новых возможностей, по сравнению с прежними спулерами. Среди них:

Удобная система настройки

Вы просто запускаете свой любимый web-броузер, направляете его по адресу http://localhost:631 — и перед вами красивый интерфейс, где вы можете удалить из системы или добавить принтер, посмотреть очереди каждого из них, перезапустить уже выполненные задания и т. д.

Простота настройки удалённой печати

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

Поддержка самых современных и защищённых протоколов

Основной протокол обмена данными между клиентом и сервером IPP, допустима печать через защищённое SSL-соединение.

Поддержка многих языков

Старенький lpd мог печатать только в одном системном языке. CUPS может обслуживать пользователей с самыми различными кодировками.

Единая система хранения описаний принтеров, так называемые PPD-файлы

Благодаря этому производитель может поставлять такое описание вместе с принтером (это, правда, не избавляет от необходимости иметь нужный драйвер в GS).

Конфигурационные файлы CUPS

Конфигурационные файлы CUPS находятся в каталоге /etc/cups и формат их более понятен для пользователей. Файл /etc/cups/cupsd.conf содержит описание главных параметров сервера, каждый из которых сопровождается подробным описанием. Приведём некоторые, наиболее часто используемые из них:

LogLevel

Уровень подробности протоколирования. По умолчанию значение равно info. Если у вас какие-то проблемы с CUPS, а в протоколе нет ничего информативного, можете поднять уровень до максимального — debug2.

Port

TCP-порт, по которому сервер будет ожидать обращений клиентов. По умолчанию это 631 (зарезервированное для протокола IPP).

Location, Order, Allow, Deny

Серия директив, аналогичных имеющимся в web-сервере Apache. Order — порядок просмотра значений Allow и Deny, Allow — адреса, с которых разрешён доступ, Deny — адреса, с которых доступ запрещён. Пример:

<Location />
Order Deny,Allow 
Deny From All 
Allow From 127.0.0.1
</Location>

Это означает, что сначала сервер будет смотреть, запрещён ли доступ с машины (здесь запрещено для всех), а потом разрешён ли (здесь разрешён доступ только с самого сервера). Последний параметр понадобится вам для организации одного CUPS-сервера на всю локальную сеть. Организация доступа может быть устроена сколь угодно сложно благодаря поддержке концепции классов.

Файл /etc/cups/client.conf содержит настройки для клиентской части. В нём указываются всего два параметра — местоположение сервера и защищённость соединения. Скорее всего, вам не придётся там что-либо менять.

Файл /etc/cups/printers.conf содержит описание принтеров. Формат записи интуитивно понятен и похож на XML. Ниже приведён пример настройки для локального принтера.

<DefaultPrinter printer>
DeviceURI parallel:/dev/lp0
State Idle 
Accepting Yes 
JobSheets none none 
QuotaPeriod 0
PageLimit 0 
KLimit 0 
</Printer>

Существенными параметрами являются Accepting (принимает ли принтер задания) и DeviceURI (специальное описание местоположения принтера). О том как правильно составлять URI, будет рассказано ниже, когда речь пойдёт о foomatic.

Описание каждого установленного принтера (соответствующий PPD-файл) находится в /etc/cups/ppd/<имя_принтера>.ppd. При каждом старте сервер проверяет, не появились ли в каталоге /usr/share/cups/model новые описания принтеров (PPD-файлов) и проверяет последовательные и параллельные порты компьютера. В связи с этим запуск занимает некоторое время.

Для отправки заданий на печать можно использовать команду lpr (как если бы в качестве спулера был установлен lpd), для просмотра очереди заданий — lpq. Для отмены задания используйте команду cancel номер_задания.

Настройка системы CUPS

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

Настройка CUPS через web-броузер

Запустите свой любимый броузер и зайдите по адресу http://localhost:631 (например, lynx localhost:631) — вы увидите интерфейс настройки CUPS. Выберите раздел «Manage Printers», далее раздел «Add Printer». Затем у вас спросят имя и пароль администратора CUPS; по умолчанию это администратор системы (root).

Появится первый диалог — достаточно указать имя (Name) принтера, описание (Description) носит вспомогательный характер, а местоположение (Location) нужно только в том случае, если у вас настроена сложная система разграничения доступа в CUPS.

В следующем диалоге производится выбор устройства, к которому подключен принтер.

Два последующих — выбор модели и производителя принтера. Описания моделей (PPD) находятся в каталоге /usr/share/cups/model. Если вы видите подозрительно мало моделей, установите пакет cups-drivers. Обратите внимание на то, что этот пакет конфликтует с пакетом foomatic — другой системой настройки, поэтому определитесь, какой метод будете использовать.

Напоследок вы можете заказать печать пробной страницы.

Настройка CUPS через foomatic

Сложно дать краткое описание того, что же такое foomatiс. Это и база описаний моделей принтеров, и интерфейс настройки одновременно. Более того, foomatic умеет настраивать практически все известные на сегодняшний день спулеры, в частности CUPS.

Процедуру настройки лучше всего рассмотреть на конкретном примере. Пусть мы хотим настроить printer HP LaserJet 1100, расположенный на Microsoft Windows-машине SOMEHOST в рабочей группе SOMEGROUP под именем SOMEPRINTER.

  1. Сформируем URI, описывающее расположение принтера. Общий формат <протокол>://<местоположение>. Местоположение зависит от протокола.

    Если принтер подключён локально, то URI — file://путь_к_файлу, в частности может быть указан файл-устройство (например, /dev/lp0.

    Если удалённый сервер работает под управлением Microsoft Windows (наш случай), то URI — smb://user:password@SOMEGROUP/SOMEHOST/SOMEPRINTER. Некоторые поля в описании могут отсутствовать.

    Наконец, в случае Netware-сервера URI — ncp://user:password@SERVER/PRINTER

  2. Посмотрим доступные описания моделей принтеров. Для этого запустим команду foomatic-configure -O | less. Описание будет выведено на экран в формате XML. Выделим подходящее описание:

    <printer>  
            <id>62816</id>
            <make>HP</make>  
            <model>LaserJet 1100</model>
            <functionality>A</functionality>
            <autodetect>    
            <parallel>
            <commandset>MLC,PCL,PJL</commandset>
            <description>HP LaserJet 1100 Printer</description>
            <manufacturer>Hewlett-Packard</manufacturer>
            <model>HP LaserJet 1100</model>
            </parallel>  
            </autodetect>  
            <drivers>
            <driver>ljet4</driver>
            <driver>stp</driver>
            </drivers>
            </printer>

    Нас прежде всего интересует идентификатор-описание, заключённый в теги <id> — в нашем случае это 62816. Выберем также драйвер ghostscript — выбор того или иного драйвера дело опыта и вкуса. Мы остановимся на ljet4 — основной рабочей лошадке всего этого семейства принтеров.

  3. Мы собрали теперь достаточно информации для того чтобы произвести конфигурацию принтера. Это делается одной командой foomatic-configure. Мы укажем желаемый спулер (параметр -s), имя принтера (параметр -n) идентификатор описания, драйвер и URI.

    foomatic-configure -s cups -n Laser_Jet -p 62816 -d ljet4 -c \ smb://user:password@SOMEGROUP/SOMEHOST/SOMEPRINTER

Вот и готово. Настройки можете посмотреть непосредственно в конфигурационных файлах спулера или при помощи команды foomatic-configure -Q. Данная программа на моей машине сообщила следующее:

<defaultqueue>printer</defaultqueue> 
    <queue foomatic="1" spooler="cups">
    <name>Laser_Jet</name>
    <printer>62816</printer>
    <driver>ljet4</driver>
    <connect>smb://user:password@SOMEGROUP/SOMEHOST/SOMEPRINTER</connect>
    <description>HP LaserJet 1100</description> 
    </queue>
    <queue foomatic="0" spooler="cups">  
    <name>lexmark</name>
    <connect>file:/dev/lp0</connect>
    </queue>
    <queue foomatic="1" spooler="cups">
    <name>printer</name>
    <printer>62368</printer>
    <driver>ljet4</driver>
    <connect>file:/dev/lp0</connect>
    </queue>
    </queues>

Как удалить лишние принтеры?

Если вы слишком увлеклись настройками и теперь путаетесь между десятком заведённых принтеров, то самое время удалить лишние.

Удаление можно производить вручную, удалив описания из конфигурационных файлов спулера (/etc/cups/printers.conf). Для CUPS можно вновь воспользоваться Web-интерфейсом. Если вы использовали foomatic, то полезно знать команду

              $ foomatic-configure -s тип_спулера -n имя_принтера -R

где тип_спулера — CUPS.

Резюме

Подведём итоги. Система печати в Linux состоит из трёх составных частей:

  1. Интерфейс настройки (foomatic).

  2. Спулер (CUPS, lpd).

  3. Фильтр (ghostscript).

Для качественной печати из графического редактора gimp да и вообще для печати на струйных принтерах полезно воспользоваться пакетом gimp-print; он делится на три составных части: плагин для gimp, описания принтеров в формате PPD, описания принтеров в формате foomatic. После установки пакета у вас появится пункт Print в меню gimp, а также возможность выбрать новый драйвер gimp-print при настройке печати. Обязательно попробуйте этот драйвер, в большинстве случаев качество печати будет выше.

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

Что выбрать — CUPS или lpd? Сложный вопрос. Если вы настраиваете систему через foomatic, то последний сглаживает различия между системами печати и тут лучше выбрать то, что лучше подходит к вашим задачам. Если вы великолепно настраиваете вручную один спулер, а другой не умеете — выбирайте то, что знаете. CUPS имеет много полезных функций и незаменим в сетях с большим количеством пользователей. lpd, в свою очередь, более лёгок на подъём, проще устроен и, возможно, лучше подходит для рабочей станции с локально подключённым принтером.