Как перезапустить cups на linux

Обновлено: 30.06.2024

Итак. Предположительно, сервис печати 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" содержат большое количество настроек бумаги, печати и т.д., так что нет проблем настроить нужный вид печати через них.

Заключение

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

Первичный (основной) механизм для печати и сервисов печати в Ubuntu - это Общая система печати UNIX (Common UNIX Printing System - CUPS). Данная система печати - это свободный, доступный и переносимый слой, который стал новым стандартом печати для большинства дистрибутивов Linux.

CUPS управляет заданиями печати и обеспечивает сетевую печать с использованием стандарта IPP (интернет протокол печати), поддерживая огромный список принтеров от матричных до лазерных и любых других. CUPS также поддерживает PostScript описание принтеров (PPD) и автоопределение сетевых принтеров, а также простую настройку и администрирование через web интерфейс.

Установка

Для установки CUPS на ваш Ubuntu компьютер просто используйте sudo для выполнения команды apt-get, передав ей названия пакетов в качестве параметра. Полная установка CUPS содержит много зависимостей, но они все могут быть определены в одной команде. Введите следующее в терминале для установки CUPS:

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

При необходимости решения проблем, вы можете получить доступ к ошибкам сервера CUPS через файл журнала /var/log/cups/error_log. Если журнал ошибок не дает достаточно информации для решения какой-либо проблемы, уровень журналирования CUPS можно повысить изменением директивы LogLevel в файле настроек (описывается ниже) до debug или даже debug2 со стандартного info, что будет сохранять в журнал абсолютно все. Если вы проведете такое изменение, не забудьте вернуть все обратно после решения проблемы, чтобы избежать излишнего разрастания файла журнала.

Настройка

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

Скопируйте и защитите от записи файл /etc/cups/cupsd.conf.original с помощью следующих команд в терминале:

2. Listen: В Ubuntu по умолчанию установленный CUPS сервер слушает только интерфейс обратной петли по адресу 127.0.0.1. Чтобы заставить CUPS сервер прослушивать актуальный IP адрес сетевого адаптера, вы должны указать сетевое имя или пару IP адрес/порт добавочной директивой Listen. Например, если ваш сервер находится в локальной сети с IP адресом 192.168.10.250 и вы хотите сделать его доступным для других систем в этой подсети, отредактируйте /etc/cups/cupsd.conf, добавив директиву Listen, как показано ниже:

В приведенном примере вы можете закомментировать или удалить ссылки на адрес обратной петли (127.0.0.1), если вы не хотите, чтобы cupsd прослушивал этот интерфейс, а только Ethernet интерфейсы локальной сети. Чтобы разрешить прослушивать все сетевые интерфейсы, назначенные определенному сетевому имении, включая обратную петлю, вы можете создать такую запись Listen для имени (например) socrates:

или опустить директиву Listen и использовать вместо нее Port:

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

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

Web интерфейс

Чтобы выполнить административную задачу через web интерфейс, вы должны либо разрешить учетную запись root на своем сервере, либо авторизоваться как пользователь из группы lpadmin. По соображениям безопасности CUPS не авторизует пользователей с пустыми паролями.

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

Дальнейшая документация доступна через закладку Documentation/Help web интерфейса.

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

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

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

Главный лозунг струйных принтеров « дёшево и в цвете ». Так как в этой индустрии не появилось явного лидера, то процветает множество стандартов и существует вероятность иметь очень экзотический с точки зрения 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-броузер

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

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

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

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

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

Location, Order, Allow, Deny

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

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

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

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

Существенными параметрами являются 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 .

Сформируем 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 . Выделим подходящее описание:

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

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

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

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

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

Итак. Предположительно, сервис печати 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" содержат большое количество настроек бумаги, печати и т.д., так что нет проблем настроить нужный вид печати через них.

Заключение

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

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