Jump to content
From ArchWiki
< CUPS (Русский)
Состояние перевода: На этой странице представлен перевод статьи CUPS/Printer sharing. Дата последней синхронизации: 13 июля 2018. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- Samba (Русский)
- CUPS (Русский)

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

## Создание класса для нескольких принтеров

'Класс' в CUPS имеет значение группы. Когда у вас есть несколько принтеров, подключенных к одному серверу CUPS, вы можете захотеть их сбалансировать (задания на печать автоматически помещаются в очередь для разных принтеров). Это также дает преимущество в том, что пользователи на удаленной машине работают с одним 'принтером'. Что особенно полезно, когда один принтер вышел из строя, вы просто исключаете его из класса, но для конечных пользователей ничего не изменится - печать заданий, поставленных на другой принтер сервером CUPS, продолжает обрабатываться. Создание и управление классами можно выполнять из веб-интерфейса CUPS.

## Внутри систем 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 сниппет для `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

Общий доступ для клиентов Windows может быть достигнут, используя #Общий доступ с помощью Bonjour, #Общий доступ с помощью IPP или #Общий доступ с помощью Samba.

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

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

Службы печати Bonjour позволяет клиентам Windows легко подключаться к серверам печати Unix с включенным обнаружением.

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

Internet Printing Protocol является широко поддерживаемым стандартом среди операционных систем, который также прост в настройке. Он имеет функцию переадресации портов, туннелирования и т.д.

Примечание: Возможно, вам придется добавить 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).

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

Samba - реализация протокола обмена файлами Windows и принтерами, даже самых старых.

Обратите внимание, что общий доступ с помощью 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://имя_пользователя:пароль@REGULATOR-PC/EPSON%20Stylus%20CX8400%20Series

как 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>

The factual accuracy of this article or section is disputed.

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

Category:

- Printers (Русский)

Hidden category:

- Pages or sections flagged with Template:Accuracy