Сканеры в Linux

     Использование сканера не является привилегией одних только пользователей MS Windows. Хотя действительно, "завести" устройство от целого ряда производителей подобного оборудования в альтернативной ОС, бывает, мягко говоря, проблематично.

     В принципе, производителями драйверы делаются для всего семейства операционных систем Windows (включая NT/2000). Устройства, к которым существуют драйверы только лишь для Windows 9x/ME, можно встретить довольно редко. А вот тем, кто решил перейти с Окошек, например, на Linux, придется сложнее. Но и их положение далеко не безнадежно. Есть утилита SANE и графическая оболочка к ней под названием XSANE, которые поддерживают немало устройств. Кстати, SANE работает не только в Linux. Список поддерживаемых ею программно-аппаратных платформ весьма обширен и постоянно пополняется. Эта утилита работает в Linux, во всех ОС семейств BSD, Solaris, HP UX, OS/2, BeOS и многих других. Полный список как программно-аппаратных платформ, так и сканеров, поддерживаемых SANE, есть на домашней страничке группы разработчиков по адресу www.mostang.com/sane. Естественно, там же можно загрузить эту программу, причем как в виде исходных текстов, так и бинарный дистрибутив, предназначенный для вашей системы. В некоторые дистрибутивы Linux (в частности, SUSE, Mandrake, AltLinux, ASPLinux) SANE включается штатно. Хотя, скорее всего, это будет несколько устаревшая версия: SANE обновляется постоянно, и авторы дистрибутивов просто не успевают за разработчиками программы.

     Хотелось бы предупредить сразу, что SANE лучше всего поддерживает устройства со SCSI-подключением. Из LPT-сканеров SANE может работать лишь со считанными моделями от Mustek и Umax. Ряд устройств от Primax поддерживается специальной утилитой, ссылка на которую есть на сайте разработчиков SANE. USB-модели в списке поддерживаемых устройств появились не так давно, причем возни с их настройкой будет больше и результат может оказаться отрицательным, особенно - если поддержка того или иного устройства включена в программу недавно.

     Настройка SANE сильно зависит от конкретной модели сканера. Об этом лучше читать в документации на конкретный backend или драйвер. Ссылки есть в таблице поддерживаемых сканеров. Для SCSI-устройства достаточно запустить утилиту findscanner из поставки SANE. А вот с USB- и LPT-устройствами все не так просто, потребуется редактирование целого ряда конфигурационных файлов, в частности, modules.conf и конфигурационного файла драйвера, и, вполне возможно, понадобится переконфигурирование ядра. Плюс ко всему крайне желательно иметь ядро Linux поновее. Если его версия 2.2.14 и ниже, нормальная работа USB-сканера будет проблематичной. Лучше всего ставить ядро 2.4.8 и выше. Поддержка USB-устройств, в том числе и сканеров, в нем значительно улучшена.

     SANE можно пользоваться из командной строки. Это, не всегда удобно, тем более что командные строки будут довольно длинными. К тому же особенности синтаксиса сильно варьируются в зависимости от конкретной модели устройства. Благо, что есть графические оболочки к SANE. Их даже две: помимо уже упомянутой XSANE, можно назвать еще и Xscanimage. Они имеют практически идентичный интерфейс и особенности работы. И та, и другая копируют интерфейс утилит сканирования для Windows и Mac.

     Но есть и различия. Xscanimage не может вызываться автономно. Она интегрируется с GIMP и рядом других приложений, в частности, Krayon (растровый редактор из поставки Koffice) и Linux-версией Corel Photo-Paint. XSANE можно использовать автономно и просто сохранить изображения для последующего редактирования в любой программе. Однако XSANE может также интегрироваться с GIMP и некоторыми другими приложениями, в частности, с программой распознавания текста GOCR.

     Как уже было сказано выше, есть и другие утилиты сканирования для альтернативных операционных систем типа Linux. Есть целый ряд программ сканирования для Linux, но они, как правило, коммерческие, плюс ко всему - уже давно не развиваются.

     Так что использовать сканер в неwinном мире можно, просто уделив несколько больше внимания выбору подходящей модели и настройке программного обеспечения.

     Как пользоваться SANE? Заходим на ftp.mostang.com/pub/sane/, и скачиваем от туда последнюю версию sane-x.x.x.tar.gz (список всех сайтов есть здесь: http://www.mostang.com/sane/source.html). Затем делаем следующую последовательность команд:

tar xfvz sane-1.0.7.tar.gz

cd sane-1.0.7

./configure; make; make install

Все. Большего не надо. Теперь, если у вас SCSI-сканер (для простоты рассмотрим именно этот случай), осмотрите свою машину и подсчитайте, сколько и как у вас к ней подключено SCSI устройств. Диски не считайте. Обычно сканер единственный. Значит, устройство для него будет /dev/ sga (если сканер второй, то /dev/sgb и так далее). Поставьте символическую ссылку на это устройство:

ln -s /dev/sga /dev/scanner

А команда

chmod 777 /dev/sga

даст всем доступ до него. Негоже одному root пользоваться сканером :). В принципе никто не мешает создать группу scaner и дать права только ей. Не забудьте глянуть на конфигурационный файл для вашего сканер. Он должен находится в директории /usr/ local/etc/sane.d/[фирма_сканера].conf. Например, для UMAX это umax.conf. Этот файл содержит список имен, которые соответствуют вашему сканеру (их может быть и несколько). Вот пример такого файла:

#scsi Vendor Model Type Bus Channel ID LUN

scsi UMAX * Scanner * * * * *

/dev/scanner

# можно указать его устройство и так

/dev/sgа

Все, теперь можете смело набирать команду

scanimage -L

Ответ, например, может быть таким:

device `hp:/dev/sga' is a Hewlett-Packard C5110A flatbed scanner

Ну вроде оно. А что этот сканер умеет?

scanimage -d hp:/dev/sga -h

Вот. scanimage - это консольная утилита для сканирования. Если охота написать скриптик, который сканирует и что-то делает с полученным - вам к ней.

     Оболочки к SANE. Ленивые люди пользуются красивой, простой графической утилитой xscanimage, которая идет вместе с исходниками sane. Запустите ее в XWindow. Интерфейс простой, возможности тоже, сохраняет в pnm. Для проверки хватит. Более навороченная оболочка, о которой я уже говорил выше, называется XSane. После компилирования  и инсталляции, ее можно запустить при помощи команды xsane. Но нам желательно бы из Gimp'а. Нет ничего проще! Даём следующую команду (для Gimp-1.1.xx, лучше поставить линк на xsane):

ln -s /usr/local/bin/xsane ~/.gimp-1.1/plug-ins

Чтобы не делать такое для каждого пользователя такой линк, лучше поставьте линк прямо в директорию процедур Gimp'a (plug-ins):

ln -s /usr/local/bin/xsane /usr/local/lib/gimp/1.1/plug-ins В версиях Gimp'a (1.0.x, <1.1.9) ищите меню Xtns/Xsane, а в версиях Gimp'a от 1.1.9 вам надо зайти в меню File/Acquire. Оно будет содержать имена устройств с которых можно сканировать.

     Если, у вас ничего не заработало, то в любом случае, можно просто сканированное сохранять в .pnm файл, а затем открывать любым графическим редактором.

     Всё, у вас обычная в принципе машина, которая умеет работать со сканером. Но мы решили отдать сканер в сеть. И более того, отдать его windows-машинам.

    Итак, сначала добавляем в /etc/services номер порта для sane:

sane 6566/tcp

Затем добавляем в /etc/inetd.conf строчку

sane  stream  tcp  nowait  saned.saned  /usr/local/sbin/saned  saned

Вместо saned.saned поставьте пользователя и группу, от которой будет работать демон. "root.root" - это не само хорошее решение. Сделайте что-то вроде "scanner.scanner".

     Перезагружаем inetd:

killall -HUP inetd

Теперь редактируем файл /usr/local/etc/sane.d/saned.conf. В нем мы должны прописать имена хостов, которые должны иметь доступ к сканеру через сеть. Если мы отдаем сканер всему миру (ну или всей сети), то просто поставьте в персом символе первой строки плюсик (+), этим вы отключите вcякий контроль со стороны sane. Теперь давайте проверим, доступен ли сканер из сети. Для этого в файл /usr/local/etc/sane.d/net.conf пропишем адрес машины, на которой есть настроенный, как написано выше, демон. Если вам охота проверить свою машину, то просто напишите туда localhost. Теперь, даём команду на сканирование:

scanimage -L

Вывод на экране:

device `hp:/dev/sga' is a Hewlett-Packard C5110A flatbed scanner

device `net:localhost:hp:/dev/sga' is a Hewlett-Packard C5110A flatbed scanner

Работает! Теперь любой другой Linux сможет отсканировать с вашего сканера что-нибудь. Но прежде удостоверьтесь, что обратное преобразование имен работает (цифры в имена). Если нет, то просто добавьте удаленные хосты в /etc/hosts.

X-Stranger

linux@hitech.by