Долго меня мучала идея из старенького RPI сделать принт-сервер (удаленная печать и сканирование) и наконец я до этого добрался.
Исходим из того, что у нас есть набор из RPI, флешки с Raspbian, Wi-Fi адаптера, принтера HP LaserJet Pro 1102, МФУ HP Deskjet F2180 и usb-хаба. Основная машина (ББ), которая будет использовать принт-сервер живет на Linux (впрочем, отличия в использовании для Windows будут минимальны).
Подготовка
Дабы не коннектиться к RPI по проводу, добавим автоподключение по wi-fi. Для этого вставим флешку с Raspbian в ББ и зайдем на /boot, где создадим 2 файла:
- ssh (пустой) — включает ssh;
- wpa_supplicant.conf, который содержит данные для подключения к нашему wi-fi:
network={ ssid="YOUR_SSID" psk="YOUR_PASSWORD" key_mgmt=WPA-PSK }
В RPI вставляем флешку, wi-fi адаптер (напрямую, а не в хаб — он для принтеров), подключаем питание. Через минуту залазим на wi-fi роутер, чтобы узнать адрес, что он выдал RPI, и заходим на него по SSH.
Выполним конфигурацию RPI запустив raspi-config.
Если вас не устраивает адресация по IP, то можно настроить имя хоста, чтоб работать через mDNS. Пишем имя в /etc/hostname и в /etc/hosts например, printserver.local, коммитим изменения sudo /etc/init.d/hostname.sh и уходим в reboot. После перезагрузки RPI через mDNS будет доступен по адресу printserver.local. Для Linux mDNS работает по умолчанию, а для Windows надо поставить службу печати Bonjour.
Ставим CUPS
Сначала выполним
sudo apt-get update && sudo apt-get upgrade
Затем установим CUPS
sudo apt-get install cups
Чтобы можно было управлять принтерами в CUPS надо добавить какого-нибудь юзера в группу lpadmin. Исходим из того, что мы работаем под дефолтным юзера — pi. Вот его и добавим:
sudo usermod -a -G lpadmin pi
Поскольку принт-сервер находится в домашней сети, разрешаем ему быть доступным для всех, а затем рестартим:
sudo cupsctl --remote-any
sudo /etc/init.d/cups restart
В принципе у нас есть готовый CUPS, который доступен по адресу https://printserver.local:631/ и, вероятно, для многих принтеров он подойдет и таким, но не в нашем случае.
Принтер HP LaserJet Pro 1102
Для этого зверя в стандартной поставке подходящих драйверов не нашлось. Пришлось поставить драйвер от foomatic:
sudo apt-get install printer-driver-foo2zjs-common printer-driver-foo2zjs
и выбрать другой драйвер для этого принтера в админке: HP LaserJet 1022 Foomatic/foo2zjs-z1
Он стал печатать, но очень медленно и иногда тупо пропуская мои команды.
Я оставил конфигурацию с этим драйвером, поскольку она позволяет печатать с любого устройства без установки драйверов, хоть и долго и в основном одностранично. Для больших же объемов пришлось настроить другую конфигурацию того же принтера в CUPS.
Мы воспользуемся xinetd, чтоб сэмулировать HP-jetdirect-принтер. Для начала установим xinetd:
sudo apt-get install xinetd
Теперь сконфигурируем наш сервис для xinetd:
service hp-jetdirect
{
socket_type = stream
protocol = tcp
wait = no
user = pi #наш юзер здесь
server = /usr/bin/lp
server_args = -d HP_LaserJet_Professional_P1102_direct -o raw
groups = yes
disable = no
}
HP_LaserJet_Professional_P1102_direct — то, как будет называться профиль jet-direct-принтера в CUPS.
Запустим:
/etc/rc.d/xinetd start
Теперь проходим в админку и создаем новый принтер с именем HP_LaserJet_Professional_P1102_direct. Главное выбрать вот этот драйвер: Local Raw Printer. В итоге наш принтер будет иметь сетевую ссылку https://printserver.local:631/printers/HP_LaserJet_Professional_P1102_direct, которую нужно использовать при настройке печати на ББ.
Всё, теперь главное установить драйвер на ту машину, с которой печатаем и вуаля — большие объемы печатаются с нормальной скоростью.
Сканер HP Deskjet F2180
Вообще-то, это не сканер, а МФУ, но я его используют только как сканер.
Для сканирования нам нужен sane
sudo apt-get install sane
Затем воспользуемся утилитой, что позволяет посмотреть, что у нас есть за сканеры
sudo sane-find-scanner
В случае с HP Deskjet F2180 сканера вы, скорее всего, не увидите.
Ставим драйвера от hp:
sudo apt-get install hplip
Теперь повторим поиск:
found USB scanner (vendor=0x0424, product=0xec00) at libusb:001:003
Отлично, теперь попробуем глянуть может ли наш сканер принимать команды
pi@PrintServer:~ $ sudo scanimage -L
device `hpaio:/usb/Deskjet_F2100_series?serial=CN78R4R3PB04TK' is a Hewlett-Packard Deskjet_F2100_series all-in-one
то есть, на RPI сканер работает.
Далее на удаленном линухе установливаем sane и sane-utils и лезем в /etc/sane.d/net.conf, чтобы в самом низу добавить адрес RPI
К сожалению, на удаленной машине sudo scanimage -L выдал.
No scanners were identified. If you were expecting something different, check that the scanner is plugged in, turned on and detected by the sane-find-scanner tool (if appropriate). Please read the documentation which came with this software (README, FAQ, manpages).
Просканировав порты RPI увидел, что порт 6566 закрыт. Что ж, еще немного поконфигурируем xinetd
sudo nano /etc/xinetd.d/sane-port
Вставляем
service sane-port
{
socket_type = stream
port = 6566
wait = no
user = root
group = root
server = /usr/sbin/saned
disable = no
}
Выходим, сохраняем и рестартим сервис:
sudo service xinetd restart
Повторяем на удаленной машине sudo scanimage -L и видим
device `net:printserver.local:hpaio:/usb/Deskjet_F2100_series?serial=CN78R4R3PB04TK' is a Hewlett-Packard Deskjet_F2100_series all-in-one
То что надо. Можно приступать к сканированию запустив xsane.
Спасибо за внимание.
upd praeivis xsane есть под Windows
Использовано
http://www.raspberry-pi-geek.com/Archive/2013/01/Converting-the-Raspberry-Pi-to-a-wireless-print-server
https://samhobbs.co.uk/2014/07/raspberry-pi-print-scanner-server
https://blog.johanv.org/posts/old/node-195.html
http://lib.ru/unixhelp/linuxset.txt