Raspberry Pi
Crear una estación de escaneo con scanbd (Raspbian)
Buscar..
Introducción e instalación
El propósito de esta documentación es utilizar un escáner sin ninguna interfaz de usuario. Un uso común es cargar un archivo escaneado en PDF directamente en Google Drive o Dropbox simplemente presionando los botones del escáner.
Scanbd permite activar acciones desde los botones del escáner, usa sane.
Lo que complica un poco las cosas es que al sondear el escáner, scanbd bloquea el dispositivo. Como también necesitamos escanear desde herramientas locales (como scanimage), necesitamos configurar un proxy que interrumpa el scandb de sondeo cuando sea necesario. Este es el trabajo de scanbm, que controla la red y le da prioridad sobre scanbd a cualquier acceso local al escáner.
Por lo tanto, necesitamos:
- Configure la configuración de sonido local para escanear solo desde la red (a través de scanbm)
- Configure scanbd para tener acceso y sondear el escáner local
Como raíz :
apt-get update
apt-get install libconfuse-dev libsane-dev libudev-dev libusb-dev xinetd
La última versión de scanbd se puede encontrar aquí: 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 ahora está instalado pero aún no está configurado.
Configurar sane para escanear desde la red
La configuración local de sane está dentro de /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 contiene solo el backend 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
En este punto, scanbm aún no está configurado, no se puede acceder a ningún escáner desde la red. Necesitamos configurar scanbm junto con scanbd para probar la configuración.
Configure scanbd para sondear el escáner local
Identificar el escáner local.
Al usar lsusb, identifique el ID de producto (1909 aquí):
pi:# lsusb
pi:# Bus 001 Device 005: ID 04a9:1909 Canon, Inc. CanoScan LiDE 110
Con ese productId , grep el archivo de configuración correcto (depende del modelo de su escáner, para mí es genesys.conf ):
pi:# grep 1909 /etc/sane.d/*conf
pi:# /etc/sane.d/genesys.conf:usb 0x04a9 0x1909
Copie el archivo dentro de su carpeta de configuración de scanbd:
cp /etc/sane.d/genesys.conf /usr/local/etc/scanbd/
cp /etc/sane.d/dll.conf /usr/local/etc/scanbd/
Edite /usr/local/etc/scanbd/dll.conf y reemplace net con el escáner correcto:
# /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
Confirme que el escáner local se encuentra por scanbd
Ahora estamos listos para probar:
scanbd -d7 -f
Evite todo lo que pueda para manipular la env. SANE_CONFIG_DIR. Puede romper cosas, el valor predeterminado ya está configurado en /usr/local/etc/scanbd/scanbd.conf y en el script de inicio.
La salida debe ser similar a:
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
El found device más importante aquí se found device .
¿Qué pasa si "dispositivo encontrado" no aparece?
Debe volver a verificar su configuración, especialmente la parte de identificación de esta documentación y borrar cualquier env. SANE_CONFIG_DIR eventual mal configurada al escribir:
unset SANE_CONFIG_DIR
Configure xinetd para hacer que scanbm escuche en la red
Cree /etc/xinetd.d/sane-port que contiene:
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
}
/! \ Comprueba dos veces la ruta de scanbm con la
which scanbm
Luego, reinicie xinetd e inicie scanbd :
service xinetd restart
/etc/init.d/scanbd start
scanimage -L ahora debería mostrar el escáner.
La mayoría de los problemas en esta etapa se refieren a los permisos. Asegúrese de que
scanimage -Lfuncione cuando haya iniciado sesión saned haciendosudo -u saned -s.Si no, revise los permisos de USB:
ls -al /dev/bus/usb/***
Activar acciones desde los botones del escáner.
Las acciones se encuentran en /usr/local/etc/scanbd/scanbd.conf . Tengo 4 botones que son escanear , copiar , correo electrónico y archivo .
El archivo de configuración predeterminado no incluye todas las acciones por defecto, probablemente tendrá que agregar el bloque manualmente. Puede tener menos o más botones dependiendo del modelo de su escáner.
Para cada acción, estableceremos una ruta personalizada para la opción de script .
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"
}
No olvide comentar cualquier otra acción predeterminada al final de 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)
Ahora puede crear su script personalizado para manejar cada acción:
Cada línea relativa a
/sys/class/leds/led0/triggeres para controlar el LED para monitorear lo que está sucediendo. Puedes hacer lo que quieras,cat /sys/class/leds/led0/triggerte da todos los diferentes patrones de luces.
/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