OpenWRT.su

Open.Wireless.Super and LEDE

Беспроводной сканер на OpenWRT на примере Samsung SCX-3400

Беспроводной сканер на OpenWRT на примере Samsung SCX-3400

Не успел я установить и протестировать OpenWRT принт-сервер p910nd на своем МФУ Samsung SCX-3400, как захотелось научить его также сканированию документов и изображений по сети. Для решения данной задачи вам не хватит дисковой памяти, если у вас на роутере всего 4 мб из которых после установки OpenWRT всего 300кб свободно, поэтому сначала расширьте ее путем подключения внешней overlay флешки. После чего можно приниматься за дело. Запускать беспроводной сканер будем на базе роутера TP-LINK MR3020 с Chaos Calmer 15.05.1 OpenWRT. 

Кроме дисковой памяти вам, конечно, не хватит usb порта. Лучше всего взять usb-хаб с внешним питанием, так как кто знает, какие еще энергопотребляющие устройства вы будете подключать к своему роутеру в будущем. Я взял себе 4-х портовый usb-хаб с внешним питанием GiNZZU GR-384UAB и пока полностью им доволен. 

Беспроводной сканер на OpenWRT на примере Samsung SCX-3400

1. Установка необходимых пакетов

opkg update

Возможность сканирования в Linux, да и в OpenWRT в частности осуществляется при помощи универсального интерфейса сканирования Sane. На его базе, скорее всего есть программы под любую ОС, которые в случае поддержки железа сканера в Sane, помогут вам его запустить. Для начала смотрим на странице Sane поддерживается ли наш сканер и к какому типу железа и встроенного в него ПО он относится. Мой МФУ Samsung SCX-3400 оказался в числе поддерживаемых устройств и был классифицирован как типовое мфу от Xerox. 

Беспроводной сканер на OpenWRT на примере Samsung SCX-3400 

Значит сначала ставим пакет поддержки МФУ нашего типа

opkg install sane-xerox_mfp

Он потянет за собой зависммости, это нормально

Installing libsane (1.0.25-1) to root... 
nstalling libusb-compat (0.1.4-1) to root...
Installing libusb-1.0 (1.0.19-1) to root... 
Installing libpthread (0.9.33.2-1) to root... 
Installing librt (0.9.33.2-1) to root... 

Далее ставим пакет самого sane, он потянет за собой поддержку библиотек изображений 

opkg install sane-frontends  

Installing libjpeg (9a-1) to root...
Installing libpng (1.2.56-1) to root...
Installing zlib (1.2.8-1) to root...

Ну и заодно поставим демона sane

opkg install sane-daemon

И перезагрузим наш роутер

reboot

2. Настройка среды Sane в OpenWRT

Попробуем найти наш сканер

sane-find-scanner

Если OpenWRT видит наш сканер, то мы увидим сообщение типа

found USB scanner (vendor=0x04e8, product=0x344f [SCX-3400 Series]) at libusb:00 1:003

Далее посмотрим виден ли наш драйвер в Sane

scanimage -L

Мое мфу было проснулось, но в ответ была получена фига

No scanners were identified...

Как оказалось, что именно моего уникального номера оборудования Vendor и Product в конфигах sane-xerox.mfp не оказалось. Тут я уже решил подправить ручками:

vi /etc/sane.d/xerox_mfp.conf

Переходим в режим редактировать при помощи клавиши

i

Самой первой свободной незакомментированной строкой пишем usb и и vendor и product номера нашего принтера из ответа чуть выше

usb 0x04e8 0x344f

Выходим из режима редактирования при помощи клавиши Esc, cимволом двоеточия указываем редактору что нужно сохранить изменения w и выйти q

:wq

Пробуем опять найти сканер в Sane

scanimage -L

И удовлетворяющий меня ответ на этот раз был

device `xerox_mfp:libusb:001:003' is a Samsung SCX-3400 Series multi-function peripheral

Уже веселее. Раз Sane увидел, можно попробовать посканировать пока без сети

scanimage --format=png --resolution=150 > scan.png

В результате в текущей папке у вас должен появиться отсканированный файл с разрешением 150 точек в формате png.

Далее немного оптимизируем загрузку Sane. Для начала отключим поддержку тех драйверов принтеров, которых у нас и так нет. Для этого открываем файл /etc/sane.d/dll.conf и комментируем все строчки кроме net и драйверов вашего мфу, у меня остались только net и мой xerox_mpf. Таким образом при запуске Sane не будет перебирать список, а сразу подцепит только нужные там файлы и начнет сканирование. 

На этом считаем оболочку рабочей. Далее нужно разобраться со сканированием по сети. В данном случае роутер будет своеобразным сервером, к которому будут подцепляться клиенты. Причем последние могут быть под управлением разных ОС. 

Во всех официальных руководствах и man страницах пакетов все в один голос трубят, что нужно организовывать раздачу через пакет xinetd, который позволяет подгружать демон sane при обращении к сканеру, и так же успешно его выгружать когда клиент заканчивает пользоваться сетевым сканером. Xinetd вместо Saned слушает порт 6566. Я честно не люблю посредников, какими бы они были полезными. Поэтому я в первую очередь настроил сетевое сканирование при помощи одного только демона saned. 

3. Настройка для сканирование по сети через демона Saned в OpenWRT

Указываем IP адреса клиентов, которые будут иметь доступ к демону saned через сеть:

vi /etc/sane.d/saned.conf

В виду того, что всем домашним устройствам в моей сети присвоены постоянные ip адреса, я просто их перечислил

192.168.0.101
192.168.0.102
192.168.0.103
192.168.0.104

Можете указать сразу всю свою подсеть чтобы не парится

192.168.0.1/24

Примеры использования есть в самом файле. 

Далее нужно открыть порт 6566 в firewall. Но Sane также нужен еще диапазон портов для обмена информацией с клиентом. Если вы откроете только один порт 6566, то на начале сканирования постоянно будите терять связь с "сервером". Сначала укажем sane какие порты ему по доброте душевной мы выдаем для его дел, для этого в этом же конфиг файле saned.d задаем диапазон из 100 портов:

data_portrange = 30000 - 30100 

Сохраняем конфиг и выходим. 

Открывать сто портов абы кому не очень хорошая идея, поэтому надо позаботиться, чтобы в межсетевом экране доступ к ним имели только клиенты-члены нашей подсети. У меня доступ к моему роутеру к определенным портам имею все айпи из диапазона 192.168.0.1-192.168.0.255

Далее проверяем обозначенность порта 6566 как порта для saned. 

cat /etc/services | grep sane

sane-port 6566/udp
sane-port 6566/tcp sane saned

Если какой то из строк нет - добавляем вручную через редактор нужную строчку в /etc/services

Так как разработчики изначально подточили демона saned под xinetd у него нет своей отдельной службы запуска, как например, у принт-свервера p910nd. Запустим его вручную в фоновом режиме

saned -a

Далее проверяем случает ли порт наш помощник

netstat -l | grep sane
tcp 0 0 :::sane-port :::* LISTEN

Это значит, что порт на прослушке и ждет команду. Таким образом можно попробовать с клиентской машины из сети произвести сканирования. Разнообразие клиентов зашкаливает, выбрать тут так-то есть из чего из списка на официальном сайте Sane

Я же решил попробовать посканировать прямо на Android смартфон при помощи приложения для сканирования по сети SANEDroid, о том как это работает можно глянуть ниже:

 

Под Windows достаточно неплохо справляется SaneTwain, хотя и давно не обновлялся. Каждый найдет себе приложение по душе, есть даже порт XSane под Windows. В любом случае обзор клиентов - это тема отдельной статьи.

4. Добавляем демона saned в автозагрузку

Так как своей службы у него нет - запихаем его в пользовательский раздел автозагрузки. Для этого в файл /etc/rc.local перед exit 0 добавляем строчку

saned -a

Либо в LuCI в меню Система - Загрузка, листаем вниз, в форму Локальная загрузка набиваем ту же команду

Что собственно одно и то же. Это запустит демона сетевой службы сканирования в фоновом режиме. Теперь сканируйте в свое удовольствие откуда хотите. Если остались вопросы - задаем их в комментариях.

Комментарии  

salexa
0 # salexa 09.02.2018 02:06
> ...надо позаботиться, чтобы в межсетевом экране доступ к ним имели только клиенты-члены нашей подсети.
По умолчанию в OpenWrt Chaos Calmer локальный трафик (зона lan) не блокируется - как от локальных хостов к роутеру, так и обратно. Добавлять правила в iptables необходимо, если планируется подключаться извне (зона wan). А приведённое правило для "диапазона IP 192.168.0.1/24 из зоны wan" выглядит странновато. ;)
Ответить | Ответить с цитатой | Цитировать
Wrtman
0 # Wrtman 09.02.2018 16:09
Цитирую salexa:
> А приведённое правило для "диапазона IP 192.168.0.1/24 из зоны wan" выглядит странновато. ;)

Ну так получилось, что у меня TP-LINK MR3020 подключен к сети через Wi-Fi к роутеру TP-LINK-WR842N, который в свою очередь получает инет от вай фай свистка в Hilink режиме. У меня WAN не в том смысле немного используется, хотя в большинстве случаев, конечно, доступ нужно открывать только на диапазон зоны локальной сети
Ответить | Ответить с цитатой | Цитировать
Wrtman
0 # Wrtman 09.02.2018 16:29
Ну так то да, конечно, в общих чертах нужно wan заменить на lan, спасибо
Ответить | Ответить с цитатой | Цитировать
Антон
0 # Антон 15.05.2018 16:27
День добрый!
Сделал все по вашей инструкции, только для Canon MF3228 с использованием sane-pixma. Появилась проблема такого рода: сканируется только одна страница, запускаю scanimage чтобы сканировать вторую - все виснет без какой-либо реакции со стороны МФУ. Помогает только переткнуть usb провод от МФУ, но опять только на одну страницу. Подскажите, пожалуйста, в какую сторону копать?
P.S. используется usb-хаб без внешнего питания, может быть проблема в нем?
Ответить | Ответить с цитатой | Цитировать
Wrtman
0 # Wrtman 15.05.2018 22:15
Цитирую Антон:
День добрый!
запускаю scanimage чтобы сканировать вторую - все виснет без какой-либо реакции со стороны МФУ.
Нужно сначала понять что происходит со связью. После корректного сканирования первой страницы scanimage -L видит сканер? или он отваливается?
Ответить | Ответить с цитатой | Цитировать
Антон
0 # Антон 18.05.2018 09:08
Цитирую Wrtman:
Нужно сначала понять что происходит со связью. После корректного сканирования первой страницы scanimage -L видит сканер? или он отваливается?
scanimage -L сканер видит.
Ответить | Ответить с цитатой | Цитировать
Wrtman
0 # Wrtman 15.05.2018 22:18
Цитирую Антон:

P.S. используется usb-хаб без внешнего питания, может быть проблема в нем?
Это самая простая проблема которую можете отсечь просто попробовав хаб с питанием. Хотя у сканера есть свое питание, поэтому 99 процентов что проблема не в нем. Скорее всего программный глюк, scanimage корректно не завершает сессию общения со сканером. Попробуйте другую прогу хоть сетевую
Ответить | Ответить с цитатой | Цитировать
Антон
0 # Антон 18.05.2018 09:11
Цитата:
Попробуйте другую прогу хоть сетевую
Не подскажете, какую?
Ответить | Ответить с цитатой | Цитировать
Wrtman
0 # Wrtman 18.05.2018 11:12
Разнообразие клиентов зашкаливает, выбрать тут так-то есть из чего из списка на официальном сайте Sane www.sane-project.org/sane-frontends.html
Ответить | Ответить с цитатой | Цитировать
Антон
0 # Антон 18.05.2018 13:36
Не сразу понял, что речь о клиенте.
Дело в том, что даже команда
scanimage --format=png --resolution=150 > scan.png
выполненная с роутера через телнет не выполняется повторно.
Ответить | Ответить с цитатой | Цитировать
Wrtman
0 # Wrtman 18.05.2018 19:58
Цитирую Антон:
Не сразу понял, что речь о клиенте.
Дело в том, что даже команда
scanimage --format=png --resolution=150 > scan.png
выполненная с роутера через телнет не выполняется повторно.

scanimage -Lпосле первого успешного сканирования видит сканер или нет? Или команда не выводит вообще никакого сообщения
Ответить | Ответить с цитатой | Цитировать
Антон
0 # Антон 19.05.2018 09:50
Видит
root@OpenWrt:/# scanimage -L
device `pixma:04A92684_SBF750204681A' is a CANON Canon imageCLASS MF3240 multi-function peripheral
Ответить | Ответить с цитатой | Цитировать
salexa
0 # salexa 10.07.2018 10:57
Кстати, если маршрутизатор используется не исключительно для сканирования, а сканер включен/подключен не постоянно, то имеет смысл и saned из экономии ресурсов запускать только на время, пока включен сканер:
Цитирую /etc/hotplug.d/usb/25-scanner:
#!/bin/sh
VID_PID="4e8/344f" # SCX-3400 Series
SERVICE="/usr/sbin/saned -a"; PID="/tmp/run/saned.pid"

[ "$VID_PID" != "$(echo $PRODUCT | cut -d/ -f1-2)" ] && exit 0
[ "$ACTION" = add ] && $SERVICE
[ "$ACTION" = remove ] && kill $(cat "$PID")
Ответить | Ответить с цитатой | Цитировать
Linux_addict
+1 # Linux_addict 29.08.2018 18:02
поставить xinetd и забыть
Ответить | Ответить с цитатой | Цитировать
Малый
0 # Малый 15.10.2018 23:34
openwrt 18.06.1 в пакетах команды sane-find-scanner нет - not found. Как быть?
Ответить | Ответить с цитатой | Цитировать
Wrtman
0 # Wrtman 16.10.2018 23:04
Ничего страшного, главное чтобы scanimage -L определял сканер
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий

Если вы хотите получать сообщения c ответами на ваши комментарии - то укажите свой настоящий e-mail. Если же вы тут проездом, чтобы оставить комментарий укажите в поле email no@openwrt.su