Пред. Начало След.
Наверх
Сведения о документе

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

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


Технологии печати в 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 в качестве спулера работает современная система печати CUPS (Common UNIX Printing System), которая является фактическим стандартом среди спулеров.

Как настроить принтер?

В ALT Linux 3.0 у пользователя есть несколько способов настроить систему печати. Модуль настройки принтеров из ALT Linux Control Center предназначен для добавления/удаления принтеров (в том числе сетевых). Во многих случаях он позволяет определить тип принтера автоматически, а если это не удаётся, предлагает большой список поддерживаемых моделей. Чтобы произвести более тонкую настройку параметров печати, можно воспользоваться стандартными средствами CUPS. Есть также альтернативные способы добавления и удаления принтеров, например, средствами того же CUPS или foomatic. Дальше будет рассказано обо всём этом подробнее.

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

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

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

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

Конфигурационные файлы 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-файлов) и проверяет последовательные и параллельные порты компьютера. В связи с этим запуск занимает некоторое время.

Настройка 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.

<queues>
<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.

Пред. Начало След.
Наверх
Сведения о документе