Raspberry Pi
Создайте сканирующую станцию с scanbd (Raspbian)
Поиск…
Введение и установка
Цель этой документации - использовать сканер без какого-либо пользовательского интерфейса. Общепринятым является загрузка файла, сканированного в 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