Сканирование документов по сети
Устанавливаемый драйвер или прямой доступ
В настоящее время распространены четыре типа драйверов: TWAIN, ISIS, SANE и WIA. По сути, эти драйвера выполняют роль интерфейса между приложением и низкоуровневой библиотекой от производителя, которая связывается с конкретной моделью.
Упрощенная архитектура соединения со сканером
Обычно подразумевается, что сканер подключен напрямую к компьютеру. Однако, никто не ограничивает протокол между низкоуровневой библиотекой и устройством. Это может быть и TCP/IP. Таким образом сейчас работает большинство сетевых МФУ: сканер виден как локальный, но соединение идет через сеть.
Плюс у такого решения в том, что приложению все равно как именно сделано подключение, главное видеть знакомый TWAIN, ISIS или другой интерфейс. Не нужно реализовывать специальную поддержку.
Но и минусы очевидны. Решение завязано на декстопную ОС. Мобильные устройства сразу выпадают из поддержки. Второй минус, драйверы могут работать нестабильно на сложных инфраструктурах, например, на терминальные серверах с тонкими клиентами.
Выходом из положения будет поддержка прямого подключения к сканеру по HTTP/RESTful протоколу.
TWAIN Direct
TWAIN Direct был предложен консорциумом TWAIN Working Group как вариант бездрайверного доступа.
Основная идея в том, что вся логика переносится на сторону сканера. А сканер предоставляет доступ по REST API. Дополнительно спецификация содержит описание публикации устройства (autodiscovery). Выглядит хорошо. Для администратора это избавление от возможных проблем с драйверами. Поддержка всех устройств, главное, чтобы было совместимое приложение. Для разработчика тоже есть плюсы, в первую очередь знакомый интерфейс взаимодействия. Сканер выступает веб-сервисом.
Если рассмотреть реальные сценарии использования, то минусы также найдутся. Первый — ситуация дедлока. На рынке нет устройств с TWAIN Direct и разработчикам нет смысла поддерживать эту технологию, и обратно. Второй — безопасность, спецификация не предъявляет требований к управлению пользователями, частоте обновлений для закрытия возможных дыр. Также непонятно, как администраторам контролировать апдейты и доступ. На компьютере есть антивирусное ПО. А в прошивке сканера, в которой очевидно будет веб-сервер, этого может и не быть. Или быть, но не то, что требует политика безопасности компании. Согласитесь, иметь зловреда, который будет отправлять налево все отсканированные документы не очень хорошо. То есть при внедрении данного стандарта задачи, которые решались настройками сторонних приложений перекладываются на производителей устройств.
Третий минус — возможная потеря функциональности. Драйвера могут иметь дополнительную пост-обработку. Распознавание штрихкодов, удаление фона. Некоторые сканеры имеют т.н. импринтер — функцию, которая позволяет сканеру печатать на обработанном документе. Этого нет в TWAIN Direct. Спецификация допускает расширение API, но это приведет к появлению множеств собственных реализаций.
И еще один минус в сценариях работы со сканером.
Сканирование из приложения, или сканирование от устройства
Давайте рассмотрим, как происходит обычное сканирование из приложения. Я кладу документ. Затем открываю приложение и сканирую. Затем забираю документ. Три шага. Теперь представьте, что сетевой сканер стоит в другом помещении. Нужно сделать как минимум 2 подхода к нему. Это менее удобно, чем сетевая печать.
Другое дело, когда сканер сам умеет отправлять документ. Например, на почту. Я кладу документ. Затем сканирую. Документ сразу летит в целевую систему.
В этом и есть основное отличие. Если устройство подключено к сети, то удобнее сканировать сразу в целевое хранилище: папку, почту или ECM систему. В этой схеме нет места драйверу.
Если посмотреть со стороны, мы используем сетевое сканирование, не меняя существующих технологий. Причем как из десктопных приложений через драйвер, так и прямо с устройства. Но удаленное сканирование с компьютера не стало настолько массовым, как сетевая печать, из-за различий в сценариях работы. Более востребованным становится сканирование сразу в нужное хранилище.
Поддержка сканерами TWAIN Direct как замена драйверам очень правильный шаг. Но стандарт немного запоздал. Пользователи хотят сканировать прямо с сетевого устройства, отправляя документы по назначению. Существующим приложениям нет необходимости поддерживать новый стандарт, так как и сейчас все работает прекрасно, а производителям сканеров нет нужды его реализовывать, так как нет приложений.
И в заключение. Общий тренд показывает, что простое сканирование одной — двух страничек будет замещаться камерами на телефонах. Останется промышленное сканирование, где важны скорость, поддержка функций постобработки, которые TWAIN Direct не может обеспечить, и где будет оставаться важной тесная интеграция с ПО.
Источник
Сканирование по сети – это просто
Прошивка
Cкачать ее можно тут.
Способ прошивки может меняться в зависимости от модели роутера. Эта инструкция для роутеров, как у меня.
Устанавливаем прошивку с помощью утилиты восстановления прошивки от асус.
- Подключаем роутер к компьютеру через Ethernet(через любой из lan-портов)
- Переводим роутер в режим восстановления – выключаем питание роутера, зажимаем кнопку Reset/Restore, включаем питание, удерживаем кнопку до тех пор, пока индикатор питания не начнет моргать
- Никаких настроек ip-адресов делать не надо, разве что присвоить компу адрес из 192.168.1.0/255.255.255.0 отличный от 192.168.1.1, и запустить пинг на 192.168.1.1
- Запускаем программу Firmware Restoration, отключаем фаервол(об этом просит программа), выбираем файл прошивки с расширением .trx
Настройка сканирования и печати
Первым делом меняем пароль роутера:
Настраиваем доступ в интернет:
Настраиваем сервер DHCP, и меняем адрес, если не устраивает 192.168.1.1. Я меняю его на 192.168.11.1, в дальнейшем вся настройка будет на этот адрес:
Сканирование
Далее, переходим к настройке пакетов.
Жмем Update package lists(если хотите поставить пакет, эту операцию нужно делать при каждой перезагрузке роутера), ищем через поле Filter и ставим пакеты:
- nano – более дружелюбный, чем vi, редактор
- sane-backends, sane-frontends
- xinetd – для доступа по сети
- kmod-usb-printer, kmod-usb-ohci, kmod-usb-uhci, kmod-usb2, kmod-usb-storage – поддержка различных USB-устройств на уровне ядра
Перезагружаем роутер.
Подключаемся к роутеру по ssh.
Команда sane-find-scanner должна выдать примерно следующее:
found USB scanner (vendor=0x04e8 [Samsung], product=0x341b [SCX-4200 Series]) at libusb:001:004
# Your USB scanner was (probably) detected. It may or may not be supported by
# SANE. Try scanimage -L and read the backend’s manpage.
# Not checking for parallel port scanners.
# Most Scanners connected to the parallel port or other proprietary ports
# can’t be detected by this program.
Заметьте значения vendor=0x04e8 , product=0x341b , libusb:001:004 , они нам понадобится.
Теперь, либо вам повезет, либо придется сделать дополнительные настройки.
Мне не повезло:
root@OpenWrt:
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).
Тут можно узнать, какой модели сканера какой backend соответствует. Samsung SCX-4220 соответствует backend sane-xerox_mfp.5.
Тут можно посмотреть мануал, из которого видно, что конфиг находится в файле /etc/sane.d/xerox_mfp.conf
Редактируем его:
Добавляем в файл строчку
usb 0x04e8 0x341b
и, на всякий случай, эту строку, как советуют на форумах
Версия backends в этой прошивке 1.0.20, и, что интересно, при использовании последней версии(кажется, 1.0.22, версия ядра 2.6), которую я устанавливал на прошивке от Олега, сканер у меня так и не определился. Описание такой ситуации я тоже встречал на форумах, поэтому выбрал прошивку с версией ядра 2.4
Сохраняем файл, проверяем:
# scanimage –L
device `xerox_mfp:libusb:001:004′ is a SAMSUNG ORION multi-function peripheral
Сканер определяется, все хорошо.
Теперь настроим доступ по сети:
Добавляем в файл строчку 192.168.11.0/24 (необходимо указать подсеть вашего роутера)
Добавляем в файл следующие строки:
service saned
<
socket_type = stream
server = /usr/sbin/saned
protocol = tcp
user = root
group = root
wait = no
disable = no
>
Запускаем xinetd в режиме вывода отладочной информации:
# xinetd -d
Service defaults
Bind = All addresses.
Only from: All sites
No access: No blocked sites
No logging
Service configuration: saned
> flags = IPv4
socket_type = stream
Protocol (name,number) = (tcp,6)
port = 6566
wait = no
user = 0
group = 0
Groups = no
PER_SOURCE = -1
Bind = All addresses.
Server = /usr/sbin/saned
Server argv = saned
Only from: All sites
No access: No blocked sites
No logging
11/9/2@07:43:31: DEBUG: 29656
11/9/2@07:43:31: DEBUG: 29656
11/9/2@07:43:31: NOTICE: 29656
11/9/2@07:43:31: NOTICE: 29656
11/9/2@07:43:31: DEBUG: 29656
Как видно, сервис запущен.
Если сервис не запустился, проверьте, чтобы в файле /etc/services была строчка saned 6566 , и, если она отсутствует, то добавьте.
Теперь скачаем и установим SaneTwain
В архиве инструкция и 2 файла – sanetwain.ds и scanimage.exe
запускаем scanimage.exe, указываем в настройках адрес роутера:
перезапускаем scanimage.exe:
Смотрим записи syslog в веб-интерфейсе:
Sep 2 07:59:19 OpenWrt daemon.debug saned[31278]: saned (AF-indep+IPv6) from sane-backends 1.0.20 starting up
Sep 2 07:59:19 OpenWrt daemon.debug saned[31278]: check_host: access by remote host: 192.168.11.139
Sep 2 07:59:19 OpenWrt daemon.debug saned[31278]: check_host: getaddrinfo for local hostname failed: Name or service not known
Sep 2 08:02:52 OpenWrt daemon.warn xinetd[29722]: Exiting.
Путем поиска по форумам выясняем, чтобы в этой ситуации все заработало, надо добавить в hosts запись с именем для адреса роутера:
killall xinetd
xinetd
Перезапускаем scanimage.exe(он глючный, возможно, только со второго раза все будет ок)
Видим, что все работает. Ура.
Теперь надо включить автозапуск xinetd в веб-интерфейсе роутера:
Перезапускаем роутер, проверяем работу еще раз.
Теперь копируем второй файл, sanetwain.ds, в каталог C:\Windows\twain_32\
После этого в программах с поддержкой twain можно пользоваться сканером, в том числе и в замечательной программе для создания скриншотов Screenshot Captor:
Печать
Теперь настроим печать по сети:
Устанавливаем пакет luci-app-p910nd.
Делаем следующие настройки в веб-интерфейсе роутера:
Убедимся, что сервер запустится при перезагрузке роутера:
и то, что он действительно запустился:
# ps|grep p9100
32079 root 680 S /usr/sbin/p9100d -b -f /dev/usb/lp0 0
Жмем «Пробная печать», ура!
Печать по сети на всех прошивках, которые я смотрел, настраивалась без проблем, так что я уверен, что у вас проблем тоже не возникнет.
Освобождение места на роутере под другие программы
Подключаемся по ssh.
Идея в том, чтобы удалить ненужные нам backends.
backends находятся в папке /usr/lib/sane/
Как видно из man, файлы нашего backend — libsane-xerox_mfp.so.1 и libsane-xerox_mfp.so.1.0.20
Соответственно, если вы не планируете подключать другой сканер, все остальные можно невозбранно удалить что освободит
root@OpenWrt:/usr/lib/sane# cd /usr/lib/sane/
root@OpenWrt:/usr/lib/sane# du -m
7 .
Около 3.5 мб! Почему 3.5 а не 7? Потому что в этом каталоге ровно половина файлов – символические ссылки на библиотеки, расположенные в этом же каталоге.
Способ удаления не самый изящный, но, тем не менее, действенный(mc установить не предлагать, под него уже нет места):
root@OpenWrt:/usr/lib/sane# rm libsane-a*
root@OpenWrt:/usr/lib/sane# rm libsane-b*
root@OpenWrt:/usr/lib/sane# rm libsane-c*
root@OpenWrt:/usr/lib/sane# rm libsane-d*
root@OpenWrt:/usr/lib/sane# rm libsane-e*
root@OpenWrt:/usr/lib/sane# rm libsane-f*
root@OpenWrt:/usr/lib/sane# rm libsane-g*
root@OpenWrt:/usr/lib/sane# rm libsane-h*
root@OpenWrt:/usr/lib/sane# rm libsane-i*
root@OpenWrt:/usr/lib/sane# rm libsane-j*
rm: cannot remove ‘libsane-j*’: No such file or directory
root@OpenWrt:/usr/lib/sane# rm libsane-k*
rm: cannot remove ‘libsane-k*’: No such file or directory
root@OpenWrt:/usr/lib/sane# rm libsane-l*
root@OpenWrt:/usr/lib/sane# rm libsane-m*
root@OpenWrt:/usr/lib/sane# rm libsane-n*
root@OpenWrt:/usr/lib/sane# rm libsane-o*
rm: cannot remove ‘libsane-o*’: No such file or directory
root@OpenWrt:/usr/lib/sane# rm libsane-p*
root@OpenWrt:/usr/lib/sane# rm libsane-q*
root@OpenWrt:/usr/lib/sane# rm libsane-r*
root@OpenWrt:/usr/lib/sane# rm libsane-s*
root@OpenWrt:/usr/lib/sane# rm libsane-t*
root@OpenWrt:/usr/lib/sane# rm libsane-u*
root@OpenWrt:/usr/lib/sane# rm libsane-v*
rm: cannot remove ‘libsane-v*’: No such file or directory
root@OpenWrt:/usr/lib/sane# rm libsane-w*
rm: cannot remove ‘libsane-w*’: No such file or directory
Главное — не увлечься, и не убить то, что нужно оставить
Теперь результат наглядно – до:
Редактируем файл
root@OpenWrt:/usr/lib/sane# nano /etc/sane.d/dll.conf
комментим # всестроки, не относящиеся к нашему backend(все, кроме xerox_mfp )
Теперь и scanimage запускается быстрее(он не тратит время на инициализацию всех backends), и хватит места, чтобы установить другие нужные сервисы.
P.S.
На форуме wl500g.info я читал замечания о том, что сканер в таком подключении работает медленнее, чем будучи подключенным напрямую к компу.
Давайте проверим… Сканируем лист А4 в цвете в разном разрешении.
600dpi через роутер(wifi, при этом смотрел ролик на youtube в 720p) 4мин 16сек, напрямую 1мин 47сек(через роутер реально в 2.5 раза медленнее);
300 dpi через роутер 62сек, напрямую 31сек;
150dpi через роутер 20сек, напрямую 15сек(тут разница совсем небольшая)
В принципе, для иллюстрации документов в формате А4 или распознавания текста хватит 150 dpi. В ситуации, когда один сканер на несколько человек и объемы сканирования небольшие, вполне себе ничего решение.
В ситуации, когда нужны высокие разрешения при больших объемах сканирования такое решение, естественно, не подойдет…
Источник