Долго меня мучала идея из старенького 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
Комментарии (17)
Sad_Bro
14.05.2017 18:16+1у меня с год работает следующая конфигурация,
wifi роутер Hame
https://4pda.ru/forum/index.php?showtopic=377187,
openwrt
p910nd Printer Server
старый samsung ml2015zedalert
15.05.2017 12:53У меня примерно тоже самое, только на карманном роутере TP-Link 3020, единственный минус — уровень чернил не показывается. Зато стоил он всего 600р.
DarkDemon
14.05.2017 20:05Аналогично Xerox мфу формата А3, роутер tplink mr3020+ флеш 16Мб, openwrt, cups.
Работает более 2 лет.
timur-davletshin
14.05.2017 20:15+1Raspberry PI с server-side драйверами очень нетороплив и для практических целей малопригоден, а использование его с client-side драйверами похоже немного на стрельбу по воробьям из пушки. Хотя, если нужна поддержка IPv6 и последнаяя версия IPP/шифрование, то как вариант можно рассматривать (принт-серверы обычно убоги в этом плане). Как вариант, можно прикрутить Google Cloud Print Connector — сам так и использую. Скорость при печати с Android не критична особо, а с рабочих мест использую client-side драйверы.
electronus
14.05.2017 22:05Кстати, если только 1022 принтер, то он поддерживается самыми примитивными хардверными принт-серверами. 1018 — нет. Это из личного опыта.
Спасибо за подсказку о raw режиме, элегантно.timur-davletshin
14.05.2017 22:27+1В не raw-режиме ренедринг bitmap'ов Ghostscript'ом на ARM'е — то ещё удовольствие. Хотя, я использую turboprint и там можно включить многопроцессорный режим (на RPI2 и старше 4 ядра) и уже можно со скрипом использовать такую конфигурацию. Хотя, зависит от принтера, чёрно-белые лазерники — попроще нагрузка, но это не мой случай.
ShiawasenaHoshi
14.05.2017 23:00Принтер 1102s, но я в двух местах написал 1022 (уже поправил) — постоянно путаю их. Драйвер при этом должен быть 1022 (как и указано в посте) — видимо не только я путаюсь в этих цифрах :)
electronus
14.05.2017 23:151102 это более новый аппарат. Я же все ностальгирую по 1010 1012 1018 1020 1022. Из них был только 1018 неспособен работать с тупыми принт-серверами… Сам владею 1012, еще нет чипов на картридже, и сам картридж 12А всё еще продается вовсю
alexws54tk
15.05.2017 21:43Тоже владелец 1018, неприхотливый семейный труженик, вот уже много лет. Почти сразу купил для него пару 12Х картриджей, заправляю раз в два-три года, при том, что печатать по учёбам приходится много.
hp6812er
15.05.2017 00:48У меня дома hp1010. Купил для него на сайте объявлений роутер с usb портом за 600р., пять минут возни с прошивкой и принтсервер готов). Малинки для этого было жалко.
ShiawasenaHoshi
15.05.2017 11:00Убивать творческий порыв ради шкурных интересов (экономия времени) не наш стайл :) А если серьезно, то у меня просто уже было всё необходимое добро и не хотелось, чтоб оно пропадало
alexws54tk
16.05.2017 05:28Вопрос к автору: рас уж для «сканера» всё равно пришлось ставить родные дрова от HP, почему для 1102 их не использовали?
ShiawasenaHoshi
16.05.2017 13:52Вообще, мысль логичная. Мануал написан отчасти в хронологическом порядке выполнения мною действий и вначале (до настройки сканера) я еще не ставил HPLIP.
Сейчас попробовал переключится на родной HP драйвер в CUPS и не вижу такового (где-то писали, что для этого все равно понадобится ставить что-то от Foomatic). С другой стороны, вот здесь рекомендуют именно фуматик-драйвер http://www.openprinting.org/printer/HP/HP-LaserJet_Pro_P1102
Если вы воспользуетесь моей инструкцией без использования Foomatic и у вас всё получится, то поделитесь опытом, пожалуйста. Дополним хабрапост.
UksusoFF
Через что можно сканировать на Windows в такой конфигурации?
praeivis
XSane WIN32
eugenebabichenko
Но это придётся делать для каждого клиента в сети, легче на той же RPi сделать принтер доступным по SMB (пример из арчевики)
Это если нужно обнаружение, а вообще работает просто добавление принтера через IPP (выражается в копировании на ссылки страницу принтера из админки).
alexws54tk
Оливер же закопал Вин версию
И рядом ешё:
Не, я конечно нагуглил несколько xsane-win32-0.99х.zip, и даже с контрольными суммами, но так как нагугленные версии разные, разные и контрольные суммы, а проверить аутентичность никак.