Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> cups-samba на samba+AD

CUPS - сервер печати с использованием samba+AD

Автор: Al.


    Решил в качестве эксперимента настроить файловый сервер на самбе, с аутентификацией пользователей в AD. После танцев с бубном наконец-то получил билет кербереса и все заработало (самбу настраивал по статье urgor'a SAMBA+AD+NT ACL, за что ему огроменное спасибо). Вместе с самбой поставил и CUPS. Вот только сетевой принтер фирмы HP на стандартных CUPS'овых дровах работать не захотел.... И так, начнем превращение нашей самбы еще и в принт-сервер. Предполагается, что самба+купс уже настроены и аутентификация пользователей в AD проходит успешно.
   Заходим на http://192.168.0.201:631 и пробуем добавить принтер. Если есть сетевые принтеры(имеющие свой IP) - купс часть нанюхает сам, но не все. Итак, добавляем принтер.
   При попытке напечатать тестовую страницу у меня появилась ошибка  "Unsupported format 'application/postscript'!". ищем дрова на принтеры HP, не забыв перед этим обновить коллекцию портов :)
[srv:/usr/ports]#make search name=hplip
Port:   hplip-1.6.7
Path:   /usr/ports/print/hplip
Info:   Drivers and utilities for HP Printers and All-in-One devices

   Ставим. Если принтер не HP, то, возможно, подойдет Gimp-print. Официальный сайт – gimp-print.sourceforge.net

   Устанавливаем принтер заново, но уже с драйверами из свежеустановленного пакета. (В моем случае было несколько драйверов для моей модели. Я поставил с PostScript).
   Пробуем напечатать тестовую страницу - у меня получилось. Таже принтер должен появиться рядом с расшаренными папками (смотрим с виндусового компа).
   Можно даже попробовать его подключить, но драйверов сервак не даст,а предложит выбрать из существующих или установить с диска. Я поставил первые попавшиеся (даж не от моего прринтера, даж не HP). Тестовая страница теперь печатается еще и из винды.
   А дальше начинается самое интересное. Как заставить наш принт-сервер отдавать клиентам дрова, шоб не пришлось каждый раз бегать с диском? Вот этим-то мы и займемся. Ради этого,собственно,я и писал эту статью... Отвечает за все это дело пакет cups-samba. Его и ставим.
[srv:/usr/ports]#make search name=cups-samba
Port:   cups-samba-5.0.r3
Path:   /usr/ports/print/cups-samba
Info:   The Common UNIX Printing System: MS Windows client drivers

   После установки видим подробную инструкцию к действиям. Ей и последуем.
   В smb.conf в секцию [global] дописываем (если такие параметры есть-заменяем)
        load printers = yes
        printing = cups
        printcap name = cups

   Добавляем секции для принтеров (приводим их к такому виду)
[printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        public = yes
        guest ok = yes
        writable = no
        printable = yes
        printer admin = root
[print$]
        comment = Printer Drivers
        path = /usr/local/share/cups/drivers
        browseable = yes
        # guest ok = yes works too
        guest ok = no
        read only = yes
        write list = root

и перезапускаем самбу
/usr/local/etc/rc.d/samba restart

   А дальше - проверка Вашей везучести:
cupsaddsmb -U root cups_printer_1 cups_printer_2


где cups_printer_1 - имя вашего принтера
или
cupsaddsmb -U root -H localhost -a -v

для добавления всех принтеров.

   Как выглядит успешное завершение этой программы я не знаю, на если на экране бегут строчки,где в блоках меняется только /var/spool/cups/tmp/470334f09f627, или есть сообщения об ошибке (driver not installed, напр) то, судя по всему, Вам не повезло... Жмем ctrl+C и готовимся к танцам.. С бубном...
   Весь процесс состоит из 3 шагов, но для начала, находим на виндовой машине файлы ps5ui.dll, pscript.hlp, pscript.ntf, pscript5.dll и копируем их в /usr/local/share/cups/drivers. Все имена файлов должны быть в НИЖНЕМ регистре.

  • 1. Создаем необходимые папки и копирует туда файлы (одна длиная строка!)
    smbclient -H //localhost/print$ -Uroot -c 'mkdir W32X86;put /var/spool/cups/tmp/470334eed261d W32X86/hp2420_y3.ppd;put /usr/local/share/cups/drivers/ps5ui.dll W32X86/ps5ui.dll;put /usr/local/share/cups/drivers/pscript.hlp W32X86/pscript.hlp;put /usr/local/share/cups/drivers/pscript.ntf W32X86/pscript.ntf;put /usr/local/share/cups/drivers/pscript5.dll W32X86/pscript5.dll'

    суть этой команды такова: заходим smbclient'ом на //localhost/print$ (это тоже шара,просто скрытая)
    и выполняем команды начиная с mkdir W32X86.Основная проблема,которая может возникнуть на этом шаге-запрет записи.Я поставил права доступа 777 на /usr/local/share/cups/drivers и заменил  write list = root на
    write list = root, guest, nobody в smb.conf
    после успешного выполнения в /usr/local/share/cups/drivers должна появиться папка W32X86.

    и еще - снова одной строкой

    smbclient //localhost/print$ -Uroot -c 'put /usr/local/share/cups/drivers/cups6.ini W32X86/cups6.ini;put /usr/local/share/cups/drivers/cupsps6.dll W32X86/cupsps6.dll;put /usr/local/share/cups/drivers/cupsui6.dll W32X86/cupsui6.dll'

  • 2. В smb.conf меняем
    disable spoolss = Yes
    

    на
    disable spoolss = No
    

    далее запускаем
    cupsaddsmb -U root -H localhost -a -v
    

    и ищем там строчку:
    rpcclient localhost -N -A /var/spool/cups/tmp/47034d38731a2 -c 'adddriver  [...]'
    

    и запускаем ее как:
    rpcclient localhost -Uroot -c 'adddriver  [...]'
    

  • 3. Теперь надо сказать самбе какой драйвер для какого принтера
    rpcclient localhost -N -U'root%toor' -c 'setdriver printer_name driver_name'
    

       Обычно printer_name и driver_name идентичны. Если получаем:
    result was WERR_ACCESS_DENIED
    

    то пробуем:
    1) в секции [global] дописываем 'use client driver = no' - говорит клиенту стягивать дрова на приттер с нашего cups-сервака
    2)Меняем /etc/pam.d/login на стандартный и smb.conf - на дефолтовый,при этом убираем из него все "лишнее",оставляя минимум.
    После завершения установки дров все ставим на место и рестартим самбу.

    ВСЕ!
    После успешного завершения при подключении сетевого принтера дрова на винду должны ставиться автоматически

    Эта статья не претендует на подробное руководство по настройке CUPS-SAMBA. Скорее, просто мой личный опыт работы.. Наверняка, есть более простой и удобный способ настройки. Статья писалась уже после настройки и запуска сервака, на память. Так что возможны неточности. Если есть идеи или проблемы - пишите. Будем вместе разбираться :)



    размещено: 2007-10-04,
    последнее обновление: 2007-10-04,
    автор: Al


    Денис, 2007-10-05 в 13:00:06

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

    Al, 2007-10-06 в 13:50:50

    Денис:
    Плохо описано, какие именно "файлы для принтера" ты имел ввиду (:
    Вообще я просто читал маны(rpcclient, например)там четко сказано,для каких процедур  (adddriver, втом числе) какие параметры.Если ты про smbclient - то это простое банальное копирование общих файлов, необходимых для установки новых пост-скрипт драйверов для винды(вроде именно так написано в мане по купсу).Задай вопрос конкретней.Можешь на мыло или в асю.Постараюсь ответить :)

    Денис, 2007-10-08 в 16:44:50

    да, действительно непонятно какие дрйвера нужны для принтеров чтобы лежали в папке на шаре, и почему именно эти файлы. ушел читать маны :-)

    Al, 2007-10-08 в 18:09:46

    Microsoft Postscript Drivers For Windows
    The base driver for Windows 2000 and higher is the Microsoft PostScript driver, which is available on any system running Windows 2000 or higher in the %WINDIR%\SYSTEM32\SPOOL\DRIVERS\W32X86\3 folder.

    The CUPS printer driver is preferred over the Microsoft driver since it supports the page-label, job-billing, and job-hold-until options fully on all printers. However, currently only Windows 2000 and higher is supported by the Microsoft driver, so you will also need to get the Adobe driver to support Windows 95, 98, and Me clients. The Adobe and Microsoft drivers for Windows 2000 are identical.

    Once you have extracted the driver files, copy them to the /usr/local/share/cups/drivers directory exactly as named below:

       [Windows 2000 and higher]
       ps5ui.dll
       pscript.hlp
       pscript.ntf
       pscript5.dll

    Note: Unlike Windows, case is significant - make sure that you use the lowercase filenames shown above, otherwise cupsaddsmb will fail to export the drivers.
    вот,в принципе,и все,что есть в манах.....
    если вопрос принципиален-пиши - попробуем разобраться

    Al, 2007-10-31 в 17:26:17

    если после установки hplip в купсе дрова для принтеров hp  не появились,т.е. их там всего два,тогда смотрим,есть ли симлинк:
    cd /usr/local/share/cups/model/
    ln -s /usr/local/share/ppd foomatic-ppds

    Al, 2007-11-02 в 17:05:17

    Если пишет WERR_UNKNOWN_PRINTER_DRIVER, ставим
    chmod 777 /usr/local/share/cups/drivers/W32X86

    Al, 2007-11-02 в 17:27:17

    Перед установкой пробуем ставить в smb.conf
    security = share
    а потом пробуем
    cupsaddsmb -H 127.0.0.1 -v -a
    у меня на одном компе сразу прокатило

    balas, 2007-11-12 в 19:17:54

    Спасибо, Al, очень помогла статья. Особенно камент про симлинк :)) (все остальное заработало, а с этой фигней два дня мучился)

    Sergey, 2008-02-05 в 22:48:58

    Настраивал, по ману, нашел все там, при возниконовении проблем наткнулся на эту страницу.
    Если не трудно не могли бы Вы уточнить для меня некоторые моменты:

    1)В RAW-формате принтер работает без проблем. Подключается и печатает на ура. Но вот бывают случаи, когда в винде пишет что принтер не доступен, короче нельзя получить его статус(но печатать можно). Если просто перезапустить сервис самбы, принтер сразу переходит в винде в состояние "готов". С чем это может быть связано. Система: Fedora 8, ну и собственно все последние stable версии samba, cups и т.д.

    2) Так до конца и не понял - как раздавать дрова. Имеется например Xerox 3125. Что мне нужно качать и куда заливать. Скинул к примеру
      ps5ui.dll
      pscript.hlp
      pscript.ntf
      pscript5.dll
    в /usr/local/share/cups/drivers
    делаю cupsaddsmb -v -a
    Пишет что не найден PPD файл для принтера Xerox 3125.
    Т.е. не понятно, какие мы будем дрова отдавать клиенту, натуральные под Windows для Xerox 3125 или нечто смешанное...

    babay, 2008-04-04 в 10:58:39

    Если выскакивает ошибка - result was WERR_ACCESS_DENIED, не нужно убирать на дефолтные файлы, просто пользователь root скорее всего не существует в домене, и пользователь который выполняет команду setdriver, должен иметь соответсвтующие права админа в домене.

    opt1k, 2008-11-26 в 11:32:03

    пол дня убил, вот некоторые моменты:
    rpcclient -Uroot
    там пишем
    adddriver "Windows NT x86" "HP LaserJet 5Si/5Si MX PS":pscript5.dll:hplj5si1.ppd:ps5ui.dll:pscript.hlp::pscript.nt
    меняем HP LaserJet 5Si/5Si MX PS и hplj5si1.ppd на своё
    далее
    setdriver your_printer_name your_driver_name
    your_printer_name - из cups'а

    jeweller, 2009-03-30 в 15:23:31

    Для принтеров  HP 1010 1018 1020 1022

    вот решение проблемы.

    http://www.sisadminov.net/freebsd/2.html

    Anaxion, 2009-10-21 в 13:38:05

    Ошибка - result was WERR_ACCESS_DENIED
    предыдущие решения не помогли, проделал:

    This command set rights of print operator to user john:

    net -U root -S localhost rpc rights grant john SePrintOperatorPrivilege

    after, check the permissions with this:

    net -U root -S localhost rpc rights list john
    Дрова подцепились

    Al, 2010-02-16 в 9:43:17

    Если пишет WERR_UNKNOWN_PRINTER_DRIVER, ставим
    chmod 777 /usr/local/share/cups/drivers/W32X86
    и на все вложенные файлы и папки!

    Al, 2010-06-15 в 13:15:42

    На самом деле все еще проще. При добавлении драйверов происходит авторизация_аутентификация в 2 этапа. В результате должны быть права
    1. На запись пользователя в шару с драйверами на самбе. Проверяем так
    smbclient //localhost/print$ -Uadm
    и пробуем создавать - удалять папки-файлы.
    adm - пользователь в AD, которого хотим сделать администратором принтеров
    2. На работу с принтерами через rpc. Добавляем эти привелегии нашему пользователю. adm - администратор домена
    net -v -S localhost -U adm rpc rights grant adm SePrintOperatorPrivilege

    #net rpc rights list            View available/assigned privileges
    #net rpc rights grant           Assign privilege[s]
    #net rpc rights revoke          Revoke privilege[s]

    #Возможные значения
    #SeMachineAccountPrivilege - Add machines to domain
    #SePrintOperatorPrivilege - Manage printers
    #SeAddUsersPrivilege - Add users and groups to the domain
    #SeRemoteShutdownPrivilege - Force shutdown from a remote system
    #SeDiskOperatorPrivilege        - Manage disk share
    #SeTakeOwnershipPrivilege - Take ownership of files or other objects


    #---------------------------------------------------------------------
    #Добавление виндового драйвера
    cupsaddsmb -U adm -H localhost -v [HP9050-UZB HP9050-UZB] [-a]
    Собственно, после этого добавление виндовых драйверов проходит из консоли и веб-морды без дополнительных манипуляций.

    pavel, 2010-12-17 в 10:11:29

    а как быть с очередью печати? ее не видно если клиент подключен через cups-smb....



  •  

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

    © lissyara 2006-10-24 08:47 MSK

    Время генерации страницы 0.0453 секунд
    Из них PHP: 27%; SQL: 73%; Число SQL-запросов: 77 шт.
    Исходный размер: 39895; Сжатая: 10719