Беспроводной сканер на OpenWRT на примере Samsung SCX-3400
- Подробности
- Категория: Внешние устройства
- Опубликовано: 13 января 2018
- Просмотров: 15999
Не успел я установить и протестировать 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 и пока полностью им доволен.
1. Установка необходимых пакетов
opkg update
Возможность сканирования в Linux, да и в OpenWRT в частности осуществляется при помощи универсального интерфейса сканирования Sane. На его базе, скорее всего есть программы под любую ОС, которые в случае поддержки железа сканера в Sane, помогут вам его запустить. Для начала смотрим на странице Sane поддерживается ли наш сканер и к какому типу железа и встроенного в него ПО он относится. Мой МФУ Samsung SCX-3400 оказался в числе поддерживаемых устройств и был классифицирован как типовое мфу от Xerox.
Значит сначала ставим пакет поддержки МФУ нашего типа
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 в меню Система - Загрузка, листаем вниз, в форму Локальная загрузка набиваем ту же команду
Что собственно одно и то же. Это запустит демона сетевой службы сканирования в фоновом режиме. Теперь сканируйте в свое удовольствие откуда хотите. Если остались вопросы - задаем их в комментариях.
Комментарии
По умолчанию в OpenWrt Chaos Calmer локальный трафик (зона lan) не блокируется - как от локальных хостов к роутеру, так и обратно. Добавлять правила в iptables необходимо, если планируется подключаться извне (зона wan). А приведённое правило для "диапазона IP 192.168.0.1/24 из зоны wan" выглядит странновато. ;)
Ну так получилось, что у меня TP-LINK MR3020 подключен к сети через Wi-Fi к роутеру TP-LINK-WR842N, который в свою очередь получает инет от вай фай свистка в Hilink режиме. У меня WAN не в том смысле немного используется, хотя в большинстве случаев, конечно, доступ нужно открывать только на диапазон зоны локальной сети
Подскажите куда прописать ,чтоб из другой подсети сканировать?
Сделал все по вашей инструкции, только для Canon MF3228 с использованием sane-pixma. Появилась проблема такого рода: сканируется только одна страница, запускаю scanimage чтобы сканировать вторую - все виснет без какой-либо реакции со стороны МФУ. Помогает только переткнуть usb провод от МФУ, но опять только на одну страницу. Подскажите, пожалуйста, в какую сторону копать?
P.S. используется usb-хаб без внешнего питания, может быть проблема в нем?
scanimage -L сканер видит.
Дело в том, что даже команда
scanimage --format=png --resolution=150 > scan.png
выполненная с роутера через телнет не выполняется повторно.
scanimage -Lпосле первого успешного сканирования видит сканер или нет? Или команда не выводит вообще никакого сообщения
root@OpenWrt:/# scanimage -L
device `pixma:04A92684_SBF750204681A' is a CANON Canon imageCLASS MF3240 multi-function peripheral
Цитирую /etc/hotplug.d/usb/25-scanner:
ответ несколько другой не 003, а 005,, потом молчок, нет девайса
В этом и проблема, на scanimage -L один раз ответ получаю и все. на команды sane-find-scanner - not found,
scanimage --format=png --resolution=150 > scan.png - not SANE devices found. При этом, при этих обращениях принтер оживает, но не более. Такое ощущение, что где-то на полпути зависает. Даже не знаю куда копать. Может Sane через Xinetd попробовать настроить? На форуме openwrt сказали. что версия 19.07 какая-то ошибка 4pda.ru/forum/index.php?s=&showtopic=911457&view=findpost&p=95685694. так ли это?
vi /etc/sane.d/saned.conf
192.168.0.1/24
data_portrange = 30000 - 30100
должны быть незакоментированы!!! (снять решетки)
Без прописанного tcp и порта 9100, не хочет выполнять команду scanimage -L много раз, после первого обнаружения пишет нет девайса, воспользуйтесь sane-find-....
Думаете, что система и при прописанном номере девайса и вендор должна срабатывать, главное, чтобы сканирование завершалось?
А что это такое?
сканирования*