В *nix, подключение и настройка периферии такого типа - одна из самых "больных" тем. Не потому что в *nix нет средств для работы с периферией, а потому что большинство производителей "не хочет" или "не может" делать программное обеспечение для nix. Поэтому, если кто собирается купить и эксплуатировать подобного рода периферию под *nix, советую смотреть не на внешний вид, как это обычно делается, а изучить: 1) совместимость "железки" с *nix (наличие драйверов внешних или в ядре определённого дистрибутива), 2) стабильность работы с существующими драйверами, 3) сложность установки и настройки.

В этой статье речь пойдёт о подключении далеко не нового usb-сканера Hewlett Packard ScanJet 2400. Так получилось, что автор и сам не подозревал,что будет работать исключительно на *nix когда приобретал эту "железку". Сейчас, благодаря разработчикам дистрибутивов и свободных программистов (за что им огромнейшее спасибо!) сканер верой и правдой работает под Linux :)

Дано: компьютер с установленной операционной системой ArchLinux (или Debian) и графической средой, usb-сканер Hewlett Packard Scanjet 2400.
Задача: подключить и настроить сканер.
Уровень пользователя: средний.
Решение:

HP ScanJet 2400

О SANE

Для поддержки работы сканеров в Linux существует хороший открытый пакет программ SANE.
Расшифровывается как "Scanner Access Now Easy" - фразеологический оборот по смыслу близкий к Работа со сканером теперь проще :) Проект SANE родился по причине игнорирования производителями сканеров операционной системы Linux. Покупая сканер, можно было без проблем найти драйвера на MacOS, на несколько версий Windows, но никак не Linux. Сейчас ситуация постепенно начинает меняться: из-за потери рынка сбыта своих устройств, производители начали включать драйвера (в большинстве случаев закрытые) для *nix. На старые же устройства драйверов по прежнему нет, но сообщества программистов пытаются исправить эту ситуацию. SANE - один из таких проектов.

Пакет программ SANE обеспечивает интерфейс прикладного программирования (API) к устройствам сканирования растровых изображений. В него входят:

  • драйвера для поддержки работы сканеров,
  • библиотеки,
  • sane-config - утилита конфигурирования sane,
  • sane-find-scanner - утилита поиска сканера,
  • saned - демон для доступа к сканеру по сети,
  • XSane - графический интерфейс (frontend) для sane.

Кстати, для sane существует несколько программ графических интерфейсов.

Установка

Необходимо доустановить такое ПО:

  • libjpeg (для Arch Linux - это может быть libjpeg-turbo ),
  • sane
  • xsane

Для Debian:

 # apt-get install libjpeg8 sane xsane 

Для Arch Linux:

 # pacman libjpeg-turbo sane xsane

На сайте проекта, в списке поддерживаемых устройств, сканер HP ScanJet 2400 присутствует, но работа с открытыми драйверами у автора не получилась - сканер корректно определяется, но во время получения команды на сканирование, каретка передвигается от места калибровки лампы на 5 сантиметров, а потом снова возвращается на исходную. Заставить сканер нормально работать с открытыми драйверами у автора не получилось. Далее будет рассматриваться вариант установки проприетарных драйверов, с которыми сканер нормально заработал.

По прошествии нескольких лет, автор опробовал открытые драйвера для данной модели сканера, которые поставлялись в Ubuntu 14.04 - результат положительный. Сканер работает.

Установка проприетарного драйвера

Идём на сайт http://www.elcot.in/linuxdrivers_download.php и скачиваем пакет для HP ScanJet 2400. Сохраняем файл в свободную директорию (например /home/$username/temp) и распаковываем его.

 $ cd temp
 $ ls -l
   HP Scanjet 2400.zip

 $ unzip HP\ Scanjet\ 2400.zip
   Archive:  HP Scanjet 2400.zip
   inflating: HP Scanjet 2400/2400rv.tar.gz  
   inflating: HP Scanjet 2400/hp 2400 scanner-installation procedure.doc  

В .doc-файле можно найти инструкцию по установке, а в архиве 2400rv.tar.gz находятся нужные драйвера и библиотеки. Распаковываем архив:

 $ cd HP\ Scanjet\ 2400
 $ ls -l
   total 6296
   -rw-r--r-- 1 user user 6353326 Jun 25  2007 2400rv.tar.gz
   -rw-r--r-- 1 user user   72704 Jul 20  2007 hp 2400 scanner-installation procedure.doc
 $ gunzip 2400rv.tar.gz
 $ tar -xvf 2400rv.tar
   2400rv/libsane.tgz
   2400rv/README_hp2400.txt
   2400rv/hp2400.tgz
   2400rv/testimage.pnm
   2400rv/EULA.txt

После распаковки, в каталоге 2400rv получилось ещё 2 архива, которые нам нужны. Это hp2400.tgz и libsane.tgz. Заходим в каталог 2400rv :

 $ cd 2400rv
 $ ls -l
   total 11860
   -rw-r--r-- 1 user user     2718 Feb  6  2007 EULA.txt
   -rw-r--r-- 1 user user   161695 Feb  6  2007 hp2400.tgz
   -rw-r--r-- 1 user user    32972 Feb  6  2007 libsane.tgz
   -rw-r--r-- 1 user user     3729 Feb  6  2007 README_hp2400.txt
   -rw-r--r-- 1 user user 11914903 Jun 13  2007 testimage.pnm

Далее содержимое архива hp2400.tgz нужно перенести в /usr/lib/sane , а содержимое libsane.tgz в /usr/lib . Сделать это можно под учётной записью root`а Midnight Commander`ом прямо из архива, или выполнив всё последовательно:

 $ tar -xvzf hp2400.tgz
   EULA.txt
   README_hp2400.txt
   usr/
   usr/lib/
   usr/lib/sane/
   usr/lib/sane/libsane-hp2400.so.1
   usr/lib/sane/libsane-hp2400.so.1.0.18
   usr/lib/sane/libsane-hp2400.la
   usr/lib/sane/libsane-hp2400.so

 $ tar -xvzf libsane.tgz
   usr/lib/libsane.la
   usr/lib/libsane.so
   usr/lib/libsane.so.1
   usr/lib/libsane.so.1.0.14

 $ su - 
 # ls -l
   -rw-r--r-- 1 user user     2718 Feb  6  2007 EULA.txt
   -rw-r--r-- 1 user user   161695 Feb  6  2007 hp2400.tgz
   -rw-r--r-- 1 user user    32972 Feb  6  2007 libsane.tgz
   -rw-r--r-- 1 user user     3729 Feb  6  2007 README_hp2400.txt
   -rw-r--r-- 1 user user 11914903 Jun 13  2007 testimage.pnm
   drwxr-xr-x 3 user user     4096 Feb  5  2007 usr

 #cp -R usr/lib/* /usr/lib

ВНИМАНИЕ! Последняя команда выполняется в каталоге 2400rv !
Последней командой, содержимое из 2400rv/usr/lib и 2400rv/usr/lib/sane скопируется соответственно в /usr/lib и /usr/lib/sane

Согласно официального руководства, машину желательно перезагрузить - перезагружаем.

Далее подключаем usb-кабель к машине и включаем питание сканера. Открываем консоль и просматриваем вывод dmesg. Должно быть что-то подобное: </code> $ dmesg

...
usb 7-2: new full speed USB device using uhci_hcd and address 5 

</code> Это говорит о том, что система "увидела" сканер.

Далее из под root`а запускаем утилиту поиска сканеров. Если всё нормально, будет примерно такое:

 # sane-find-scanner
    # sane-find-scanner will now attempt to detect your scanner. If the
    # result is different from what you expected, first make sure your
    # scanner is powered up and properly connected to your computer.

    # No SCSI scanners found. If you expected something different, make sure that
    # you have loaded a kernel SCSI driver for your SCSI adapter.

  found USB scanner (vendor=0x067b, product=0x2303) at libusb:007:002
  found USB scanner (vendor=0x03f0 [Hewlett-Packard], product=0x0a01 [hp scanjet scanner], chip=GL646_HP) at libusb:007:005
    # 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.

Можно для теста запустить ещё так:

 # scanimage -L
   device `hp2400:libusb:007:005' is a Hewlett-Packard hp2400 flatbed scanner
   device `genesys:libusb:007:005' is a Hewlett Packard ScanJet 2400c flatbed scanner

Здесь видно, что сканер "подхватили" сразу два драйвера:

  • genesys - открытый драйвер, входящий в состав sane
  • hp2400 - проприетарный драйвер.
Особенность с библиотекой и правами доступа

После запуска scanimage -L или sane-find-scanner может выйти нечто подобное:

  scanimage: error while loading shared libraries: libjpeg.so.62: cannot open shared object file: No such file or directory

Это может произойти из-за отсутствия libjpeg или версия libjpeg выше чем 6. Для устранения проблемы, нужно установить libjpeg, и если версия библиотеки выше чем 6 - сделать символическую ссылку на имеющуюся библиотеку, но имя ссылки поставить как libjpeg.so.62 Примерно это выглядит так:

 # cd /usr/lib             # заходим в директорию
 # ls -l | grep libjpeg.   # из листинга каталога выделяем только файлы, начинающиеся с libjpeg
   -rw-r--r--  1 root root   389494 Feb 28 12:23 libjpeg.a
   lrwxrwxrwx  1 root root       16 Feb 28 12:23 libjpeg.so -> libjpeg.so.8.0.2
   lrwxrwxrwx  1 root root       16 Feb 28 12:23 libjpeg.so.8 -> libjpeg.so.8.0.2
   -rwxr-xr-x  1 root root   252660 Feb 28 12:23 libjpeg.so.8.0.2

Здесь видно, что установлена 8-я версия libjpeg. Теперь делаем ссылку:

 # ln -s libjpeg.so.8.0.2 libjpeg.so.62    # собственно создание ссылки
 # ls -l |grep libjpeg.
   -rw-r--r--  1 root root   389494 Feb 28 12:23 libjpeg.a
   lrwxrwxrwx  1 root root       16 Feb 28 12:23 libjpeg.so -> libjpeg.so.8.0.2
   lrwxrwxrwx  1 root root       16 Apr  7 18:57 libjpeg.so.62 -> libjpeg.so.8.0.2  # libjpeg.so.62 ссылается на libjpeg.so.8.0.2
   lrwxrwxrwx  1 root root       16 Feb 28 12:23 libjpeg.so.8 -> libjpeg.so.8.0.2
   -rwxr-xr-x  1 root root   252660 Feb 28 12:23 libjpeg.so.8.0.2

Когда проблема с libjpeg решена, переходим к следующему шагу.

Теперь необходимо внести изменения в файл /etc/sane.d/dll.conf .
Из под root`а в любимом редакторе открываем этот файл и находим место:

 ...
 hp5400
 hp5590
 hpljm1005
 hs2p
 ....

и вставляем hp2400:

 ...
 hp5400
 hp5590
 **hp2400**
 hpljm1005
 hs2p
 ....

Далее пробуем запустить xsane. Обычно, в среде Gnome он устанавливается в меню: ApplicationGraphics. Можно запустить из консоли через ввод xsane .

Окно ошибки

Если после запуска вышло такое окошко, значит у Вас, как у пользователя системы, нет прав для работы со сканером, а именно на файл-устройство в /dev/ нет разрешения на запись. Обычно udev выставляет для сканеров разрешение root:scanner 664 (rw--rw--r--). Проблема может решиться 3-мя способами: изменением правил udev, запуском xsane из под root`а и помещением нужных пользователей в группу scanner. Группа scanner применяется в Debian, ArchLinux и Ubuntu. В дистрибутиве Mageia 1 применяется группа usb.

Третий способ самый простой: из под root`а открываем любимым редактором файл /etc/group, находим строку, начинающуюся со scanner:

  ...
  scanner:x:96:
  ...

и добавляем имя учётных записей (для примера "username1" и "username2", которым нужен доступ к сканеру, после последнего двоеточия:

  ...
  scanner:x:96:username1,username2
  ...

Для вступления изменений в силу, нужно выйти из системы и снова зайти.

Если всё прошло удачно, после запуска xsane должно появиться приглашение на выбор устройства:

Окно выбора устройства

Нужно выбрать hp2400 и пробовать что-нибудь отсканировать.

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

Смотрите также

Печать/экспорт