пятница, 21 мая 2010 г.

Сетевой сканер (usb+saned)

Устав от сканирования в консоли, я задался целью настроить "сетевой" сканер у нас в офисе. "Сетевой" в данном случае означает, что операция сканирования должна быть доступна с любого компьютера без применения специальных знаний администрирования linux. Эту задачу можно решить двумя способами:
  1. web gui для sane: phpSANE, sanewi, linux_scan_server.
  2. сетевой демон saned.
Функционал web интерфейсов крайне урезан по сравнению  с десктопными утилитами и зачастую требует "поработать напильником", поэтому в данном обзоре я подробно остановлюсь на описании процесса настройки saned.
(см. также другие способы сканирования при помощи sane)

Исходные данные:
  • USB сканер - МФУ HP LaserJet 3030
  • сервер - Ubuntu 8.04.4 LTS i386
Алгоритм:
  • sudo apt-get install sane
  • Убедиться, что сканер доступен из под пользователя root и функционирует:
    • $ sudo scanimage -L
      покажет список подключенных сканеров. В моем случае результат был следующим:
      device `hpaio:/usb/hp_LaserJet_3030?serial=00CNBF041264' is a Hewlett-Packard hp_LaserJet_3030 all-in-one
    • $ sudo scanimage --resolution 100 --format=pnm > test_im.pnm
      в результате в test_im.pnm должна быть сканированная картинка
  • Убедиться, что сканер доступен из под пользователя saned и функционирует. Метод тот же, что и для пользователя root. Если сканер не определяется (у меня так и было), то нужно добавить пользователя saned в группу scanner.
  • Добавить в конец /etc/inetd.conf строку:
    sane-port  stream  tcp  nowait  saned.saned  /usr/sbin/saned saned
    ВАЖНО: нужно проверить, что sane-port определен в /etc/services и, что saned действительно находится по пути /usr/sbin/saned (grep sane-port /etc/services; which saned).
  • Перезапускаем inet.d
    sudo kill -HUP `ps ax|awk '/inetd/ {print $1}'`
  • Проверяем, что saned слушает соответствующий порт:
    telnet localhost 6566
    Если подключиться удалось, что можно продолжать дальше. Возможно придется внести соответствующие изменения в правила iptables.
  • Настраиваем клиентскую машину. Устанавливаем xsane. Добавляем адрес сервера отдельной строкой в файл /etc/sane.d/net.conf
  • Проверяем, что сканер доступен с клиентской машины:
    scanimage -L
    Если все хорошо, то результат должен быть примерно таким
    device `net:192.168.0.1:hpaio:/usb/hp_LaserJet_3030?serial=00CNBF041264' is a Hewlett-Packard hp_LaserJet_3030 all-in-one
  • Сканер готов к работе.
У saned есть одна особенность - он создает подключение по одному порту, а данные передает по другому. Поэтому, если у вас на сервере iptables настроен пропускать трафик только с известных портов, потребуется дополнительная настройка. В новых версиях saned есть опция data_portrange:
data_portrange = min_port - max_port
              Specify the port range to use for the data  connection.  Pick  a
              port  range  between 1024 and 65535; don't pick a too large port
              range, as it may have performance issues.  Use  this  option  if
              your saned server is sitting behind a firewall. If that firewall
              is a Linux machine, we strongly recommend  using  the  Netfilter
              nf_conntrack_sane module instead.

У меня на сервере стоит старое ядро 2.6.24-27, в котором нет модуля nf_conntrack_sane и старая убунта, со старой версией пакета sane, в которой нет этой версии. Ну и iptables настроен жестко, поэтому описанная мной схема у меня не сразу заработала :) Мне дополнительно пришлось скачать и собрать новую версию sane
  • git clone git://git.debian.org/sane/sane-backends.git
  • ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
  • make
  • make install
    или, если вы чтите ubuntu policy
    checkinstall --pkgname=sane --pkgversion=1.0.21-trunk --backup=no --default -D

Комментариев нет:

My Delicious Tags