Электронный документооборот на протяжении нескольких последних лет все больше и больше набирает силу. Однако не менее актуальным остаётся и бумажная, «твёрдая» копия. Настроив компьютер, человек как правило первым же делом начинает устанавливать принтер. В этой главе вы узнаете, как настроить печать в дистрибутиве ALT Linux 2.3 Junior, какие препятствия вас ждут на пути и как их можно преодолеть. Сначала обсудим несколько общих вопросов, которые прольют свет на проблемы печати в Linux.
Инженерная мысль не останавливалась ни на секунду; с момента появления первого печатающего устройства опробована и введена в эксплуатацию масса новых технологий. На данный момент наиболее распространены следующие технологии печати:
Матричные принтеры постепенно доживают свой век, но, обладая удивительной простотой и надёжностью, продолжают ещё использоваться. С настройкой этого типа принтеров, за редкими исключениями, проблем не должно возникать.
Лазерные принтеры обладают высокой скоростью печати, незаменимы в офисах организаций всех типов. Моделей существует множество, но, к счастью, для большинства можно найти «родной» драйвер или подобрать совместимый.
Главный лозунг струйных принтеров «дёшево и в цвете». Так как в этой индустрии не появилось явного лидера, то процветает множество стандартов и существует вероятность иметь очень экзотический с точки зрения Linux принтер.
«Дёшево любой ценой». Используют компьютер вместо того, чтобы все делать самим. Проблемы очень вероятны, так как протокол работы зачастую закрыт. К счастью, существуют несколько моделей, имеющих интерфейс, напоминающий интерфейс полноценных принтеров, позволяющий все-таки производить печать с низким разрешением.
Если вам доводилось работать в Microsoft Windows, то вы прекрасно знаете, что в комплекте с каждым принтером поставляется дискета или компакт-диск с драйвером для настройки печати. К великому сожалению, в мире UNIX/Linux пока так и не договорились о едином стандарте драйверов. В настоящее время стандартом де-факто является пакет ghostscript фирмы Aladdin Software.
ghostscript (далее GS) — это программа перевода из векторного формата в растровый (RIP). На вход программы подаётся документ в формате PostScript или PDF, а на выходе получается документ на языке, понятном конкретной модели принтера или графическое изображение страницы. Большинство программ Linux формируют документ в формате PostScript, поэтому оказывается, что применения GS вполне достаточно для обеспечения печати из приложений.
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.3 Junior у пользователя есть несколько возможностей, чтобы настроить систему печати. Проще всего запустить программу kdeprint, входящую в состав графической среды KDE. Она обладает дружественным графическим интерфейсом и в большинстве случаев правильно определяет параметры принтера. Другой путь — настроить систему при помощи CUPS или foomatic (оба эти способа будут подробно описаны далее в этом разделе). Такая настройка может показаться более сложной, однако вы в итоге с большей вероятностью получите работающий принтер и сможете тонко регулировать параметры печати.
Классическим спулером для UNIX а затем и для Linux был lpd. Со времён первых версий lpd было предпринято несколько попыток сделать что-нибудь более гибкое и удобное в настройке. В ALT Linux 2.3 помимо классического (и, соответственно, простого и лёгкого) lpd включена также мощная ультрасовременная система печати CUPS (Common Unix Printing System). Эта система печати постепенно завоёвывает все больше поклонников и практически уже стала новым стандартом среди спулеров.
CUPS предоставляет достаточно много новых возможностей, по сравнению с прежними спулерами. Среди них:
Вы просто запускаете свой любимый web-браузер, направляете его по адресу http://localhost:631 — и перед вами красивый интерфейс, где вы можете удалить из системы или добавить принтер, посмотреть очереди каждого из них, перезапустить уже выполненные задания и т. д.
Если у вас в офисе уже есть настроенный CUPS-сервер, то вам ничего не надо больше настраивать. Все CUPS общаются между собой; ваш сервер узнает, что уже есть сосед с настроенным принтером и посылает задание сразу на него.
Основной протокол обмена данными между клиентом и сервером IPP, допустима печать через защищённое SSL-соединение.
Старенький lpd мог печатать только в одном системном языке. CUPS может обслуживать пользователей с самыми различными кодировками.
Благодаря этому производитель может поставлять такое описание вместе с принтером (это, правда, не избавляет от необходимости иметь нужный драйвер в GS).
Конфигурационные файлы CUPS находятся в каталоге /etc/cups и формат их более понятен для пользователей. Файл /etc/cups/cupsd.conf содержит описание главных параметров сервера, каждый из которых сопровождается подробным описанием. Приведём некоторые, наиболее часто используемые из них:
Уровень подробности протоколирования. По умолчанию значение равно info. Если у вас какие-то проблемы с CUPS, а в протоколе нет ничего информативного, можете поднять уровень до максимального — debug2.
TCP-порт, по которому сервер будет ожидать обращений клиентов. По умолчанию это 631 (зарезервированное для протокола IPP).
Серия директив, аналогичных имеющимся в 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 номер_задания.
Имеющихся знаний уже вполне хватит для того, чтобы попытаться настроить принтер вручную. Но это делать незачем, так как есть более удобные и наглядные способы.
Запустите свой любимый браузер и зайдите по адресу 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 — другой системой настройки, поэтому определитесь, какой метод будете использовать.
Напоследок вы можете заказать печать пробной страницы.
Сложно дать краткое описание того, что же такое foomatiс. Это и база описаний моделей принтеров, и интерфейс настройки одновременно. Более того, foomatic умеет настраивать практически все известные на сегодняшний день спулеры, в частности CUPS.
Процедуру настройки лучше всего рассмотреть на конкретном примере. Пусть мы хотим настроить printer HP LaserJet 1100, расположенный на Microsoft Windows-машине SOMEHOST в рабочей группе SOMEGROUP под именем SOMEPRINTER.
Сформируем URI, описывающее расположение принтера. Общий формат <протокол>://<местоположение>. Местоположение зависит от протокола.
Если принтер подключен локально, то URI — file://путь_к_файлу, в частности может быть указан файл-устройство (например, /dev/lp0.
Если удаленный сервер работает под управлением Microsoft Windows (наш случай), то URI — smb://user:password@SOMEGROUP/SOMEHOST/SOMEPRINTER. Некоторые поля в описании могут отсутствовать.
Наконец, в случае Netware-сервера URI — ncp://user:password@SERVER/PRINTER
Посмотрим доступные описания моделей принтеров. Для этого запустим команду 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 — основной рабочей лошадке всего этого семейства принтеров.
Мы собрали теперь достаточно информации для того чтобы произвести конфигурацию принтера. Это делается одной командой 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 состоит из трёх составных частей:
Интерфейс настройки (foomatic).
Спулер (CUPS, lpd).
Фильтр (ghostscript).
Для качественной печати из графического редактора gimp да и вообще для печати на струйных принтерах полезно воспользоваться пакетом gimp-print; он делится на три составных части: плагин для gimp, описания принтеров в формате PPD, описания принтеров в формате foomatic. После установки пакета у вас появится пункт в меню gimp, а также возможность выбрать новый драйвер gimp-print при настройке печати. Обязательно попробуйте этот драйвер, в большинстве случаев качество печати будет выше.
Если вы используете CUPS и не желаете печатать через lpr, то к вашим услугам его графические аналог и xpp. Последний, помимо всего прочего, позволяет задать большое количество дополнительных настроек для сервера CUPS.
Что выбрать — CUPS или lpd? Сложный вопрос. Если вы настраиваете систему через foomatic, то последний сглаживает различия между системами печати и тут лучше выбрать то, что лучше подходит к вашим задачам. Если вы великолепно настраиваете вручную один спулер, а другой не умеете — выбирайте то, что знаете. CUPS имеет много полезных функций и незаменим в сетях с большим количеством пользователей. lpd, в свою очередь, более лёгок на подъём, проще устроен и, возможно, лучше подходит для рабочей станции с локально подключённым принтером.