Настройка принтера-сканера под Ubuntu Server 12.04
Живет у меня в кладовке сервер, который круглосуточно раздает торренты и является файлохранилищем, доступным всей семье (у каждого по компьютеру). Все это добро соединено несчастным D-Link роутером.
Решил накатить новую серверную ОС и настроить под нее all-in-one принтер HP PSC 1315, чтобы можно было сканировать и печатать из любой точки квартиры, покуда хватит витухи или wi-fi. Все проделывается исключительно в моей роутерной локалке, в интернет доступ не даю (хотя бы по тому, что у меня динамический ip, и пока нет резона заморачиваться со всякими no-ip сервисами).
Итак, имеем на борту свежую и чистую Ubuntu Server 12.04. Вообще, на сервере у меня 2 HDD, у которых тонкая духовная организация. Терабайтник разбит под систему, своп и /home, второй 500гб диск монтируется в /home как "reserv". Папка "torrent" так же лежит в /home, и обе они имеют общий доступ. Не сочтите это за извращение, но так было надо =)
Как все это работает: принтер расшаривается через samba и печатает с помощью cups, а сканер сканирует с помощью sane и доступ к нему открыт либо через веб-морду scanner server, либо через линуксовский xsane. На винде тоже есть программы, подключающиеся по сети к сканеру, но бесплатных аналогов я не нашел.
Приступим..
Принт-сервер.
Для начала поставим дрова на принтер:
sudo apt-get install hplip
Потом его настроим:
sudo hp-setup -i
Следуем пунктам, и если все делать правильно, то принтер будет определен, о чем программа и сообщит. Порт, к которому подключен принтер - usb. Ставим samba и cups:
sudo apt-get install cups samba
Теперь надо подправить их конфиги. Поискав в сети, и перепробовав различные варианты, мне подошел только один, с
этого сайта, как для samba так и для cups. Скажу, что пытался и своими силами их подправить, но в отличие от samba, cups не завелся, поэтому пришлось брать готовое. Привожу их сюда. Не обязательно копипастить в таком виде, можно найти нужные строки и раскоментировать =)
Samba:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.old
sudo nano /etc/samba/smb.conf
[global] # Глобальные настройки
netbios name = Lit-Server-P # Имя Машины в сети Windows
workgroup = BUDOVA # Рабочая группа
server string = Printer # Комментарий
wins support = no # Не использовать систему имён от Windows
dns proxy = yes # Пытатся резолвить имена с помощью nslookup
name resolve order = bcast # Каким образом искать имена в сети
domain master = no # Не как Мастер Браузер
local master = no # Не учавтсвовать в выборе Мастер Браузера
map to guest = Bad Password # Любой вход расценивать как Гостя
log file = /var/log/samba/log.%m # Куда писать лог файл
max log size = 1000 # Максимальній размер лог файла
security = share # Политика работы сервера
guest account = printer # Кто в системе является Гостем
printing = cups # Какой демон отвечает за печать
printcap name = cups # Какой демон отвечает за печать
max connections = 0 # Неограниченное число подключений
max open files = 10000 # Максимальное число открытых файлов
max print jobs = 1000 # Максимальное число заданий на принтер
load printers = yes # Показывать принтеры в шарах
[printers] # Принтеры
comment = All Printers # Комментарий
browseable = yes # Видимый в шарах
path = /var/spool/samba # Путь к спуеру
printable = yes # Печатаемый
guest ok = yes # Пускать гостя
read only = yes # Только для чтения
create mask = 0700 # Права доступа
public = yes # Публичный
writable = no # Запись запрещена
use client driver = yes # Использовать драйвера клиента
[print$] Драйвера для подгрузки автоматом
comment = Printer Drivers # Комментарий
path = /var/lib/samba/printers # Где находятся драйвера
browseable = yes # Видимый
read only = yes # Только для чтения
guest ok = yes # Вход гостям разрешён
[drv-printers] # Драйвера для настройки вручную
comment = Drivers For Printer # Комментарий
path = /home/userall/drv # Где находятся драйвера
read only = no # Только для чтения
create mask = 0700 # Права доступа
directory mask = 0700 # Права доступа
guest ok = Yes # Доступ Гостям
browseable = yes # Видимый
[Users-All] # Для разной информации
comment = For All Users # Комментарий
path = /home/userall/usersall # Расположение
browseable = yes # Видимый
read only = no # Только для чтения
create mask = 0700 # Права доступа
directory mask 0700 # Права доступа
guest ok = Yes # Доступ Гостям
Cups:
sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.old
sudo nano /etc/cups/cupsd.conf
LogLevel warn # Уровень логирования
MaxLogSize 0 # Размер логов
SystemGroup lpadmin # Системная группа
Listen *:631 # Слушать сеть
Browsing On # Видимость
BrowseOrder allow,deny # Политика просмотра
BrowseAllow all # Политика разрешения
BrowseLocalProtocols CUPS dnssd # Протоколы для печати
BrowseAddress @LOCAL # Вещать на все адреса
DefaultAuthType Basic # Тип авторизации по умолчанию
<Location /> # Доступ к службе по HTTP
Order deny,allow # Последовательность политик
Allow From 192.168.1.* # Разрешить с нашей сети доступ
</Location>
<Location /admin> # Доступ к администрированию
Order deny,allow # Последовательность политик
</Location>
<Location /admin/conf> # Доступ к файлу конфигурации
AuthType Default # Тип авторизации по умолчанию
Require user @SYSTEM # Потребовать пользователя системы
Order deny,allow # Последовательность политик
</Location>
<Policy default> # Политики для принтеров
<Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job CUPS-Get-Document>
Require user @OWNER @SYSTEM # Запросить пользователей
Order deny,allow # Последовательность политик
</Limit>
<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default CUPS-Get-Devices>
AuthType Default # Тип авторизации по умолчанию
Require user @SYSTEM # Запросить пользователя
Order deny,allow # Последовательность политик
</Limit>
<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs>
AuthType Default # Тип авторизации по умолчанию
Require user @SYSTEM # Запросить пользователя
Order deny,allow # Последовательность политик
</Limit>
<Limit Cancel-Job CUPS-Authenticate-Job>
Require user @OWNER @SYSTEM # Запросить пользователей
Order deny,allow # Последовательность политик
</Limit>
<Limit All>
Order deny,allow # Последовательность политик
</Limit>
</Policy>
<Policy authenticated> # Политика аутентификации
<Limit Create-Job Print-Job Print-URI>
AuthType Default # Тип авторизации по умолчанию
Order deny,allow # Последовательность политик
</Limit>
<Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job CUPS-Get-Document>
AuthType Default # Тип авторизации по умолчанию
Require user @OWNER @SYSTEM # Запросить пользователей
Order deny,allow # Последовательность политик
</Limit>
<Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
AuthType Default # Тип авторизации по умолчанию
Require user @SYSTEM # Запросить пользователей
Order deny,allow # Последовательность политик
</Limit>
<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs>
AuthType Default # Тип авторизации по умолчанию
Require user @SYSTEM # Запросить пользователя
Order deny,allow # Последовательность политик
</Limit>
<Limit Cancel-Job CUPS-Authenticate-Job>
AuthType Default # Тип авторизации по умолчанию
Require user @OWNER @SYSTEM # Запросить пользователей
Order deny,allow # Последовательность политик
</Limit>
<Limit All>
Order deny,allow # Последовательность политик
</Limit>
</Policy>
Перезапускаем, для применения настроек:
sudo restart cups
sudo restart smbd
Теперь, чтобы иметь доступ через браузер, надо поставить apache. Решив не заморачивать с его отдельной установкой, я поставил сразу LAMP server, в котором есть и апач, и мускул, и пхп. Так, на всякий случай =)
sudo tasksel install lamp-server
Поставили, указали пароль для администратора бд MySQL.
Теперь мы имеем доступ к cups через браузер. Заходим на сервер http://server-ip:631
Там все просто и понятно, создаем группу, добавляем свой принтер (в списке был только HP PSC 1310, его я и указал, так как от моего 1315 он ничем не отличается. В дальнейшем он и будет считаться моим принтером)
из списка предложенных, выбираем порт, к которому он подключен. Для проверки можно распечатать тестовую страницу. Если не печатает, то скорей всего проблема с указанием порта (должен быть usb).
На этом настройка принтсервера закончена. Теперь компьютерам-клиентам надо указать наш принтер. В Ubuntu заходим в "Система -> Администрирование -> Печать", или из консоли system-config-printer. Добавляем, находим по ip сервера, печатаем пробную страницу. В Windows это "Принтеры и факсы", указываем сетевой принтер (можно просто скопипастить ссылку на него из cups), сопоставляем драйвер, и все, готово.
Скан-сервер.
Инструкции я нашел вот на этом сайте, но многое пришлось допиливать самому. Поэтому привожу подробные ходы.
Устанавливаем утилиты для работы со сканером и изображением:
sudo apt-get install sane libsane sane-utils netpbm
Теперь найдем сканер:
sudo scanimage -L
Вот что выдало у меня:
device `hpaio:/usb/psc_1310_series?serial=HU45OBP05YO2' is a Hewlett-Packard psc_1310_series all-in-one
Добавляем нового пользователя для работы со сканером в группу saned:
sudo adduser www-data saned
Теперь надо подправить конфиги апача, чтобы можно было запускать cgi скрипты, для работы со сканером из браузера.
sudo nano /etc/apache2/apache2.conf
Находим следующую строку и раскоментируем, а если ее нет, то просто добавляем в конец файла.
AddHandler cgi-script .cgi
Тоже самое проделаем и с этим файлом:
sudo nano /etc/apache2/mods-enabled/mime.conf
Редактируем следующий конфиг:
sudo nano /etc/apache2/sites-enabled/000-default
Находим строку
Options Indexes FollowSymLinks MultiViews почти в начале файла, и добавляем к ней
ExecCGI.
С апаче покончено, можно рестартить:
sudo /etc/init.d/apache2 restart
Теперь будем прикручивать сам веб сервис для сканирования. Официальный сайт разработчика уже давно перестал быть его сайтом, и ссылка в статье стала не актуальна. Порывшись в интернете, я нашел таки этот архив со скриптами, да еще и более новую версию.
Создаем папку, скачиваем, и распаковываем:
cd /var/www
sudo wget http://tmp.mikhe.ru/scan_1.2_Beta1.tar
sudo tar -xvf 'scan_1.2_Beta1.tar'
sudo rm 'scan_1.2_Beta1.tar'
cd /var/www/scan
sudo chmod 777 scans
Последней командой я открыл свободный доступ к папке, где будут лежать сканы. Но мне нужно было чтобы сканы сохранялись в другом месте, в "reserv", о котором упоминалось выше. Чтобы не править скрипты, я просто удалил существующую папку scans, создал в резерве, и указал символьную ссылку.
sudo rm -rf scans
sudo mkdir /home/reserv/scans
sudo ln -s /home/reserv/scans /var/www/scan
sudo chmod 777 /var/www/scan/scans
В принципе можно заходить на сервер через браузер на
http://server-ip/scan, и возможно даже принтер сразу определится. Если нет, можно попробовать его найти в разделе "
Configure". У меня этого не произошло, поэтому пришлось допиливать sane на сервере, заодно сделал видимым сканер не только для браузера, но и для локального xsane (GUI версия программы сканирования). Плясал я уже с помощью
другой статьи.
Правим конфиг:
sudo nano /etc/init.d/saned
Находим и правим строки для автоматического запуска демона от созданного ранее пользователя (по умолчанию стоит "no" и "saned"):
RUN=yes
RUN_AS_USER=www-data
Те же строки надо вписать в другой конфиг:
sudo gedit /etc/default/saned
Не факт что демон
saned будет стартовать автоматически и виден в сети, поэтому устанавливаем сетевой демон
xinetd:
sudo apt-get install xinetd
И добавляем в файлик содержание:
sudo nano /etc/xinetd.d/saned
service sane-port
{
disable = no
socket_type = stream
protocol = tcp
user = www-data
wait = no
server = /usr/sbin/saned
}
Теперь впишем пользователей, кто может получить доступ к сканеру не только из браузера. Укажем диапазон ip адресов в конце файла:
$sudo nano /etc/sane.d/saned.conf
192.168.1.100/150
Приступим к танцу с бубном =). Как говорится в этой статье, сканер может быть по прежнему недоступен для сети, или все очень криво будет работать и то только от рута. Чтобы этого избежать, и свободно можно было подключаться, надо в sane дописать правило для нашего принтера. Но проблема в том, что моего принтера в списке не обнаружилось, поэтому пришлось создать отдельное. Вот что я делал:
sudo sane-find-scanner
Команда выдала:
found USB scanner (vendor=0x03f0 [hp], product=0x3f11 [psc 1310 series ]) at libusb:002:008
Итого, у нас принтер
0x3f11 от фирмы
0x03f0. Заходим в конфиг:
sudo nano /lib/udev/rules.d/40-libsane.rules
И добавляем строчки для нашего принтера куда-нибудь, где перечисляются другие:
# Hewlett-Packard PSC 1315
ATTRS{idVendor}=="0x03f0", ATTRS{idProduct}=="0x3f11", MODE="0664", GROUP="saned", ENV{libsane_matched}="yes"
# Hewlett-Packard PSC 1315
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="3f11", MODE="0664", GROUP="saned", ENV{libsane_matched}="yes"
Не знаю, на сколько это правильно, но это работает. Я специально продублировал строчку, указав по разному значение вендора и продукта. Первый вариант то, что показывает
sane-find-scanner, а второй, как это записано в
40-libsane.rules.
Чтобы все вошло в силу, ребутаем на всякий случай сервак:
sudo reboot
После этого принтер стал виден из браузера, а чтобы его увидел xsane на другом локальном компьютере, надо добавить ip сервера в:
sudo nano /etc/sane.d/net.conf
После этого запускаем xsane на клиенте, и радуемся, как он находит сканер, стоящий в кладовке; или хоть с телефона заходим по wi-fi на веб-сервис, и сканируем им =). В общем все, вроде ничего не упустил.
Автор: Алексей Хроменков http://lexisubuntu.blogspot.ru/2012/06/ubuntu-server-12.html