image


Долго меня мучала идея из старенького 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)


  1. UksusoFF
    14.05.2017 17:27

    Через что можно сканировать на Windows в такой конфигурации?


    1. praeivis
      14.05.2017 20:15
      +2

      1. eugenebabichenko
        15.05.2017 17:58
        +1

        Но это придётся делать для каждого клиента в сети, легче на той же RPi сделать принтер доступным по SMB (пример из арчевики)
        Это если нужно обнаружение, а вообще работает просто добавление принтера через IPP (выражается в копировании на ссылки страницу принтера из админки).


      1. alexws54tk
        16.05.2017 05:58

        Оливер же закопал Вин версию


        Please note that there is no support for the windows binary and that it is some years old!
        The downloads for xsane-win32 make too much traffic for my server, so please use an other download location for xsane-win32 downloads.

        И рядом ешё:


        I will remove the binaries when they create too much traffic or when I have to do too much support for them. There is no warranty for these binaries, you use it on your own risk!

        Не, я конечно нагуглил несколько xsane-win32-0.99х.zip, и даже с контрольными суммами, но так как нагугленные версии разные, разные и контрольные суммы, а проверить аутентичность никак.


  1. Sad_Bro
    14.05.2017 18:16
    +1

    у меня с год работает следующая конфигурация,
    wifi роутер Hame
    https://4pda.ru/forum/index.php?showtopic=377187,
    openwrt
    p910nd Printer Server
    старый samsung ml2015


    1. zedalert
      15.05.2017 12:53

      У меня примерно тоже самое, только на карманном роутере TP-Link 3020, единственный минус — уровень чернил не показывается. Зато стоил он всего 600р.


  1. DarkDemon
    14.05.2017 20:05

    Аналогично Xerox мфу формата А3, роутер tplink mr3020+ флеш 16Мб, openwrt, cups.
    Работает более 2 лет.


  1. timur-davletshin
    14.05.2017 20:15
    +1

    Raspberry PI с server-side драйверами очень нетороплив и для практических целей малопригоден, а использование его с client-side драйверами похоже немного на стрельбу по воробьям из пушки. Хотя, если нужна поддержка IPv6 и последнаяя версия IPP/шифрование, то как вариант можно рассматривать (принт-серверы обычно убоги в этом плане). Как вариант, можно прикрутить Google Cloud Print Connector — сам так и использую. Скорость при печати с Android не критична особо, а с рабочих мест использую client-side драйверы.


  1. electronus
    14.05.2017 22:05

    Кстати, если только 1022 принтер, то он поддерживается самыми примитивными хардверными принт-серверами. 1018 — нет. Это из личного опыта.
    Спасибо за подсказку о raw режиме, элегантно.


    1. timur-davletshin
      14.05.2017 22:27
      +1

      В не raw-режиме ренедринг bitmap'ов Ghostscript'ом на ARM'е — то ещё удовольствие. Хотя, я использую turboprint и там можно включить многопроцессорный режим (на RPI2 и старше 4 ядра) и уже можно со скрипом использовать такую конфигурацию. Хотя, зависит от принтера, чёрно-белые лазерники — попроще нагрузка, но это не мой случай.


    1. ShiawasenaHoshi
      14.05.2017 23:00

      Принтер 1102s, но я в двух местах написал 1022 (уже поправил) — постоянно путаю их. Драйвер при этом должен быть 1022 (как и указано в посте) — видимо не только я путаюсь в этих цифрах :)


      1. electronus
        14.05.2017 23:15

        1102 это более новый аппарат. Я же все ностальгирую по 1010 1012 1018 1020 1022. Из них был только 1018 неспособен работать с тупыми принт-серверами… Сам владею 1012, еще нет чипов на картридже, и сам картридж 12А всё еще продается вовсю


        1. alexws54tk
          15.05.2017 21:43

          Тоже владелец 1018, неприхотливый семейный труженик, вот уже много лет. Почти сразу купил для него пару 12Х картриджей, заправляю раз в два-три года, при том, что печатать по учёбам приходится много.


  1. hp6812er
    15.05.2017 00:48

    У меня дома hp1010. Купил для него на сайте объявлений роутер с usb портом за 600р., пять минут возни с прошивкой и принтсервер готов). Малинки для этого было жалко.


    1. ShiawasenaHoshi
      15.05.2017 11:00

      Убивать творческий порыв ради шкурных интересов (экономия времени) не наш стайл :) А если серьезно, то у меня просто уже было всё необходимое добро и не хотелось, чтоб оно пропадало


  1. alexws54tk
    16.05.2017 05:28

    Вопрос к автору: рас уж для «сканера» всё равно пришлось ставить родные дрова от HP, почему для 1102 их не использовали?


    1. ShiawasenaHoshi
      16.05.2017 13:52

      Вообще, мысль логичная. Мануал написан отчасти в хронологическом порядке выполнения мною действий и вначале (до настройки сканера) я еще не ставил HPLIP.
      Сейчас попробовал переключится на родной HP драйвер в CUPS и не вижу такового (где-то писали, что для этого все равно понадобится ставить что-то от Foomatic). С другой стороны, вот здесь рекомендуют именно фуматик-драйвер http://www.openprinting.org/printer/HP/HP-LaserJet_Pro_P1102
      Если вы воспользуетесь моей инструкцией без использования Foomatic и у вас всё получится, то поделитесь опытом, пожалуйста. Дополним хабрапост.