Ubuntu как принт-сервер

Под конец года наша организация получила новое оборудование — компы на замену особо почётных раритетов и дополнительные рабочие места. В некоторых отделах количество компьютеров на один принтер перевалило за 12. Новый Windows 7 домашний базвый позволяет подключать к принтеру 8 человек, точнее 8 компьютеров. Старый добрый Win XP professional поддерживает 10 подключений. Мало - у нас отделы до 14 рабочих мест. Аппаратные принт-серверы сами стоят как маленький принтер, а к тому же требуют хитрой настройки для каждого клиента. Вот у линуксоидов такой проблемы нет, хоть и есть другие.

После модернизации у нас остались старые компьютеры — Celeron 1700, 256 MB DDR, 20 GB IDE HDD — как раз как в объявлениях «отдам даром». Они и стал принт-сервером под управлением ubuntu 10.04 desktop.

Диска с ubuntu server не было под рукой, да и задачи сделать всё только из командной строки не стояло.
О том, как печатать через CUPS есть хорошая статья. Вот только рабочие места постоянно заняты, принтеры регулярно ездят в гарантийный ремонт и каждый раз копировать URI принтера, ползать по панели управления Windows и вручную подсовывать драйвер нет ни желания, ни возможности. Эх, было бы как в Windows — ввёл в адресную строку \\имя-компа-с-принтером, выбрал принтер, а остальное делается само. Можно и так, но придётся повозиться с сервером.
Добавляем пакеты
sudo apt-get install windbind libcupsys2-dev openssh-server
Winbind теснее интегрирует имена хостов в linux и windows сетях. Libcupsys2-dev, но же cups-devel — изсходные тексты CUPS для сборки автоустановщика драйверов. Openssh-server обеспечит доступ по SSH на случай, если нужно будет выполнить пару команд с другого этажа.
Собираем cups windows drivers
Скачиваем cups-windows-6.0-source. Распаковываем, заходим в полученный каталог и запускаем sudo make install

Изменения (для ubuntu 10.04 desktop) коснутся только двух секций.

[printers]
   comment = All Printers
   browseable = yes
   path = /var/spool/samba
   printable = yes
   guest ok = yes
   read only = yes
   create mask = 0700
[print$]
   comment = Printer Drivers
   path = /usr/share/cups/drivers
   browseable = yes
   read only = no
   writable = yes
   guest ok = yes

В первой разрешаем гостя, во второй меняем пусть к каталогу с драйверами и разрешаем запись. По-умолчанию писать в неё сможет только root (другое имя не прокатило). И его ещё надо создать.
smbpasswd -a root

Применим сделанные настройки:

sudo service smbd restart
sudo service cups restart

Часто вместо service smbd restart советуют /etc/init.d/samba restart но в нашей убунте (10 04 десктоп) его зовут именно smbd
Для штатной работы нужно скопировать из windows несколько файлов:

  ps5ui.dll
  pscript.hlp
  pscript.ntf
  pscript5.dll

Нужно продублировать их из каталога %WINDIR%\SYSTEM32\SPOOL\DRIVERS\W32X86\3 в /usr/share/cups/drivers и получаем такой список:

 cups6.inf
 cups6.ini
 cupsps6.dll
 cupsui6.dll
 ps5ui.dll
 pscript.hlp
 pscript.ntf
 pscript5.dll

Обратите внимание, все имена должны быть в нижнем регистре!

Теперь, собственно экспортируем все принтеры из CUPS в Samba (на нащем принт-сервере ровно один принтер, так что можно экспортировать все)
sudo cupsaddsmb -U root -a -v
Если всё прошло хорошо, то вы увидите примерно полтора экрана текста, который будет заканчиваться на Successfully set %принтер% to driver %драйвер%
Если же выводится много-много (более пяти экранов) повторяющегося текста — смело жмём Ctrl+C и читаем сообщение об ошибке Самбы. Устраняем и повторяем.

После всех манипуляций вин-компьютеры увидели в сети своего собрата с одним общим принтером. Его можно установить привычным для пользователей windows способом — двойной щелчок — да — ждём — ждём — «принтер ? использовать по-умолчанию». Однако подключенный таким образом принтер не имеет фирменных настроек — только стандартный драйвер windows. Зато там есть печать нескольких страниц на одном листе.

После очередной перезагрузки выяснилось, что samba стартует раньше cups и из-за этого пропадает доступ к принтеру. Лечится это довольно просто — добавлением /etc/init.d/smbd restart перед exit 0 в файле /etc/rc.local

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

Ключевые слова: 
Тематика: 

Комментарии

Хочу отметить, материал основан на HOWTO c ubuntu.ru

При добавлении принтера через ПС в Windows XP, выскакивает сообщение "Сервер для принтера ХХХ не имеет нужного установленного драйвера принтера..."
Не подскажете?..

Не могу гарантировать, но думаю, что проблема с файлами в /usr/share/cups/drivers - может быть, они недоступны из-за настроек самбы, а может быть их мена не в нижнем регистре, или они из 64-х битной Windows.

Мне, к сожалению, пришлось отказаться от самбы - хоть драйверы и ставились быстро и удобно, но конвертация PS -> PDF -> PCL при печати слишком нагружала слабенький процессор.

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

Побольше бы информации по данной темке, интересно ж однако ознакомиться

Мы сейчас используем принтеры со встроенным принт-сервером, например HP 3005, так что тема потеряла для мена остроту. Какая проблема вас волнует?