Поиск…


Введение и установка

Цель этой документации - использовать сканер без какого-либо пользовательского интерфейса. Общепринятым является загрузка файла, сканированного в PDF, прямо на Google Диск или Dropbox, просто нажав кнопки сканера.

scanbd позволяет запускать действия с помощью кнопок сканера, он использует здравый смысл.

Что делает вещи немного сложнее, так это то, что, опросив сканер, scanbd блокирует устройство. Поскольку нам также нужно сканировать локальные инструменты (например, scanimage), нам нужно установить прокси-сервер, который будет прерывать скандал с опроса, когда это необходимо. Это задача scanbm, которая контролирует сеть и дает приоритет над scanbd для любого локального доступа к сканеру.

Таким образом, нам необходимо:

  • Настройте локальную конфигурацию для проверки только из сети (через scanbm)
  • Настройте scanbd для доступа и опроса локального сканера

Как root :

apt-get update
apt-get install libconfuse-dev libsane-dev libudev-dev libusb-dev xinetd

Последнюю версию scanbd можно найти здесь: https://sourceforge.net/projects/scanbd/files/releases/

# Download the latest version of **scanbd**.
wget https://sourceforge.net/projects/scanbd/files/releases/scanbd-1.4.4.tgz/download

# Uncompress
tar xvzf scanbd-1.4.4.tgz && cd 1.4.4

# Configure with the installation path in /etc/
./configure --disable-Werror

# install it
make
make install

# Add a dbus policy to authorize "saned" user to manage scanbd :
cp integration/scanbd_dbus.conf /etc/dbus-1/system.d/

# Add the init script to manage the daemon :
cp integration/scanbd.debian /etc/init.d/scanbd

scanbd теперь установлен, но еще не настроен.

Настроить нормальную работу для сканирования из сети

Локальная конфигурация sane находится внутри /etc/saned.d


/etc/sane.d/dll.conf

# /etc/sane.d/dll.conf - Configuration file for the SANE dynamic backend loader
#
# Backends can also be enabled by configuration snippets under
# /etc/sane.d/dll.d directory -- packages providing backends should drop
# a config file similar to dll.conf in this directory, named after the package.
#

# The next line enables the network backend; comment it out if you don't need
# to use a remote SANE scanner over the network - see sane-net(5) and saned(8)

net

dll.conf содержит только net бэкэнд.


/etc/sane.d/net.conf:

# This is the net backend config file.

## net backend options
# Timeout for the initial connection to saned. This will prevent the backend
# from blocking for several minutes trying to connect to an unresponsive
# saned host (network outage, host down, ...). Value in seconds.
connect_timeout = 3

## saned hosts
# Each line names a host to attach to.
# If you list "localhost" then your backends can be accessed either
# directly or through the net backend.  Going through the net backend
# may be necessary to access devices that need special privileges.

localhost

На данный момент scanbm еще не настроен, сканер не может быть достигнут из сети. Нам нужно настроить scanbm вместе с scanbd, чтобы проверить настройку.

Настроить scanbd для опроса локального сканера

Определить локальный сканер

Используя lsusb, определите productId (1909 здесь):

pi:# lsusb
pi:# Bus 001 Device 005: ID 04a9:1909 Canon, Inc. CanoScan LiDE 110

С этим productId , grep правильный файл конфигурации (это зависит от вашей модели сканера, для меня это genesys.conf ):

pi:# grep 1909 /etc/sane.d/*conf
pi:# /etc/sane.d/genesys.conf:usb 0x04a9 0x1909

Скопируйте файл в папку конфигурации scanbd:

cp /etc/sane.d/genesys.conf /usr/local/etc/scanbd/
cp /etc/sane.d/dll.conf /usr/local/etc/scanbd/

Измените /usr/local/etc/scanbd/dll.conf и замените net правильной базой данных сканера:

# /etc/sane.d/dll.conf - Configuration file for the SANE dynamic backend loader
#
# Backends can also be enabled by configuration snippets under
# /etc/sane.d/dll.d directory -- packages providing backends should drop
# a config file similar to dll.conf in this directory, named after the package.
#

# The next line enables the network backend; comment it out if you don't need
# to use a remote SANE scanner over the network - see sane-net(5) and saned(8)

genesys

Убедитесь, что локальный сканер найден с помощью scanbd

Теперь мы готовы проверить:

scanbd -d7 -f

Избегайте столько, сколько вы можете, чтобы манипулировать env var SANE_CONFIG_DIR. Он может сломать вещи, значение по умолчанию уже настроено в /usr/local/etc/scanbd/scanbd.conf и в сценарии инициализации.

Результат должен быть аналогичен:

scanbd: foreground
scanbd: reading config file /usr/local/etc/scanbd/scanbd.conf
scanbd: debug on: level: 7
scanbd: dropping privs to uid saned
scanbd: dropping privs to gid scanner
scanbd: group scanner has member: 
scanbd: saned
scanbd: pi
scanbd: drop privileges to gid: 110
scanbd: Running as effective gid 110
scanbd: drop privileges to uid: 110
scanbd: Running as effective uid 110
scanbd: dbus_init
scanbd: dbus match type='signal',interface='org.freedesktop.Hal.Manager'
scanbd: SANE_CONFIG_DIR=/usr/local/etc/scanbd/sane.d
scanbd: sane version 1.0
scanbd: Scanning for local-only devices
scanbd: found device: genesys:libusb:001:005 Canon LiDE 110 flatbed scanner

Самое важное здесь - это found device .

Что делать, если «найденное устройство» не появляется?

Вы должны снова проверить свою конфигурацию, особенно идентификационную часть этой документации, и очистить любой возможный SANE_CONFIG_DIR env var, неправильно установленный, набрав: unset SANE_CONFIG_DIR


Настройте xinetd, чтобы прослушивать scanbm в сети

Создайте /etc/xinetd.d/sane-port который содержит:

service sane-port
{
        port        = 6566
        socket_type = stream
        wait        = no
        user        = saned
        group       = scanner
        server      = /usr/local/sbin/scanbm
        server_args = scanbm -c /usr/local/etc/scanbd/scanbd.conf
        disable     = no
}

/! \ Дважды проверьте путь scanbm, с помощью which scanbm

Затем перезапустите xinetd и запустите scanbd :

service xinetd restart
/etc/init.d/scanbd start

scanimage -L теперь должен отображать сканер.

Большинство вопросов на данном этапе относятся к разрешениям. Убедитесь, что scanimage -L работает, когда вы вошли в систему как санкционированный, выполнив sudo -u saned -s .

Если нет, проверьте разрешения USB: ls -al /dev/bus/usb/***

Триггерные действия с помощью кнопок сканера

Действия находятся в /usr/local/etc/scanbd/scanbd.conf . У меня есть 4 кнопки сканирования , копирования , электронной почты и файла .

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

Для каждого действия мы установим собственный путь для опции сценария .

action scan {
    filter = "^scan.*"
    numerical-trigger {
            from-value = 1
            to-value   = 0
    }
    desc   = "Scan to file"
    # script must be an relative path starting from scriptdir (see above), 
    # or an absolute pathname. 
    # It must contain the path to the action script without arguments
    # Absolute path example: script = "/some/path/foo.script 
    script = "/home/pi/scan.sh"
}

Не забудьте прокомментировать любое другое действие по умолчанию в конце scanbd.conf:

# devices 
# each device can have actions and functions, you can disable not relevant devices
#include(scanner.d/avision.conf)
#include(scanner.d/fujitsu.conf)
#include(scanner.d/hp.conf)
#include(scanner.d/pixma.conf)
#include(scanner.d/snapscan.conf)
#include(scanner.d/canon.conf)

Теперь вы можете создать свой собственный скрипт для обработки каждого действия:

Каждая строка, /sys/class/leds/led0/trigger к /sys/class/leds/led0/trigger предназначена для управления светодиодом, чтобы контролировать, что происходит. Вы можете делать все, что хотите, cat /sys/class/leds/led0/trigger дает вам всевозможные cat /sys/class/leds/led0/trigger фонарей.

/home/pi/scan.sh

#!/bin/bash

# don't forget to create the folder
scan_dir=/home/pi/scanned-files
datetime=`date +%F_%H%M%S`

echo none >/sys/class/leds/led0/trigger

case $SCANBD_ACTION in
  scan)
    filename=file-$datetime
    logger -t "scanbd: $0" "$SCANBD_DEVICE $SCANBD_ACTION - scanning --resolution 150 --mode Color --depth 8 --format=tiff to $scan_dir/$filename.jpg"
    echo timer >/sys/class/leds/led0/trigger
    scanimage -d $SCANBD_DEVICE --resolution 150 --mode Color --depth 8 --format=tiff  --brightness 5 --contrast 20 | convert tiff:- -compress jpeg $scan_dir/$filename.pdf
    echo none >/sys/class/leds/led0/trigger
    logger -t "scanbd: $0" "Finished scanning"
    ;;
    
  email)
    logger -t "scanbd: $0" "Emailing $scan_dir/file-*pdf"
    echo heartbeat >/sys/class/leds/led0/trigger
    # here are the lines to send the file
    echo none >/sys/class/leds/led0/trigger

esac


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow