CUPS/Printer sharing (Русский)

From ArchWiki
Jump to: navigation, search
Состояние перевода: На этой странице представлен перевод статьи CUPS/Printer sharing. Дата последней синхронизации: 3 мая 2018. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Эта статья содержит инструкции по совместному использованию принтеров между системами, будь то между двумя системами GNU/Linux или между системой GNU/Linux и Microsoft Windows.

Внутри систем GNU/Linux

Сервер можно настраивать с помощью веб-интерфейса или путем ручного редактирования файла /etc/cups/cupsd.conf. Смотрите раздел CUPS (Русский)#Сеть для настройки клиента.

Использование веб-интерфейса

Для доступа к странице администрирования CUPS, откройте в браузере адрес: http://localhost:631.

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

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

Для более детальной настройки вы можете отредактировать файл /etc/cups/cupsd.conf, нажав кнопку "Редактировать конфигурационный файл". Для получения дополнительной информации смотрите #Ручная настройка.

Ручная настройка

На сервере (тот, который управляет и подсоединён к принтеру) разрешите доступ к серверу, изменив строчки с тэгом Location. Например:

/etc/cups/cupsd.conf
<Location />
    Order allow,deny
    Allow localhost
    Allow 192.168.0.*
</Location>
...

Также убедитесь, что серверу для адресации доступен IP-адрес клиента:

/etc/cups/cupsd.conf
...
Listen <hostname>:631
...

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

После внесения каких-либо изменений перезапустите службу org.cups.cupsd.

Если CUPS запускается с помощью активации сокета, создайте drop-in snippet для org.cups.cupsd.socket, чтобы активация сокета работала и с удаленными подключениями:

/etc/systemd/system/org.cups.cupsd.socket.d/override.conf
[Socket]
ListenStream=631

Включение обнаружения

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

Чтобы включить отображение, выберите Показывать общие принтеры, подключенные к этой системе в веб-интерфейсе, или вручную включите Browsing и введите BrowseAddress:

/etc/cups/cupsd.conf
...
Browsing On
BrowseAddress 192.168.0.*:631
...

затем перезапустите службу org.cups.cupsd.

Обратите внимание, что "обнаружение" на сервере - другая вещь по сравнению с "обнаружением" на удаленном сетевом хосте. На сервере печати cupsd предоставляет поддержку протокола DNS-SD, который транслируется avahi-daemon. Служба cups-browsed не нужна на сервере печати за исключением, если будет транслироваться старый протокол CUPS'а, или если сервер печати также будет "обнаруживать" другие сетевые принтеры. На удаленном сетевом хосте служба cups-browsed требуется для "обнаружения" сетевой трансляции служб печати, а также запущенная служба cups-browsed будет автоматически запускать cupsd.

Служба org.cups.cupsd.service запускается автоматически при подключении USB-принтера, но это может быть не так для других типов подключений. Если cupsd не запущен, тогда avahi-daemon не транслирует службу печати, поэтому в этом случае service-файл юнита systemd должен быть изменен при запуске во время загрузки, а затем служба снова должна быть "включена/установлена" с новой зависимостью. Чтобы сделать это, отредактируйте раздел файла службы [Install], добавив зависимость WantedBy=default.target, а затем включите и запустите службу org.cups.cupsd.service.

Между GNU/Linux и Windows

сервер Linux - клиент Windows

Общий доступ с помощью IPP

В качестве предпочтительного метода, при подключении клиента Windows к серверу печати Linux, используется IPP, поскольку настройка у него проще, чем у Samba. Это стандартный, основанный на HTTP, протокол принтера, который позволяет использовать преимущества переадресации портов, туннелирования и т.д. ОС Windows имеет встроенную поддержку IPP только начиная с Windows 2000.

Примечание: Возможно, вам придется добавить Internet Printing Client в Windows (Панель управления > Программы > Включение или отключение компонентов Windows > Службы печати и документов)

Сначала, настройте сервер как описано в разделе #Внутри систем GNU/Linux.

На компьютере с Windows, перейдите в Панель управления > Просмотр устройств и принтеров и выберите в контекстном меню 'Добавить принтер'. Если у вас Windows 10, нажмите кнопку "Принтер, который я хочу, не указан". Далее, выберите 'Выбрать общий принтер по имени' и тип расположения принтера:

http://hostname:631/printers/printer_name

(Где hostname - это имя хоста или IP-адрес сервера GNU/Linux, а printer_name - это имя подключенного принтера. Вы также можете использовать полное доменное имя сервера, если оно есть, но вам может потребоваться установить ServerAlias my_fully_qualified_domain_name в /etc/cups/cupsd.conf, чтобы это заработало).

Примечание:
  • Диалоговое окно 'Добавить принтер' в Windows предлагает формат http://computername/printers/printername/.printer, который Windows не примет. Вместо этого используйте синтаксис, предложенный выше.
  • Если вы используете прокси, тщательно проверяйте все использованные прокси исключения. Неправильная настройка здесь может привести к невозможности добавления принтера до следующей перезагрузки, даже если вы отключите прокси-сервер после этого (по крайней мере, в Windows 7).

После этого на компьютере с Windows установите родные драйвера принтера. Если на сервере CUPS используются собственные драйвера на принтер вместо raw очереди, то для клиента Windows можно выбрать драйвер принтера generic postscript (например 'HP Color LaserJet 8500 PS' или 'Xerox DocuTech 135 PS2').

Общий доступ с помощью Samba

Если версия ОС Windows ниже Windows 2000, или при использовании IPP возникают проблемы, можно настроить общий доступ с помощью Samba. Учитывайте, что при использовании Samba будет задействовано дополнительное программное обеспечение. Поэтому данный способ сложнее в настройке, также могут возникнуть дополнительные проблемы, связанные, в основном, с аутентификацией.

Для настройки Samba на сервере Linux, отредактируйте файл /etc/samba/smb.conf, это даст возможность предоставить общий доступ к принтерам. Файл smb.conf может содержать примерно следующее:

/etc/samba/smb.conf
[global]
workgroup=Heroes
server string=Arch Linux Print Server
security=user

[printers]
    comment=All Printers
    path=/var/spool/samba
    browseable=yes
    # разрешите это, чтобы пользователь 'гостевой учетной записи' мог пользоваться печатью.
    guest ok=no
    writable=no
    printable=yes
    create mode=0700
    write list=@adm root ваше_имя_пользователя

Этого должно быть достаточно для организации совместного доступа, но все-таки рекомендуется добавить для принтера отдельную запись:

/etc/samba/smb.conf
[ML1250]
    comment=Samsung ML-1250 Laser Printer
    printer=ml1250
    path=/var/spool/samba
    printing=cups
    printable=yes
    printer admin=@admin root ваше_имя_пользователя
    user client driver=yes
    # разрешите это, чтобы пользователь 'гостевой учетной записи' мог пользоваться печатью.
    guest ok=no
    writable=no
    write list=@adm root ваше_имя_пользователя
    valid users=@adm root ваше_имя_пользователя

Учтите, что при таких настройках, должна существовать учетная запись с правами доступа к принтеру. Для публичного принтера установите guest ok в yes, и удалите строку valid users. Для добавления учетных записей, создайте действующую учетную запись GNU/Linux, а затем установите на Samba-сервере пароль. Например:

# useradd ваше_имя_пользователя
# smbpasswd -a ваше_имя_пользователя


Затем перезапустите демон Samba:

Естественно, имеется множество дополнительных настроек сервера печати Samba, поэтому, для получения дополнительной информации, следует обратиться к справочной документации Samba и CUPS. Образцы и примеры можно посмотреть в файле smb.conf.example.

сервер Windows - клиент Linux

Важно: Любые особые символы в URI принтера должны быть соответствующим образом процитированы, или, если в имени вашего принтера Windows или в пароле есть пробелы, тогда CUPS выдаст ошибку "lpadmin: Bad device-uri".

Например: smb://BEN-DESKTOP/HP Color LaserJet CP1510 series PCL6

станет:

smb://BEN-DESKTOP/HP%20Color%20LaserJet%20CP1510%20series%20PCL6

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

$ python -c 'from urllib.parse import quote; print("smb://" + quote("BEN-DESKTOP/HP Color LaserJet CP1510 series PCL6"))'

Общий доступ с помощью LPD

В Windows 7, 8 и 10 имеется интегрированный LPD-сервер, то, возможно, будет намного проще использовать именно его, поскольку не придется для клиента устанавливать Samba, а на сервере - можно будет обойтись без сложных настроек. Это можно включить в разделе Службы печати и документов, находящего в Панель управления -> Программы -> Включение или отключение компонентов Windows. В свойствах принтера должен быть включен общий доступ. Используйте общее имя без особых символов, таких как пробел, запятые и др.

Затем, принтер можно будет добавить в CUPS просто выбрав протокол LPD. Адресс принтера будет выглядеть следующим образом:

# lpd://windowspc/имя_общего_принтера

Перед добавлением вам, скорее всего, понадобиться установить для своей модели принтера соответствующий драйвер. Драйвера Generic PostScript или RAW тоже должны работать.

Общий доступ с помощью IPP

Как и в предыдущем случае, для организации общего доступа к принтерам протокол IPP является предпочтительным, но он работает только с версиями Windows Server. Версия Windows Server (например Server 2016) включаюет поддержку IPP (функции "Службы печати и документов", служба "Интернет-печати"). Клиентские версии (например, Windows 10) включают поддержку только клиента IPP и не поддерживают совместный доступ через IPP.

Общий доступ с помощью Samba

Гораздо проще использовать стандартные возможности Windows по предоставлению общего доступа к принтерам с помощью Samba. Ручная настройка практически не требуется и все можно выполнить через бэкенд CUPS. Однако, как было замечено выше, в Windows могут возникнуть проблемы с аутентификацией и ограничением доступа.

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

В следующем разделе будут описаны настройки клиента с обоими (cupsd и smbd) запущенными демонами.

Настройка через веб-интерфейс

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

# ln -s $(which smbspool) /usr/lib/cups/backend/smb

Затем, просто зайдите в веб-интерфейс CUPS и добавьте новый принтер. В качестве устройства выберите "Windows Printer via SAMBA".

Для местоположения устройства, выберите:

smb://имя_пользователя:пароль@имя_хоста/имя_принтера

Или, если пароля нет:

smb://имя_пользователя@имя_хоста/имя_принтера

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

smb://имя_пользователя:пароль@домен/имя_хоста/имя_принтера
Ручная настройка

При ручной настройке: остановите демон CUPS и добавьте свой принтер в /etc/cups/printers.conf, который, к примеру, может выглядеть так:

/etc/cups/printers.conf
<DefaultPrinter MyPrinter>
AuthInfoRequired username,password
Info My printer via SAMBA
Location In my Office
MakeModel Samsung ML-1250 - CUPS+Gutenprint v5.2.7        # <= для получения списка доступных моделей запустить 'lpinfo -m'
DeviceURI smb://username:password@hostname/printer_name   # <= URI сервера, выбирать согласно описания в предыдущем разделе
State Idle
Type 4
Accepting Yes
Shared No
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
AllowUser yourusername                                    # <= не забудьте изменить это
OpPolicy default
ErrorPolicy stop-printer
</Printer>

Перезапустите демон CUPS и распечатайте тестовую страницу.

Поиск URI для серверов печати Windows

Иногда имя хоста Windows (усеченно) меньше предстоящего точного URI устройства (расположение устройства) (Sometimes Windows is a little less than forthcoming about exact device URIs (device locations)). Если возникли проблемы с указанием правильного расположения устройства в CUPS, выполните следующую команду, чтобы вывести список всех общих ресурсов, доступных для определенного имени пользователя windows:

$ smbtree -U имя_пользователя_windows

В этом списке будет отображаться только общие URI для определенного имени пользователя Windows в локальной подсети локальной сети, если Samba настроен и работает правильно. Команда должна вернуть что-то вроде этого:

 WORKGROUP
	\\REGULATOR-PC   		
		\\REGULATOR-PC\Z              	
		\\REGULATOR-PC\Public         	
		\\REGULATOR-PC\print$         	Printer Drivers
		\\REGULATOR-PC\G              	
		\\REGULATOR-PC\EPSON Stylus CX8400 Series	EPSON Stylus CX8400 Series

Здесь требуется первая часть последней строки - ресурс, соответствующий описанию принтера. Поэтому для печати на принтер EPSON Stylus введите:

smb://username.password@REGULATOR-PC/EPSON Stylus CX8400 Series

как URI в CUPS.

Удаленное управление

Однажды сервер настроенный, как описано в #Внутри систем GNU/Linux, может также быть настроенным так, чтобы им можно было управлять удаленно. Добавьте разрешенные хосты в блок <Location /admin> в /etc/cups/cupsd.conf, используя тот же синтаксис, что и в #Ручная настройка. Обратите внимание, что доступны три уровня доступа:

<Location />           #доступ к серверу
<Location /admin>	#доступ к страницам администратора
<Location /admin/conf>	#доступ к файлам конфигурации

Чтобы дать удаленным хостам доступ к одному из этих уровней, добавьте оператор Allow в этот уровень. Оператор Allow может принимать одну или несколько форм, перечисленных ниже:

Allow from all
Allow from host.domain.com
Allow from *.domain.com
Allow from ip-address
Allow from ip-address/netmask
Allow from @LOCAL

Отрицательный оператор также может быть использован. Например, чтобы предоставить полный доступ ко всем хостам на локальных сетевых интерфейсах, отредактируйте /etc/cups/cupsd.conf:

# Ограничить доступ к серверу...
# По умолчанию возможны только локальные подключения
<Location />
   Order allow,deny
   Allow from @LOCAL
</Location>

# Ограничить доступ к страницам администратора...
<Location /admin>
   Order allow,deny
   Allow from @LOCAL
</Location>

# Ограничить доступ к файлам конфигурации...
<Location /admin/conf>
   AuthType Basic
   Require user @SYSTEM
   Order allow,deny
   Allow from @LOCAL
</Location>

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: CUPS автоматически создает сертификат, поэтому это не должно быть проблемой. (Discuss in Talk:CUPS/Printer sharing (Русский)#)

Вам также может потребоваться добавить:

DefaultEncryption Never

Это должно помочь избежать ошибки: 426 - Upgrade Required when using the CUPS web interface from a remote machine.

Kerberos

Kerberos может использоваться для аутентификации пользователей, обращающихся к удаленному серверу CUPS. Это предполагает, что на вашем компьютере есть keytab, и ему понадобится билет для "HTTP". Вместо этого http://localhost:631 вы должны использовать https://host.example.co.uk:631 т.к. требуется шифрование для auth (следовательно, https), и требуется полное имя хоста, чтобы Kerberos/Negotiate могли работать. Кроме того, сервер должен быть настроен в /etc/cups/cupsd.conf, чтобы использовать DefaultAuthType Negotiate.

Если вы используете поддержку NSS в Samba winbind, вы можете добавить имя группы AD в /etc/cups/cups-files.conf - в следующем примере sysadmin может быть группой AD:

SystemGroup sys root sysadmin

Решение проблем

Общие советы по устранению неполадок смотрите в CUPS/Решение проблем.

Не удается отправить на печать из приложений GTK

Если ты получил сообщение getting printer information failed (ошибка получения информации о принтере), когда пытался отправить на печать из приложения GTK, тогда добавь эту строку в свой /etc/hosts:

 # serverip 	some.name.org 	ServersHostname

Ошибки разрешений в Windows

Некоторые пользователи исправили ошибки 'NT_STATUS_ACCESS_DENIED' (Windows клиенты), используя несколько иной синтаксис:

smb://рабочая_группа/имя_пользователя:пароль@имя_хоста/имя_принтера

Другие операционные системы

Более подробную информацию о взаимодействии CUPS с другими системами печати можно найти в руководстве CUPS, например, на http://localhost:631/help/network.html