Raspberry Pi
Creare una stazione di scansione con scanbd (Raspbian)
Ricerca…
Introduzione e installazione
Lo scopo di questa documentazione è di utilizzare uno scanner senza alcuna interfaccia utente. Un uso comune è caricare un file PDF digitalizzato direttamente su Google Drive o Dropbox semplicemente premendo i pulsanti dello scanner.
scanbd consente di attivare azioni dai pulsanti dello scanner, utilizza sane.
Ciò che rende le cose un po 'più complicate è che, eseguendo il polling dello scanner, scanbd blocca il dispositivo. Poiché dobbiamo anche eseguire la scansione da strumenti locali (come scanimage), dobbiamo impostare un proxy che interrompa lo scandb dal polling quando necessario. Questo è il lavoro di scanbm, che monitora la rete e dà la priorità su scanbd a qualsiasi accesso locale allo scanner.
Quindi, abbiamo bisogno di:
- Configura la configurazione locale corretta per eseguire solo la scansione dalla rete (tramite scanbm)
- Configura scanbd per avere accesso e interrogare lo scanner locale
Come root :
apt-get update
apt-get install libconfuse-dev libsane-dev libudev-dev libusb-dev xinetd
L'ultima versione di scanbd può essere trovata qui: 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 è ora installato ma non ancora configurato.
Configurare sane per eseguire la scansione dalla rete
La configurazione locale di sane è dentro /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 il 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
A questo punto, scanbm non è ancora configurato, nessuno scanner può essere raggiunto dalla rete. Abbiamo bisogno di impostare scanbm insieme a scanbd per testare la configurazione.
Configura scanbd per eseguire il polling dello scanner locale
Identifica lo scanner locale
Usando lsusb, identifica productId (1909 qui):
pi:# lsusb
pi:# Bus 001 Device 005: ID 04a9:1909 Canon, Inc. CanoScan LiDE 110
Con quel productId , grep il file di configurazione corretto (dipende dal tuo modello di scanner, per me è genesys.conf ):
pi:# grep 1909 /etc/sane.d/*conf
pi:# /etc/sane.d/genesys.conf:usb 0x04a9 0x1909
Copia il file nella cartella di configurazione di scanbd:
cp /etc/sane.d/genesys.conf /usr/local/etc/scanbd/
cp /etc/sane.d/dll.conf /usr/local/etc/scanbd/
Modifica /usr/local/etc/scanbd/dll.conf e sostituisci net con il backend dello scanner corretto:
# /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
Confermare che lo scanner locale è stato trovato da scanbd
Ora siamo pronti per testare:
scanbd -d7 -f
Evita il più possibile per manipolare l'env var SANE_CONFIG_DIR. Può rompere cose, il valore predefinito è già configurato in /usr/local/etc/scanbd/scanbd.conf e nello script di init.
L'output dovrebbe essere simile 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
Il più importante qui è il found device .
Cosa succede se "dispositivo trovato" non viene visualizzato?
Dovresti ricontrollare la tua configurazione, in particolare la parte identificativa di questa documentazione e cancellare qualsiasi eventuale SANE_CONFIG_DIR env var erroneamente impostato digitando:
unset SANE_CONFIG_DIR
Configura xinetd per rendere scanbm in ascolto sulla rete
Crea /etc/xinetd.d/sane-port che 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
}
/! \ Verifica due volte il percorso di scanbm con
which scanbm
Quindi, riavvia xinetd e avvia scanbd :
service xinetd restart
/etc/init.d/scanbd start
scanimage -L dovrebbe ora visualizzare lo scanner.
La maggior parte dei problemi in questa fase riguardano le autorizzazioni. Assicurati che
scanimage -Lfunzioni quando sei loggato come sanato facendosudo -u saned -s.In caso contrario, controlla le autorizzazioni USB:
ls -al /dev/bus/usb/***
Attiva le azioni dai pulsanti dello scanner
Le azioni si trovano in /usr/local/etc/scanbd/scanbd.conf . Ho 4 pulsanti che sono scansione , copia , e -mail e file .
Il file di configurazione predefinito non include tutte le azioni per impostazione predefinita, probabilmente dovrai aggiungere il blocco manualmente. È possibile avere meno o più pulsanti a seconda del modello di scanner.
Per ciascuna azione, imposteremo un percorso personalizzato per l'opzione di 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"
}
Non dimenticare di commentare qualsiasi altra azione predefinita alla fine di 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)
Ora puoi creare il tuo script personalizzato per gestire ogni azione:
Ogni riga relativa a
/sys/class/leds/led0/triggera controllare il LED per monitorare cosa sta succedendo. Puoi fare quello che vuoi,cat /sys/class/leds/led0/triggerti offre tutti i diversi pattern di luci.
/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