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

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

После модернизации у нас остались старые компьютеры — Celeron 1700, 256 MB DDR, 20 GB ШВУ — как раз как в объявлениях «отдам даром». Они и стал принт-сервером под управлением 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