Как расшарить принтер через самба

Обновлено: 18.05.2024

Самый распространенный способ расшарить принтер по сети в Ubuntu Linux заключается в использовании Samba. Например в Ubuntu 12.04, при установке локального принтера он автоматически делается общим сетевым принтером через Samba (конечно если перед этим была установлена служба Samba).

Примечание. Samba это linux-сервер который воссоздает сетевую среду Windows, позволяя разделять сетевые ресурсы с компьютерами под управлением Windows. При этом компьютеры Windows "видят" компьютеры Linux так будто это тоже компьютеры Windows. Samba позволяет разделять по сети файлы и принтеры.

В общем Samba работает вполне нормально. Выполняя функции разделения сетевых ресурсов не только между компьютерами Linux - Windows, но и Linux - Linux. Однако бывают ситуации, когда нужно использовать другие варианты. Например расшарить принтер через Интернет или если у вас так называемый "Windows-принтер" который не удается расшарить через Samba.

Примечание. Любой принтер работает под управлением своей микропрограммы - прошивки. В нормальных принтерах прошивка записана в самом принтере. Но есть такие принтеры, их довольно много, в который прошивка динамически загружается в принтер драйвером этого принтера. Обычно такие принтеры нормально работают только под Windows. А под другими операционными системами с ними возникают те или иные проблемы. Например HP LaserJet M1132 или HP LaserJet P1102 в Linux локально подключаются и работают, но по сети через Samba их заставить работать очень сложно.

В этой статье будет описано как настроить сетевой принтер в Ubuntu 12.04. Есть несколько протоколов сетевой печати, один из них IPP (Internet Printing Protocol). Этот протокол дает возможность печати через сетевые протоколы TCP/IP. Хотя он называется "Печатный протокол Интернет", доступ к принтеру через него возможен и через локальную сеть, поскольку в ней используется те же протоколы TCP/IP. С технической точки зрения нет разницы между Интернет и локальной сетью.

Общий доступ к принтеру в Ubuntu Linux (через IPP)

Шаг первый

Естественно, первое что нужно сделать это установить и настроить локальный принтер на том компьютере к которому он подключен. Обычно, в Ubuntu, это делается автоматически, через некоторое время после того, как вы воткнули принтер в USB разъем и включили его. После подключения локального принтера нужно проверить его работу. И уже после этого расшаривать принтер по сети.

Шаг второй

В Linux печатью управляет служба CUPS. В Ubuntu, доступ к настройкам службы CUPS возможен через любой браузер - нужно открыть адрес "localhost:631" и в панели, на вкладке "Администрирование" включить опции "Разрешить совместный доступ ..", "Разрешить печать из Интернета":


Это нужно сделать на том компьютере к которому принтер подключен локально! Это будет компьютер-сервер.

Шаг третий

Нужно узнать IP адрес компьютера-сервера. Сделать это можно например через консоль, командой "ifconfig -a".

Шаг четвертый

Подключение принтера по сети, на компьютере-клиенте. Выполняется через стандартный GUI интерфейс, для GNOME это апплет "Печать" (Printing). Нажимаете кнопку добавить принтер, затем в диалоговом окне выбираете "Найти сетевой принтер", вводите IP адрес компьютера-сервера и нажимаете кнопку "Найти":



После установки сетевого принтера нужно проверить его работу.

IPP через локальную сеть

Общий (сетевой) доступ к принтеру через IPP имеет плюсы в сравнении с доступом через Samba:

  • Печать через IPP выполняется быстрее чем через Samba.
  • Некоторые "Windows-принтеры" очень сложно или даже невозможно заставить работать через Samba.

При использовании IPP через локальную сеть нужно обеспечить чтобы компьютер-сервер имел постоянный IP адрес. Если сетевые настройки раздаются через DHCP сервер (очень распространенный вариант роутер с DHCP сервером), тогда в настройках DHCP сервера нужно указать постоянный IP адрес для компьютера-сервера (через MAC адрес).

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

Как расшарить принтер через Интернет

Для того, чтобы этот принтер был доступен через Интернет, необходимо чтобы компьютер-сервер имел "прямой" IP адрес. То есть должен быть подключен к Интернет не через шлюз. Проверить это просто:

Если адреса одинаковые, значит адрес "прямой". Если адреса разные значит вы подключены через шлюз (роутер). Если вы подключены к Интернет через собственный роутер, тогда IP адрес нужно смотреть не на компьютере, а на этом роутере. Если вы подключены к Интернет через роутер и ваш роутер имеет "прямой" IP адрес, тогда в настройках роутера нужно сделать "проброс порта" (port forwarding) для TCP порта 631.

Если IP адрес вашего компьютера или роутера не "прямой", тогда печатать через Интернет не получится.

Иван Сухов, 2013 г.

В этом блоге публикуются заметки и решения, найденные в процессе работы, освоения и жизни в дистрибутиве Debian GNU/Linux.

Сетевая печать из Linux на Windows принтер используя SAMBA

Задача: есть принтер, подключённый к машине Windows по локальной сети, и есть компьютер с Linux и установленной там системой печати CUPS. Нужна печатать с Linux-машины на Windows-машину.
Решение: с помощью веб-формы CUPS добавляем принтер в Linux и указываем логин guest для печати на Windows машину.

При использовании SMB протокола пишет:
Connection failed with error NT_STATUS_ACCESS_DENIED

Если пытаюсь печатать через IPP, получаю:
Unable to connect to SAMBA host, will retry in 60 seconds. foomatic-rip version $Revision$ running.

Пароля на принтеры нет.

Решение проблемы просто до смешного. Добавляем в веб-форме CUPS принтер, как сказано здесь, выбираем способ подключения Windows printer via Samba. Далее в строке адреса пишем:

И всё! Печать пошла!

И почему в гигантской, хотя и бестолковой, документации CUPS это не выделено ярким шрифтом?

В приложениях KDE нужно выставить адрес службы печати на локальный: 127.0.0.1:631.

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

smb://usrername:userpassword@domainname/computername/printername

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

Ссылки:
Решение было найдено, страшно сказать, на ЛОРе. Что поражает, так это то, что такую простую вещь никто нигде не освещает. Надеюсь, это поможет кому-то ещё.

32 комментариев: |высказаться!| RSS-лента дискуссии.|

По линку, на ЛОР'е: "так NATASHA или NATAHSA?" Просто рыдал.

2 Анонимный пишет.
По линку, на ЛОР'е: "так NATASHA или NATAHSA?" Просто рыдал.
Да, было такое :-) Но совет дали дельный, так что нормально. Господи, неужели это нельзя было добавить в документацию крупными буквами?!

Хм, вообще-то guest на виндовые шары — это же очевидно ;) И не в доке на CUPS про это искать надо. а доке на SAMBA. У всех виндовсов даже юзер есть специальный в системе Guest. Особенно прикольно бывает если его замочить, в припадке паранойи.
Хотя конечно отметить это можно было бы, в каком-нить FAQ.

virens: Господи, неужели это нельзя было добавить в документацию крупными буквами?!
Заговор наверное. Гугл потеряет часть доходов, если все подобные штуки записать в документацию :]
За пост спасибо, запомню.

У всех виндовсов даже юзер есть специальный в системе Guest.
А про юзера nobody виндузятники знают?! Сильно сомневаюсь.

Пользователь должен настраивать принтер, согласно приведённой КРАТКОЙ мать её за ногу документации: куда что ткунть, чтобы печать пошла. Вот за что я ненавижу команду документации в CUPS - она написана разработчиками для разработчиков же.

x[82] пишет.
Заговор наверное. Гугл потеряет часть доходов, если все подобные штуки записать в документацию :]
А зачем ещё писать документацию!? Для самолюбования? Чтобы всем сразу стало ясно, какие они в CUPS невероятно умные, что не пишут про такие простые вещи?

Документация должна быть вмеяемой, а не такой, чтобы после неё гуглить. Кстати, вот попробуйте погуглить на тему настройки принтеров в CUPS - просто попробуйте. Будете читать морально устаревший бред про LPD бородатых годов.

Тут у меня в других комментах развернулось препирательство с одним анонимусом насчёт jigdo. Сказал там и повторюсь здесь: в Линукс катастрофически не хватает нормальной пользовательской документации - без хаканья ядер, ковырянии в исходниках и километровых, но сильно водянистых теоретических экзерсисах а-ля-капс. Так что друзья: кто умеет в руках держать перо, не поленитесь выкладывать на блогах свои HOWTO на тему "как легко и просто настроить то-то".

а вот у меня не вышло, не печатает и все тут

Это не по Linux - это по Windows не хватает документации - вся эта хрень с Guset работает если включено в проводнике "Использовать простой общий доступ." - иначе - login/password никто не отменял. Удачи.

Тут у меня в других комментах развернулось препирательство с одним анонимусом насчёт jigdo.
О каких комментариях речь? В чём суть проблемы? Где там возник дефицит документации?

а у меня проблемы с принтерами возникли только при использовании linux. проблемы в следующем.
hp1022 нормально работает только при подключении к windows. При подключении к Linux спустя некоторое время отваливается. Тоже иногда происходит и с клиентами на Linux. hp1000 вообще отказался печатать под Linux. Canon LBP-1120 удалось запустить локально под Linux, но по сети печатает только если принтер подключен к windows.

Вроде этот блог взял с вашей страницы

2 Анонимный пишет.
Это не по Linux - это по Windows не хватает документации
Забавно, а как же корпорация Майкрософт!? :-)

"Использовать простой общий доступ." - иначе - login/password никто не отменял. Удачи.
Проясняю ситуацию: комп лабораторный, за ним сидит куча дятлов, которые не поймут, с какого рожна там появился пароль. И потом, если добавлять с винды - никакого пароля не просят. А я про guest не знал.

2 асоциальный психопат пишет.
О каких комментариях речь? В чём суть проблемы?
Об этих.
Меня там убеждают, что создавать ISO-шники из пакетов скриптом на руби - идиотство, и суют jigdo. На вопрос, как вытащить на iso репозиторий из Maemo и убунтушных multiverse почему-то не ответили :-)
Ну и фиг с ним.

2 Анонимный пишет.
Вроде этот блог взял с вашей страницы
Там не об этом. к сожалению.

>> Забавно, а как же корпорация Майкрософт!?

>> А я про guest не знал.

Вы сами на свой вопрос ответили :)))

2 Анонимный пишет.
>> Забавно, а как же корпорация Майкрософт!?
>> А я про guest не знал.
Вы сами на свой вопрос ответили :)))
Ну так в самом деле не знал. В документации тишина. И тут звонкий глас ЛОРа своей пионерской зорькой всё и осветил :-))

Я таки не пойму - зачем разработчикам cups писать это в документацию. Каждому юзеру - свой логин. А то ведь так придется на каждый чих Майкрософт доки писать. Вы посмотрите - Active Directory - покореженный Microsoftом LDAP - и чего теперь - линуксоидам писать доки по его настройке. IMHO фтопку его выкинуть, а дятлов поувольнять нахер - пускай Билл Гейтс им деньги платит.

А вот как быть с именами принтеров, в которых есть пробел?
А то у меня шара видна как 'Samsung ML-1520', вписываю в CUPS as is - в логах CUPS-а NT_STATUS_BAD_NETWORK_NAME. Пытался ставить '\' перед пробелом - та же история.
Можно, конечно, переименовать принтер на виндовой машине, но админа пока нет.zbjm

целый день бился с cups`ом - не было в нем вкладки для печати на SMB. В итоге выяснилось, что необходимо было лишь установить пакет smbclient

почти год сидел в офисе без принтера (сразу не получилось настроить по известным причинам, да и не часто я печатаю) в общем за совет спасибо. Я подозревал нечто подобное, но в любом случае пост в блоге оказался очень полезным :-)

Каждому юзеру - свой логин.
Читаем внимательно условия задачи: виндузячий принтер расшарен в винде без пароля.

А то ведь так придется на каждый чих Майкрософт доки писать.
Если хотите, чтобы вашим софтом пользовались - да.

Вы посмотрите - Active Directory - покореженный Microsoftом LDAP - и чего теперь - линуксоидам писать доки по его настройке.
ИМЕННО! Куча народу мается с этим г. ном и никто не пишет, как они это победили. Суровая реальность она знаете ли такая, компромиссная очень. Если хотите жить, значит надо подстраиваться под то, что есть, и это "то что есть" мееееееедленно вытеснять.

А если авторизация через домен, то надо
smb://usrername:userpassword@domainname/computername/printername

Появились проблемы, принтер windows печатаем с Linux, появляются странные знаки на полях разрывы в страницах, и долгое время в промежутках между страницами, в чем может быть причина?

Да guest не ответ, а путь к решению, что надо указывать имя пользователя и пароль для Windows, когда это требуется. В частности в Windows XP Pro и серверных платформах пользователь guest по-умолчанию отключен :) И я тоже не понимаю причем здесь разработчики CUPS, если это база знания Винды

2 worldmind комментирует.
А если авторизация через домен, то надо
Это я действительно пропустил - каюсь, поправил текст поста. worldmind , спасибо!

2 Catabras комментирует.
Да guest не ответ, а путь к решению,
В посте указаны условия задачи: пароля НЕТ. Это и привело меня в тупик. Виндовые машины печатают нормально.

надо указывать имя пользователя и пароль для Windows, когда это требуется. В частности в Windows XP Pro и серверных платформах пользователь guest по-умолчанию отключен :)
Согласен, добавил в пост. Про guest в винде-PRO я не знал.

И я тоже не понимаю причем здесь разработчики CUPS, если это база знания Винды
Поясняю: этот простой пример ОБЯЗАН быть в документации на CUPS, и то, что его там нет (а есть куча устаревшего маразма и экзотических принт-серверов) есть грубая оплошность и разгильдяйство команды, составляющей документацию CUPS. Это дефект документации: там описано куча случаев, кроме самого очевидного и распространённого.

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

Пытался установить зашаренный (или расшаренный) на Windows XP принтер Xerox Phaser 3200 MFP PCL6, используя стандартные драйвера, входящие в пакет CUPS на Fedora Core 10. И вместо одного листа с картинкой вывалилось много листов с текстовыми кодами. Пришлось использовать драйвера с "родного" диска (см. здесь)

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

принтер печатает, но только тестовую страницу, остальное - чистые листы :-(

Вот что я вам скажу: всё так называемое "свободное сообщество" - сборище засранцев, которое делится только общеизвестными знаниями, а как только надо поделится каким-нить своим секретом, даже скриптиком, за которые платят бабло - так же знания под одеяло, а язык - в жопу.
Взаимопомощь, взаимовыручка - это мифы для лохов!

@Анонимный комментирует.
Вот что я вам скажу: всё так называемое "свободное сообщество" - сборище засранцев
Знаешь, Анонимус, как ни странно, но ты отчасти прав. Самое печальное, что сообщество Дебиан в этом не исключение.

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

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

всё так называемое "свободное сообщество" - сборище засранцев, которое делится только общеизвестными знаниями

При настройке Samba в качестве сервера печати, клиенты вашей сети смогут отправлять задания на печать на хост Samba, используя протокол SMB. В примерах, приведенных в этой документации, используется бэкэнд raw-принтера. Эта конфигурация требует, чтобы задание на печать обрабатывалось драйвером на клиенте и, следовательно, могло обрабатываться принтером без дальнейшей обработки или фильтрации.

Поддерживаемые сервера печати

Samba поддерживает несколько серверов печати, таких как CUPS и LPRng . Полный список см. в параметре printing на man page smb.conf(5).

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

Подробнее о настройке серверной части см. Документацию сервера печати.

Поддержка бэкэндов CUPS или IPRINT в Samba

При использовании серверной части CUPS или IPRINT Samba должна быть собрана с включенной поддержкой CUPS. Для подтверждения введите:

Если вывод не отображается:

  • Samba была собрана с использованием параметра --disable-cups.
  • Сценарию Samba configure не удалось найти необходимые библиотеки для поддержки CUPS. Для получения дополнительной информации см. Зависимости пакетов, необходимые для сборки Samba.

Добавление принтера в серверную часть сервера печати

Чтобы добавить принтер на сервер печати CUPS:

Обратите внимание, что для пересылки задания на сервер печати под управлением Windows Vista или более поздней версии или Windows Server 2008 или более поздней версии требуется проверка подлинности.

  • Введите имя для принтера. Это имя используется /etc/samba/smb.conf при совместном использовании принтера с помощью Samba.
  • Выберите Raw поставщика и модель принтера.
  • Сохраните настройки.

LPRng

Чтобы добавить принтер на сервер печати LPRng:

  • Добавьте следующую строку в файл /etc/printcap:

Имя принтера используется в файле /etc/samba/smb.conf при совместном использовании принтера с помощью Samba.

Для получения дополнительной информации об используемых параметрах см. printcap(5) man page.

Чтобы создать каталог spool, введите:

Перезапустите службу LPRng.

Включение службы spoolssd

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

Без spoolssd Samba разветвляет smbd процесс или каждое задание на печать и инициализирует кэш printcap. В случае большого количества принтеров служба smbd может перестать отвечать на запросы в течение нескольких секунд при инициализации кэша. Служба spoolssd позволяет запускать предварительно раздвоенные процессы smbd, обрабатывая задания на печать без каких-либо задержек. Основной spoolssd smbd-процесс использует мало памяти, разветвляется и завершает дочерние процессы.

Чтобы включить службу spoolssd:

  • Отредактируйте раздел [global] в файле /etc/samba/smb.conf:
    • Добавьте следующие параметры:

    При желании вы можете установить следующие параметры:

    Параметр Значение
    по-умолчанию
    Описание
    spoolssd: prefork_min_children 5 Минимальное количество дочерних процессов
    spoolssd: prefork_max_children 25 Максимальное количество дочерних процессов
    spoolssd: prefork_spawn_rate 5 Samba разветвляет это число новых дочерних процессов до значения, установленного в spoolssd:prefork_max_children, если установлено новое соединение
    spoolssd: prefork_max_allowed_clients 100 Количество клиентов, обслуживаемых дочерним процессом
    spoolssd: prefork_child_min_life 60 Минимальное время жизни дочернего процесса в секундах. 60 секунд это минимум.

    После перезапуска Samba автоматически запускает smbd-подпроцессы:

    Включение поддержки сервера печати в Samba

    Чтобы включить поддержку сервера печати:

    • Установите бэкэнд печати в параметре printing раздела [global] в файле /etc/samba/smb.conf.(CONFIGFILE) Например:
    • Добавьте следующий раздел в /etc/samba/smb.conf(CONFIGFILE):
    • Создайте каталог spool, заданный в параметре path:
    • Перезапустите Samba:

    Совместное использование принтера

    Автоматический общий доступ ко всем принтерам, настроенным на сервере печати

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

    Отключение автоматического общего доступа к принтеру

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

    • Добавьте следующий параметр в раздел [global] файла /etc/samba/smb.conf(CONFIGFILE):
    • Перезапустите Samba:

    Совместное использование принтеров вручную

    Чтобы вручную поделиться принтером:

    • Убедитесь, что автоматический общий доступ к принтеру отключен. См. пункт выше.
    • Добавьте общий ресурс для принтера в файл /etc/samba/smb.conf(CONFIGFILE):

    Задайте на параметр printer name имя принтера, используемого в бэкэнде локального сервера печати.

    В данной статье я хотел поселиться опытом по созданию принт-сервера на базе linux с интеграцией в AD. Под интеграцией понимается ввод linux сервера в домен Windows и расшаривание Cups принтеров через Samba, включая драйвера принтеров. Возможно коряво выразился, но если проще, то это выглядит так — для того, чтобы установить принтер пользователю Windows, достаточно нажать«установить новый принтер», вывести список принтеров в AD и клацнуть на нужный принтер — принтер установится автоматически с установкой всех необходимых драйверов. При этом, все права на управление, доступ, печать подтянутся из AD.

    Часть 1. Тонкости настроек

    Исходные данные

    • Домен контроллер — Windows Server 2008 R2 (AD, DNS, DHCP) IP — 10.10.15.31
    • Имя домена — INITIAL
    • Принт сервер — ОС linux (я использую OpenSUSE 13.2 x64, kernel 3.16.7-42-default) IP — 10.10.15.11
    • kerberos 1.12.2-24.1
    • winbind 4.2.4-40.1
    • LDAP 2.4.39-8.9.1
    • Samba 4.2.4-40.1
    • CUPS 1.5.4-21.9.1

    Синхронизация времени

    Время на linux сервере должно быть идентичным с домен контроллером, иначе в домен не вогнать.
    Для этого есть несколько вариантов: на домен контроллере и нашем принт сервере указать одни и те же ntp сервера синхронизации времени или на принт сервере указать IP домен контроллера в качестве ntp сервера. Я настроил по второму варианту.


    Проверить синхронизацию можно так:

    Winbind

    Многие утверждают, что данные настройки вообще не нужны для samba, как и kerberos и LDAP, но я люблю все по феншую ))). Ранее я настраивал samba в качестве PDC (Primary Domain Controller) без kerberos и LDAP и все это работало с WinXP клиентами, подтверждаю.

    Samba

    Данные настройки не рекомендуются самой samba, начиная с каких то версий 3.Х, но во многих статьях они указываются. Если указать данные параметры в новых версиях самбы, то testparm выдаст:


    параметр realm — имя домена должно быть указано заглавными буквами!

    Kerberos

    Секция realms — имя домена должно быть указано заглавными буквами!


    Иначе, можно получить такую ошибку при проверке kerberos


    Предположим, что вы настроили необходимые сервисы и успешно ввели linux машину в домен Windows. Перейдем к настройкам CUPS.

    BrowseOrder allow,deny — порядок рассмотрения системой разрешающих и запрещающих директив: все что не разрешено — запрещено.
    BrowseAllow all — отображения всех доступных принтеров локальной сети
    BrowseAddress — указываем все подсети, из которых нужен доступ к принтерам
    DefaultAuthType — тип аутентификации. По умолчанию — Basic.

    На счет последнего. Заметил в логох следующее:


    Рекомендации на эту тему нашел две:

    — отключить шаринг принтеров в самбе полностью (очень полезно, особенно для сервера печати)
    — заменить Basic на None везде, где есть данная опция в cupsd.conf (не почувствовал разницы)

    В любом случае, данная ошибка никак не влияет на работу cups'a.


    Я указал доступ для всех локальных подсетей. В принципе в директиве Allow можно указать разные подсети, так же, как я делал это в BrowseAddress.

    Далее настраиваем доступ к административной панели и конфигурационным файлам. Здесь можно так же прописать директиву Allow (в каждую секцию) с указанием подсетей или отдельного IP адреса, с которого/которых можно будет администрировать принтеры. Если не добавлять эту директиву — админить можно будет с любой подсети локалки — равнозначно Allow all.


    На этом настройка cups закончена. Рестартим его. В OpenSUSE это делается через systemctl


    Иначе получим такую ошибку:


    Добавлять принтеры в cups через web интерфейс задача — довольно тривиальная, поэтому описывать не буду. Единственное, рекомендую на вкладе «Администрирование» проверить включены ли опции:

    — Разрешить совместный доступ к принтерам, подключенным к этой системе
    — Разрешить печать из Интернета

    И при установке принтера, не забывать включать опцию «Разрешить совместный доступ к этому принтеру».


    Кто не хочет заморачиваться с samba, в cups есть возможность печати посредством протокола ipp (Internet Printing Protocol). В Windows принтер устанавливается так: панель управления → принтеры → установка принтера → сетевой принтер → подключиться к принтеру в интернете («выбрать общий принтер по имени» для Win7/8/10) в качестве url указываем полный путь:




    Полный путь до принтера можно скопировать из адресной строки браузера в web интерфейсе cups.


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

    ГРАБЛЯ_№1: в WinXP протокол ipp включен по дефолту в сервис пак начиная с SP2, в Windows7/8/10 компонент «Интернет печать» может быть не включен.

    Устанавливается через панель управления → программы и компоненты — включение и отключение компонентов Windows. В серверных Windows, данный протокол точно отключен по дефолту. Включаем через диспетчер сервера → компоненты → добавить компоненты → клиент печати через Интернет.

    Я промучался с этой проблемой 2 дня. При попытке установки принтера данным способом вылезала ошибка — «Windows не удается подключиться к принтеру». При этом в логах cups и samba — ничего криминального нет. Это был мегатреш. Я дошел до разбора всего потока сетевого интерфейса с помощью tcpdump и wireshark, но ларчик то просто открывался. Проблема была на стороне винды.


    Часть 2. Установка драйверов

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

    Можно вручную скопировать установленные драйверы в Windows — %WINDIR%\system32\spool\drivers\W32X86 и \x64 в папку с шарой для драйверов samba — /var/lib/samba/drivers/W32X86 и ./x64 и потом регистрировать их с помощью консольной утилиты rpcclient, но это нереальный квест и занятие не для слабонервных.

    Мы пойдем более простым путем. Логинимся на виндовой машине с учеткой Domain Admin в наш домен. Буду показывать на примере WinXP (далее расскажу как действовать с Win7). Открываем проводник, в адресной строке вбиваем адрес принт сервера по IP или имени: \\Print-01\ или \\10.10.15.11\, переходим в папку Принтеры и факсы.


    Клацаем правой кнопкой мыши на принтере → свойства.


    На предложение установить драйвер, говорим Нет.


    Идем во вкладку «дополнительно» → сменить.



    Установить с диска и указываем папку с драйвером. Выбираем принтер в списке и нажимаем ОК.

    ВАЖНО — в начале необходимо указать папу с 32-битными драйверами, даже, если система у вас 64-битная! 64-битные дрова установить можно будет после.



    Идет копирование драйверов в расшаренную папку samba.



    Переходим во вкладку «доступ» → отмечаем галочку «Внести в Active Diectory» → применить. Если нужны 64-битные драйвера, нажимаем Дополнительные драйвера"



    И отмечаем галочку х64 → ОК. Система запросит папку с драйверами — аналогично скармливаем ей ее.



    При желании, на вкладке «Общие», можно переименовать сетевой принтер. Эти названия будут отображаться при переходе в проводнике на принтсервер \\Print-01\ или \\10.10.15.11\.



    В AD имена принтеров будут теми же, как вы называли их в cups.


    Удаление принтеров из AD.

    Диспетчер сервера → Доменные службы Active Directory → Active Directory пользователи и компьютеры → выбираем домен правой кнопкой мыши → найти → выбираем группу из ниспадающего списка «принтеры» → найти.


    Находим в списке принтер, который хотим удалить → правой кнопкой мыши «удалить»


    Установка драйверов в Windows 7/8/10.

    В Windows 7/8/10 установить драйвера на принт-сервер можно из оснастки printmanagement.msc. Пуск → выполнить → printmanagement.msc

    ПРИМЕЧАНИЕ В Home и Home Premium этой тулзы нет. Запускать эту оснастку нужно из под учетки Domain Admin. Сначала нужно добавить наш сервер печати по IP или имени.


    Далее, здесь можно управлять принтерами сервера печати по аналогии c вышеуказанной инструкцией.


    Так же здесь удобно управлять драйверами сервера печати — удалять/добавлять.


    Что не удалось пока решить

    В Windows Server 2012 R2 ну никак не хотят устанавливаться расшаренные принтеры. Ошибок в логах cups и samba нет. Принер начинает устанавливаться, драйвера копируются, но на этапе «завершение установки» выскакивает вышеуказанная ошибка «Windows не удается подключиться к принтеру». Думаю это какой-то косяк винды и скорее всего протокола ipp, хотя компонент «Клиент интернет печати» установлен.

    В заключении, поделюсь секретом установки принтера Panasonic KX-FLB883RU в CUPS. Для данного принтера нет драйверов для linux, но чудесным образом подошел ljet2p.ppd (Panasonic KX-P4410 Foomatic/ljet2p), входящий в стандартный пакет OpenPrintingPPDs. Настройка принтера в CUPS через socket://IP_address/. Все работает без глюков. Надеюсь, кому-то пригодится.

    Следующая моя статья будет посвящена удаленной автоматизированной системе установки принтеров пользователям домена. Или как то так)

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