Не удалось подключиться к серверу cups астра линукс

Обновлено: 05.07.2024

Система печати CUPS – универсальный и очень гибкий инструмент для организации печати и управления принтерами в сети. При этом CUPS довольно просто администрируется, из-за чего эта система очень популярна среди системных администраторов. Также эта система обладает некоторыми особенностями и возможностями. Которые, если ими грамотно и умело распоряжаться, делают CUPS незаменимой для построения системы печати в обслуживаемой сети.

Управление сервером CUPS

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

По-умолчанию, так сказать «из коробки» файл cupsd.conf очень детально комментирован и разобраться с теми или иными опциями особого труда не составляет. Чтение конфигурации производится сервером cupsd только в момент запуска. Поэтому после внесения и сохранения сделанных настроек необходимо перезапустить cupsd. Это можно сделать стандартным для Linux образом, выполнив команду:

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

Настройка сервера печати для сети

Когда в сети имеются несколько принтеров, которые по объективным причинам не могут быть подключены к одному компьютеру или когда принтеры не подключены непосредственно к тому компьютеру, на котором работает главный сервер CUPS, то целесообразно настроить сервер cupsd, так, чтобы он мог принимать задания на печать из сети. По-умолчанию CUPS работает с локально установленными принтерами, а для того, чтобы она могла обрабатывать задания из сети, в конфигурационном файле cupsd.conf нужно внести некоторые изменения. Для начала, в секции Location:

нужно добавить ещё одну директиву «Allow From». В итоге должно получиться:

Таким образом, в качестве адреса сети может выступать IP-адрес (например 192.168.0.0), для которой следует обслуживать задания. После этого следует указать директиву BrowseAddress:

Она задаёт адрес и порт для рассылки информации об обслуживаемых сервером cupsd принтерах всем компьютерам из указанной с помощью директивы «Allow From» сети.

Конфигурирование в автоматическом режиме

В большинстве случаев при добавлении новых принтеров система CUPS способна самостоятельно определить, что в систему устанавливается новый принтер. В самом сложном случае придётся выполнить эту процедуру вручную через веб-интерфейс системы CUPS и пройти через несколько несложных этапов установки и настройки принтера. Это всецело заменяет работу того самого «удобного» установочного ПО (программного обеспечения). Которое поставляется производителями принтеров для систем Windows и Mac OS, но обходит стороной (довольно часто) системы Linux.

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

Это очень удобно, ведь в большинстве случаев нет необходимости добавлять новый локальный или даже удалённый принтер в перечень доступных устройств печати для локальной машины или копировать его PDD-файл.

Конфигурирование сетевых принтеров

Для этой задачи в системах Linux нет ничего необычного. В данном случае даже используемая система печати особой роли не играет, поскольку сетевая конфигурация сводится к заданию IP-адреса собственно, принтеру. Сделать это можно двумя способами:

  • использовать DHCP-сервер, который автоматически будет «выдавать» сетевым устройствам, в том числе и подключенным к сети принтерам их IP-адреса;
  • использовать статический IP-адрес для принтера, заданный вручную.

Для второго случая используется консоль принтера (с кнопками, табло и т. д.), в меню которого можно отыскать раздел для задания IP-адреса. Также некоторые принтеры предоставляют виртуальную консоль, доступную через подключение (к принтеру) по последовательному порту.

Некоторые модели принтеров даже предоставляют красивый и удобный веб-интерфейс для конфигурации. Однако задействовать его можно только после того как IP-адрес для принтера задан и он доступен в сети.

Добавление принтеров в систему CUPS может быть произведено с помощью команды lpadmin, например так:

Первая команда добавляет локально подключенный принтер (через параллельный интерфейс) под именем localprinter. Подключая его через порт /dev/lp0. А вторая команда добавляет сетевой принтер netprinter. Подключая его через IP-адрес 192.168.0.5. При этом в обоих случаях для каждого устройства указываются универсальные URI-идентификаторы (составляющие адрес подключения) и PPD-файл (PostScript Printer Description). Доступный из набора таких файлов в каталоге /usr/share/cups/model.

Теперь, если сервер cups настроен как сетевой сервер печати. То добавленные принтеры станут доступными для всей сети. При этом перезапуск cupsd не требуется.

Для разных конфигураций подключения существуют различные варианты URI-идентификаторов, например:

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

Классы принтеров

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

Чтобы создать класс принтеров classprint, и добавить в него принтеры printerone и printertwo, следует выполнить следующие команды:

Как видно, специальной команды для задания класса нет — он существует когда в него добавлен принтер. В системе CUPS также можно задавать нескольким принтерам одинаковые имена и при этом они будут считаться объединёнными в один класс. Такие вот интеллектуальные способности у CUPS.

Отключение принтеров

Иногда необходимо временно сделать принтер недоступным для печати. Т. е. чтобы сервер cupsd не удалял его из своего пула обслуживания, а просто не отправлял на него задания от клиентов. Такие ситуации возникают, когда принтер нужно временно отсоединить для обслуживания. Чтобы полностью удалить принтер (или класс) следует использовать команду:

Для контроля над выходной частью очереди печати (на стороне принтера) предназначены команды cupsdisable и cupsenable – которые выключают и включают выход соответственно. Для управления состоянием входа очереди предназначены команды reject и accept.

Если принтер становится «недоступным » на длительное время (например унесли на ремонт или обслуживание). То целесообразнее использовать отключение его от его очереди, т. е.:

Если же точно известно, что принтер будет недоступен около двадцати минут (пока будет производится замена картриджа). То можно использовать команду:

Чтобы легче запомнить и надёжнее применять эти команды в зависимости от ситуации. Нужно понимать, что отклоняются (reject) и принимаются (accept) задания очереди. А отключаются (cupsdisable) и включаются (cupsenable) только устройства — т. е. принтеры. Совсем неразумно использовать команду cupsdisable, если принтер недоступен длительное время. При этом на него поступают (через вход очереди) задания, которые скорее всего не выполнятся. Команда reject в данном случае предпочтительнее.

В следующей таблице приведены все команды, используемые системой CUPS:

Команда Назначение
cups-config Выводит информацию об API-интерфейсе, компиляторе, каталоге и канале связи системы CUPS.
cupsdconf Утилита для конфигурирования.
cupsdisable Отключает печать принтера или класса.
cupsenable Включает печать принтера или класса.
lpinfo Показывает доступные устройства или драйверы.
lpoptions Отображает или устанавливает опции и параметры по умолчанию принтера.
Ippasswd Добавляет, изменяет или удаляет пароли дайджеста.

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

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Поставил себе debian etch от августа 2006. Все вроде работает, как и в sarge и даже лучше, но только не cups. Даже принтер нельзя настроить. Вот что выдает KDE Printing Tool:

E [15/Nov/2006:06:25:40 +0300] Unable to bind socket for address 127.0.0.1:631 - Cannot assign requested address.
E [19/Nov/2006:11:27:34 +0300] Unable to bind socket for address 127.0.0.1:631 - Cannot assign requested address.
E [19/Nov/2006:11:28:00 +0300] Unable to bind socket for address 127.0.0.1:631 - Cannot assign requested address.
E [19/Nov/2006:11:28:00 +0300] Unable to bind socket for address 127.0.0.1:631 - Cannot assign requested address.
I [19/Nov/2006:15:22:53 +0300] Loaded configuration file "/etc/cups/cupsd.conf"
N [19/Nov/2006:15:22:53 +0300] Group and SystemGroup cannot use the same groups!
I [19/Nov/2006:15:22:53 +0300] Resetting Group to "root".
W [19/Nov/2006:15:22:53 +0300] Repairing ownership of "/var/cache/cups"
W [19/Nov/2006:15:22:53 +0300] Repairing ownership of "/var/run/cups"
W [19/Nov/2006:15:22:53 +0300] Repairing ownership of "/etc/cups"
W [19/Nov/2006:15:22:53 +0300] Repairing ownership of "/etc/cups/ppd"
W [19/Nov/2006:15:22:53 +0300] Repairing ownership of "/etc/cups/ssl"
W [19/Nov/2006:15:22:53 +0300] Repairing ownership of "/etc/cups/printers.conf"
W [19/Nov/2006:15:22:53 +0300] Repairing ownership of "/var/spool/cups"
W [19/Nov/2006:15:22:53 +0300] Repairing ownership of "/var/spool/cups/tmp"
I [19/Nov/2006:15:22:53 +0300] Cleaning out old temporary files in "/var/spool/cups/tmp".
I [19/Nov/2006:15:22:53 +0300] Configured for up to 100 clients.
I [19/Nov/2006:15:22:53 +0300] Allowing up to 100 client connections per host.
I [19/Nov/2006:15:22:53 +0300] Using policy "default" as the default!
I [19/Nov/2006:15:22:53 +0300] Partial reload complete.
I [19/Nov/2006:15:22:53 +0300] Listening to 127.0.0.1:631 on fd 2.
I [19/Nov/2006:15:22:53 +0300] Listening to /var/run/cups/cups.sock on fd 3.
I [19/Nov/2006:15:24:15 +0300] Scheduler shutting down normally.
I [19/Nov/2006:15:24:15 +0300] Saving remote.cache.
I [19/Nov/2006:15:24:15 +0300] Saving job cache file "/var/cache/cups/job.cache".
I [19/Nov/2006:15:25:19 +0300] Loaded configuration file "/etc/cups/cupsd.conf"
N [19/Nov/2006:15:25:19 +0300] Group and SystemGroup cannot use the same groups!
I [19/Nov/2006:15:25:19 +0300] Resetting Group to "root".
W [19/Nov/2006:15:25:19 +0300] Repairing ownership of "/etc/cups"
W [19/Nov/2006:15:25:19 +0300] Repairing ownership of "/etc/cups/ppd"
W [19/Nov/2006:15:25:19 +0300] Repairing ownership of "/etc/cups/printers.conf"
I [19/Nov/2006:15:25:19 +0300] Cleaning out old temporary files in "/var/spool/cups/tmp".
I [19/Nov/2006:15:25:19 +0300] Configured for up to 100 clients.
I [19/Nov/2006:15:25:19 +0300] Allowing up to 100 client connections per host.
I [19/Nov/2006:15:25:19 +0300] Using policy "default" as the default!
I [19/Nov/2006:15:25:19 +0300] Full reload is required.
I [19/Nov/2006:15:25:19 +0300] Loaded MIME database from '/etc/cups': 34 types, 38 filters.
I [19/Nov/2006:15:25:19 +0300] Loading job cache file "/var/cache/cups/job.cache".
I [19/Nov/2006:15:25:19 +0300] Full reload complete.
I [19/Nov/2006:15:25:19 +0300] Listening to 127.0.0.1:631 on fd 2.
I [19/Nov/2006:15:25:19 +0300] Listening to /var/run/cups/cups.sock on fd 3.

А вот access_log:

Проверял - loopback интерфейс присутствует. Обновлял cupsys до текущего (1.2.5, кажется) - не помогает.

а через браузер на 127.0.0.1:631 зайти не пытался? а настроить cups через браузер?


ifconfig в студию - если там нет lo, то туда и копать.

А как можно узнать, кто занимает порт? Сканером портов (забыл, как эта прога называется)? Сомневаюсь, чтобы инициализационые скрипты 2 экземпляра cupsd запускали. Да и ps этого не подтверждает.

>ifconfig в студию - если там нет lo, то туда и копать.

Вот вывод ifconfig -a :

eth0 Link encap:Ethernet HWaddr 00:C0:DF:03:DA:D7
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:5 Base address:0xec00

lo Link encap:Local Loopback
LOOPBACK MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

ppp0 Link encap:Point-to-Point Protocol
inet addr:212.129.107.251 P-t-P:212.129.107.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:456 errors:3 dropped:0 overruns:0 frame:0
TX packets:458 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:249622 (243.7 KiB) TX bytes:47173 (46.0 KiB)

sit0 Link encap:IPv6-in-IPv4
NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

Вывод `netstat -ltnp | grep 631`:

tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3986/cupsd

ps -A | grep cups :

3986 ? 00:00:00 cupsd

Вроде ничего странного, но не работает.

А где inet addres?

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:18 errors:0 dropped:0 overruns:0 frame:0
TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:900 (900.0 b) TX bytes:900 (900.0 b)

для запуска в /etc/network/interfaces

auto lo
iface lo inet loopback

Удалось подключиться через localhost и принтер. Только вот KDE-шные проги упорно пишут те же ошибки, что и раньше (не найти список принтеров, убедитесь, что сервер cups запущен и правильно настроен). Да и в localhost:631 при попытке редактировать конфигурационный файл выдается No such file or directory.

Какой файл не находится?

Еще интересно, что в качестве сервера записан /var/run/cups/cups.sock с портом 631.

Я проверил: такого файла нет.


проверь, есть ли в /etc/cups/cupsd.conf строчка

Listen localhost:631 или Listen 127.0.0.1:631

И попробуй закомментировать Listen /var/run/cups/cups.sock

Переписал - не помогает. :(

В KDE Printing Tool установил сервер localhost - теперь ошибок при выводе принтеров нет. Правда, печать тоже не идет. Почему-то владелец всех заданий становится root, задание не выполняется и принтер останавливается (в системе, а реальный вообще не реагирует на задание).

Посмотрел права пользователей и обнаружил, что они не входят в группу lp - исправил, но это не изменило ситуацию. Вот вывод errors_log последней страницы:

d [25/Nov/2006:11:10:00 +0300] copy_attribute(0x80ac138, 0x80d4cc0[printer-op-policy-supported,4,42])

d [25/Nov/2006:11:10:00 +0300] cupsdReadClient: 11 Closing data file 10, size=20091.
I [25/Nov/2006:11:10:00 +0300] Installing config file "/etc/cups/cupsd.conf".
D [25/Nov/2006:11:10:00 +0300] cupsdSendError: 11 code=201 (Created)
D [25/Nov/2006:11:10:00 +0300] cupsdCloseClient: 7
d [25/Nov/2006:11:10:00 +0300] cupsdCloseClient: Removing fd 7 from InputSet and OutputSet.
D [25/Nov/2006:11:10:00 +0300] cupsdCloseClient: 8
d [25/Nov/2006:11:10:00 +0300] cupsdCloseClient: Removing fd 8 from InputSet and OutputSet.
D [25/Nov/2006:11:10:00 +0300] cupsdCloseClient: 11
d [25/Nov/2006:11:10:00 +0300] cupsdCloseClient: Removing fd 11 from InputSet and OutputSet.
d [25/Nov/2006:11:10:00 +0300] cupsdPauseListening: Clearing input bits.
d [25/Nov/2006:11:10:00 +0300] cupsdPauseListening: Removing fd 0 from InputSet.
d [25/Nov/2006:11:10:00 +0300] cupsdStopListening: closing all listen sockets.
d [25/Nov/2006:11:10:00 +0300] cupsdPauseListening: Clearing input bits.
d [25/Nov/2006:11:10:00 +0300] cupsdPauseListening: Removing fd 0 from InputSet.
d [25/Nov/2006:11:10:00 +0300] cupsdStopBrowsing: Removing fd 3 from InputSet.
I [25/Nov/2006:11:10:00 +0300] Saving remote.cache.
d [25/Nov/2006:11:10:00 +0300] cupsdStopServer: Removing fd 4 from InputSet.
I [25/Nov/2006:11:10:00 +0300] Loaded configuration file "/etc/cups/cupsd.conf"
N [25/Nov/2006:11:10:00 +0300] Group and SystemGroup cannot use the same groups!
I [25/Nov/2006:11:10:00 +0300] Resetting Group to "root".
I [25/Nov/2006:11:10:00 +0300] Cleaning out old temporary files in "/var/spool/cups/tmp".
I [25/Nov/2006:11:10:00 +0300] Configured for up to 100 clients.
I [25/Nov/2006:11:10:00 +0300] Allowing up to 100 client connections per host.
I [25/Nov/2006:11:10:00 +0300] Using policy "default" as the default!
I [25/Nov/2006:11:10:00 +0300] Partial reload complete.
I [25/Nov/2006:11:10:00 +0300] Listening to 127.0.0.1:631 on fd 2.
I [25/Nov/2006:11:10:39 +0300] Adding start banner page "none" to job 9.
I [25/Nov/2006:11:10:39 +0300] Adding end banner page "none" to job 9.
I [25/Nov/2006:11:10:39 +0300] Job 9 queued on "ML1520" by "root".
I [25/Nov/2006:11:10:39 +0300] Started filter /usr/lib/cups/filter/pstops (PID 5418) for job 9.
I [25/Nov/2006:11:10:39 +0300] Started filter /usr/lib/cups/filter/foomatic-rip (PID 5419) for job 9.
I [25/Nov/2006:11:10:39 +0300] Started backend /usr/lib/cups/backend/parallel (PID 5420) for job 9.
E [25/Nov/2006:11:10:39 +0300] PID 5420 (/usr/lib/cups/backend/parallel) stopped with status 1!
I [25/Nov/2006:11:10:39 +0300] Hint: Try setting the LogLevel to "debug" to find out more.
E [25/Nov/2006:11:10:39 +0300] [Job 9] Unable to open parallel port device file "/dev/lp0": Permission denied
E [25/Nov/2006:11:10:43 +0300] PID 5419 (/usr/lib/cups/filter/foomatic-rip) stopped with status 9!
I [25/Nov/2006:11:10:43 +0300] Hint: Try setting the LogLevel to "debug" to find out more.
I [25/Nov/2006:11:10:43 +0300] [Job 9] Backend returned status 1 (failed)
I [25/Nov/2006:11:10:43 +0300] Saving printers.conf.
I [25/Nov/2006:11:11:04 +0300] Job 9 was canceled by "root".

Пробовал сменить драйвер на ml1510 (работал в Debian Sarge за отсутствием родного ml1520) - не помогает.

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

Как система печати 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 в большинстве случаев генерируют на выходе файлы двух форматов:

Простой текст

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

PostScript

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

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

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

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

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

Для подключения принтеров существует несколько интерфейсов, таких как: 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 начинается с ряда глобальных параметров директив, которые оформлены в виде пар имя - значение. Для примера, чтобы изменить имя сервера, отправляемое другим системам, необходимо ввести директиву:

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

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

Параметры, начинающиеся на Browsing требуют отдельного разговора, они задают настройки "просмотра". В данном случае, под термином просмотр необходимо понимать возможность CUPS обнаруживать принтеры в сети. Данная возможность поддерживается на уровне протокола IPP. Обнаружение происходит посредством широковещательных рассылок, что при большом количестве серверов CUPS или при частом отключении/подключении принтеров может порождать дополнительную нагрузку на сеть. Так же, включение просмотра влечет за собой определенное бремя безопасности. Например, систему настроенную на автоматический поиск легко обмануть, предоставив поддельную информацию о принтерах, а при наличии недочетов в коде CUPS это может привести к негативным последствиям. Давайте разберем указанные параметры:

BrowseAllow и BrowseDeny

Указывают 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 идут параметры, сгруппированные в разделы . Такие директивы определяют доступ к определенным функциям сервера.

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

Долго о Веб-интерфейсе описывать не буду. Последняя версия CUPS 1.4 практически полностью русифицирована. Управление принтерами через веб-морду не сложнее процесса установки принтера в операционной системе Windows. Единственный нюанс в Linux - это то, что фактически, "принтер" есть очередь печати. То есть фактически мы посылаем документ в определенную очередь печати с определенными настройками. Очередь привязана к конкретному принтеру-устройству. Таким образом, к одному принтеру может быть привязано несколько очередей с разными настройками. Это как в Windows установить несколько "принтеров" с разными версиями драйвера, но привязанными к одному физическому устройству.

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

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

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

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

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

файл printcap является символьной ссылкой на /var/run/cups/printcap. Т.о. CUPS сама следит за корректностью данного файла и тем самым обеспечивает обратную совместимость с LPD.

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

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

  • Постарайтесь проверить работоспособность принтера на другой ОС. Естественно, если он не заработает в другой ОС, то проблема скорее всего в аппаратной части.
  • Проверьте все физические соединения. Питание, информационный провод. Проверьте включен ли принтер и имеется ли бумага в лотке, а так же нет ли сигнализации об ошибках на принтере.
  • Если принтер подключается по USB, LPT, COM, то посмотрите выводы команд lsusb, dmesg на наличие записей о принтере. Если принтер с Ethernet-интерфейсом, проверьте связь с ним командой ping.
  • Если все вышеперечисленные проверки завершились успехом - тщательно проверьте настройки CUPS.
  • Проверьте в Веб-интерфейсе, не остановлена ли очередь печати принтера.
  • Если в статусе принтера написано waiting for job copmlete, то что-то мешает 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. Права доступа определены, как 0710 (rwx--x---).

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

Итак. Предположительно, сервис печати CUPS — это мощное решение, позволяющее организовать централизованное управление принтерами в компании. Так оно и есть, но в процессе настройки потребуется провести некоторое время в поисках решения в Google множества мелких неочевидных проблем, особенно, если ваша необходимость выходит за рамки стандартных мануалов по настройке.

В статье будет описана установка принтсервера CUPS на Ubuntu Server в сети с работающим доменом Active Directory, хотя его наличие совершенно не обязательно и инструкции по настройке взаимодействию с ним можно будет смело пропустить, его настройка, а также настройка клиентских машин Linux и Windows для взаимодействия с данным принт-сервером.

Настройка принтсервера

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

Заходим на принтсервер любым удобным способом и обновим на нем пакеты:

Далее проверим, установлен ли CUPS на сервере:

Если вывод выглядит как то так:

то CUPS установлен, если вывода нет — устанавливаем CUPS:

Теперь настроим административный доступ к веб-интерфейсу CUPS. Все файлы конфигурации находятся по пути /etc/cups/. Для начала, на всякий случай сделаем резервные копии основных файлов конфигурации CUPS:

Впрочем, если вы этого не сделали — не беда, образцы данных файлов по умолчанию лежат по пути /usr/share/cups. Также нужно упомянуть, что вы можете проверить любые добавленные опции в файлы конфигурации CUPS с помощью команды:

Если вы что-то напутали, опечатались или использовали опцию, которая уже не поддерживается CUPS'ом, то вывод команды отразит данные ошибки.

Но приступим наконец к настройке. После любых изменений файлов в папке /etc/cups/ для получения эффекта необходимо перезапускать сервис CUPS:

А если вы отредактировали файл /etc/cups/cups-browsed.conf, то за него отвечает отдельный сервис cups-browsed, который тоже нужно перезапустить:

Первой незакомментированной опцией является

Она определяет минимальную информативность логов CUPS. Лог-файлы CUPS находятся по пути /var/log/cups/. На время установки, настройки и отладки принтсервера будет разумным перевести логгирование в debug-режим. Для этого изменим warn на debug2:

По умолчанию CUPS слушает входящие подключения только от localhost, то бишь на loopback интерфейсе. Чтобы убедится в этом, можете выполнить команду

Одна из строк будет выглядеть приблизительно так:

Либо же вы можете разрешить CUPS'у слушать подключения со всех адресов

Следующий момент настройки — это обнаружение сетевых и расшаренных принтеров.

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

Далее идут настройки аутентификации:

Определяет права доступа к веб-интерфейсу CUPS, а также к его административной части. Чтобы пользователь user имел право на администрирование CUPS, его нужно добавить в системную группу lpadmin:

Вообще, группы, которым позволен административный доступ к CUPS, определяются в файле конфигурации cups-files.conf в блоке

Если вы хотите добавить некой группе пользователей Linux права на администрирование принтсервера, например printadmins, то просто добавьте их через пробел к lpadmin. Если группа доменная, то это немного сложнее и будет описано позже.

Теперь перейдем к блоку <Location />:

Order allow,deny означает, что запрещены подключения отовсюду, если специально не указано разрешение. То есть нужно добавлять IP-адреса, подсети, хосты или хосты по маске (.example.com) в виде "Allow from [разрешенный адрес]*":

Для полной уверености и отладки, можно оставить, пока не настроите все остальное, такую констукцию, которая позволит печать отовсюду:

Приступим к настройке административного доступа к CUPS на принтсервере. Определитесь, с какого/каких IP и/или подсетей вы собираетесь подключаться к CUPS, и добавить их по аналогии с блоком <Location />:

Еще, по желанию, можно добавить язык интерфейса по умолчанию. Список доступных языков можно посмотреть с помощью команды:

Если нужная вам локализация, например ru, есть, то добавьте строчку в /etc/cups/cupsd.conf:

Самым простым способом это можно сделать так:

Если вы хотите, чтобы принтсервер примимал любые обращения, или не хотите заморачиваться, то можно добавить это:

Еще нужно взглянуть внутрь файла /etc/cups/cups-browsed.conf. Этот файл управляет тем, как принтсервер будет искать принтеры в сети и проводить широковещательную рассылку своих принтеров. Я предлагаю совершенно отключить опцию рассылки. Принтсервер будет искать принтера в сети, но с него принтеры на клиентские машины будут подключатся вручную. Ниже будет описано, почему. Пока же мы находим строку BrowseRemoteProtocols dnssd cups:

На этом настройку принтсервера приостанавливаем и переходим к настройке клиентких машин Windows и Linux. Требования к ним такие — позволять посылать на себя задания печати принтсерверу, и посылать задания на печать именно (и только) на принтсервер в случае необходимости печати на сетевой принтер.

Теперь выполним аналогичную операцию на клиентской машине Linux c именем хоста linux1. Вообще, данная часть будет куда объемнее, так как у клиентской машины есть свой сервис CUPS и его тоже нужно настроить во многом так же, как и принтсервер, за исключением его подчиненной роли в организации печати.

Исправление ошибки обращения к CUPS через loopback по имени хоста

В большинстве инструкций по введению Linux в домен одним из пунктов является приведение файла /etc/hosts приблизительно к такому виду:

Почему то CUPS не в силах ассоциировать обращение через 127.0.1.1, то есть через Loopback интерфейс, с именем хоста.

Исправляется эта ошибка двумя способами. Если в вашей сети IP адреса статичные, то в файле /etc/hosts исправьте 127.0.1.1 на IP адрес внешнего сетевого интерфейса клиентской машины, например:

Либо же, раз уж вы вводите Linux в домен, то это предполагает, что в вашей сети работает DHCP и DNS сервер Active Directory. В таком случае просто закомментируйте данную строчку:

Разницы в работоспособности или проблем от данного действия пока обнаружено не было.

Настройка адресов прослушивания подключений к CUPS у клиентских машин Linux

Заходим на linux1 любым удобным способом. Редактируем файл /etc/cups/cupsd.conf:

Находим, добавляем или изменяем в нем строки:

Настройка адресов прослушивания подключений к CUPS

В предыдущем блоке мы настроили возможность подключения к CUPS. Теперь перейдем к настройке разрешений на доступ к печати, а также к административным страницам сервиса CUPS на хосте linux1. Вновь открываем, если закрыли, файл /etc/cups/cupsd.conf и переходим к редактированию блоков <Location />, <Location /admin>, <Location /admin/conf>, <Location /admin/log>:

Настройка раздачи и получения широковещательной рассылки сетевых принтеров

Еще у клиетской машины Linux, в данном случае linux1, необходимо отредактировать файл /etc/cups/cups-browsed.conf:

Настройка административного доступа

Еще пару слов по поводу административного доступа, как на WEB-интерфейс CUPS на принтсервере, так и на любой клиентской машине Linux. Даже при условии наличия 30-50 компьютеров нужно унифицировать авторизацию на CUPS, а не держать в голове или еще где пароли каждой машины. И это важно на всех Linux машинах, ведь чтобы добавить принтер на сервер, его сперва нужно установить локально. Я вижу несколько путей.

Первый — на каждой системе Linux создать пользователя printeradmin (например) и добавить в группу lpadmin:

Второй вариант практически идентичен и предлагает создать группу в системе, например, printersadmins, добавить туда требуемого администратора CUPS (printeradmin, user):

Затем нужно найти в файле /etc/cups/cups-files.conf строку

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

И наконец, третий вариант. Сделать администраторами принтсервера и CUPS'ов клиентских машин доменную группу пользователей. Для этого принтсервер и клиентские машины Linux должны быть присоединены к домену AD. Есть несколько методов подключения Linux к домену Windows, но, насколько я знаю, основные это подключение с помощью winbind и с помощью SSSD(realmd). Описание данных методов не входит в статью, поэтому остановлюсь только на моментах которые касаются конкретно CUPS'а.

Настройка использования доменных групп пользователей для администрирования CUPS

Каждый метод присоединения к системе централизованной авторизации в Linux создает специальный файл-"трубу" (pipe), сквозь который приложения могут посмотреть список пользователей домена. Чтобы так мог сделать CUPS, нужно разрешить ему использовать pipe в AppArmor'е для аутентификации пользователей. AppArmor — модуль безопасности Linux по управлению доступом. Ограничивает определенные программы набором перечисленных в его политиках файлов. Чтобы добавить CUPS'у право использовать пользователей и группы домена через winbindd, нужно добавить в файл /etc/apparmod.d/local/usr.sbin.cupsd такую строку:

Если Linux введен в домен через SSSD, то необходимо указать расположение его pipe в /etc/apparmod.d/local/usr.sbin.cupsd, добавив туда строку:

К тому же, в случае с SSSD это позволяет пройти аутентификацию (узнать кто заходит), но чтобы пройти авторизацию (узнать есть ли право у пользователя управлять CUPS) необходимо также добавить в файл конфигурации SSSD /etc/sssd/sssd.conf строку:

Это, условно выражаюсь, дает CUPS'у право "заглядывать" в SSSD.

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

Добавим CUPS'у указание грузиться после SSSD. Отредактируем файл сервиса cups.service по пути /lib/systemd/system/, добавив инструкцию After в секцию [Unit]:

Таким образом CUPS настроен на Basic авторизацию через домен, то есть авторизацию с помощью ввода логина и пароля доменного пользователя с правом администрирования CUPS.

Авторизация может быть настроена и иначе, но принцип (pipe-файл) в целом универсален и есть шанс настроить и для LDAP, FreeIPA и прочих служб каталогов по аналогии.

Установка принтера в Linux

Теперь, когда сервер и клиенские машины Linux настроены, к некоторым из них присоединены принтеры, а также есть машины на Windows, которым и с которых нужно печатать, и вся эта система должна быть стабильной и в случае, если на одном из ПК необходимо заменить принтер, то это не должно повлечь за собой перенастройку доброй половины всех ПК, если не всех. К тому же нужно как можно меньше проблем с драйверами. И это вполне возможно.

Группы принтеров (Classes)

Выше мы описывали подключение Canon-MF4400 c хоста windows1 через протокол LPD. Принтер все еще подключен и его статус можно посмотреть на странице http://cupsserver:631/printers/Canon-MF4400 . А теперь обратим пристальное внимание на главную страницу администрирования cupsserver http://cupsserver:631/admin . На этой странице есть кнопка "Добавить группу" [Add Class]. Нажмем на нее. В ней вы увидите поля "Название", "Описание", "Расположение", аналогичные таким же при настройке обычного принтера. В нижнем же блоке вы увидите список всех подключенных к принтсерверу принтеров. Выберите Canon-MF4400 или любой который хотите, затем в поле "Название" впишите, например printer-windows1, "Описание" и "Расположение" на ваше усмотрение, и нажмите "Добавить группу".

Главная прелесть данного метода в том, что если на любом из ПК заменяется принтер, заменяется сам компьютер, или то и другое сразу, то это никак не влияет на тех, кто был к ним подключен через группу на принтсервере. Единственная настройка производится на принтсервере — к принтсерверу подключается новый принтер, затем из группы, в которой состоял старый принтер, он удаляется, и добавляется новый принтер на замену старому. И никаких дополнительных настроек на любом количестве ПК, только на принтсервере и собственно ПК на котором меняли принтер. Драйвера "IPP Everywhere" и "MS Publisher Imagesetter" содержат большое количество настроек бумаги, печати и т.д., так что нет проблем настроить нужный вид печати через них.

Заключение

Тема слишком обширна, чтобы изложить сколько-нибудь подробно, и даже так статья вышла крайне объемной. Любые уточнения, указания на ошибки, нераскрытые вопросы и советы, данные в комментариях к данной статье, будут приняты во внимание и в случае необходимости включены в статью.

Читайте также: