Raspberry Pi
Erstellen einer Scanstation mit Scanbd (Raspbian)
Suche…
Einführung und Installation
In dieser Dokumentation wird ein Scanner ohne Benutzeroberfläche verwendet. Häufig wird eine gescannte PDF-Datei direkt durch Drücken der Scanner-Tasten in Google Drive oder Dropbox hochgeladen.
scanbd erlaubt es, Aktionen über die Scannertasten auszulösen.
Was die Sache etwas schwieriger macht, ist, dass Scanbd das Gerät abfragt, indem der Scanner abgefragt wird. Da wir auch mit lokalen Tools (wie scanimage) scannen müssen, müssen wir einen Proxy festlegen, der scandb bei Bedarf von der Abfrage abbricht. Dies ist die Aufgabe von Scanbm, das das Netzwerk überwacht und jedem lokalen Zugriff auf den Scanner Vorrang vor Scanbd gibt.
Daher müssen wir:
- Richten Sie die lokale Sane-Konfiguration so ein, dass nur über das Netzwerk gescannt wird (über Scanbm).
- Konfigurieren Sie Scanbd für den Zugriff auf den lokalen Scanner
Als root :
apt-get update
apt-get install libconfuse-dev libsane-dev libudev-dev libusb-dev xinetd
Die neueste Version von scanbd finden Sie hier: 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 ist jetzt installiert, aber noch nicht konfiguriert.
Konfigurieren Sie sane für das Scannen über das Netzwerk
Die lokale Konfiguration von sane befindet sich in /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 enthält nur das net Backend.
/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
Zu diesem Zeitpunkt ist der Scanbm noch nicht konfiguriert, es ist kein Scanner über das Netzwerk erreichbar. Wir müssen Scanbm zusammen mit Scanbd einrichten, um das Setup zu testen.
Konfigurieren Sie scanbd, um den lokalen Scanner abzufragen
Identifizieren Sie den lokalen Scanner
Identifizieren Sie mithilfe von lsusb die productId (hier 1909):
pi:# lsusb
pi:# Bus 001 Device 005: ID 04a9:1909 Canon, Inc. CanoScan LiDE 110
Mit dieser Produkt-ID grep die korrekte Konfigurationsdatei (hängt von Ihrem Scannermodell ab, für mich ist es genesys.conf ):
pi:# grep 1909 /etc/sane.d/*conf
pi:# /etc/sane.d/genesys.conf:usb 0x04a9 0x1909
Kopieren Sie die Datei in Ihren Scanbd-Konfigurationsordner:
cp /etc/sane.d/genesys.conf /usr/local/etc/scanbd/
cp /etc/sane.d/dll.conf /usr/local/etc/scanbd/
Bearbeiten Sie /usr/local/etc/scanbd/dll.conf und ersetzen Sie net durch das richtige Scanner-Backend:
# /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
Stellen Sie sicher, dass der lokale Scanner von scanbd gefunden wird
Jetzt können wir testen:
scanbd -d7 -f
Vermeiden Sie so viel wie möglich, die Umgebungsvariable SANE_CONFIG_DIR zu bearbeiten. Der Standardwert ist bereits in /usr/local/etc/scanbd/scanbd.conf und im Init-Skript konfiguriert.
Die Ausgabe sollte ähnlich sein:
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
Das wichtigste hier ist found device .
Was ist, wenn "gefundenes Gerät" nicht angezeigt wird?
Sie sollten Ihre Konfiguration erneut überprüfen, insbesondere den Identifikationsteil dieser Dokumentation, und alle eventuell falsch eingestellten SANE_CONFIG_DIR-Umgebungsvariablen löschen, indem Sie
unset SANE_CONFIG_DIReingeben:unset SANE_CONFIG_DIR
Konfigurieren Sie xinetd so, dass Scanbm im Netzwerk abgehört wird
Erstellen Sie /etc/xinetd.d/sane-port das /etc/xinetd.d/sane-port enthält:
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
}
/! \ Überprüfe den Pfad des Scanbm mit
which scanbm
Dann starte xinetd neu und starte scanbd :
service xinetd restart
/etc/init.d/scanbd start
scanimage -L sollte jetzt den Scanner anzeigen.
Die meisten Probleme in dieser Phase betreffen die Berechtigungen. Stellen Sie sicher, dass
scanimage -Lfunktioniert, wenn Sie mitsudo -u saned -sals saned protokolliert werden.Wenn nicht, überprüfen Sie die USB-Berechtigungen:
ls -al /dev/bus/usb/***
Lösen Sie Aktionen über die Scannertasten aus
Aktionen befinden sich in /usr/local/etc/scanbd/scanbd.conf . Ich habe 4 Schaltflächen zum Scannen , Kopieren , E-Mail und Datei .
Die Standardkonfigurationsdatei enthält nicht standardmäßig alle Aktionen. Sie müssen den Block wahrscheinlich manuell hinzufügen. Je nach Scannermodell können Sie weniger oder mehr Tasten haben.
Für jede Aktion werden wir einen benutzerdefinierten Pfad für das Skript Option.
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"
}
Vergessen Sie nicht, eine andere Standardaktion am Ende von scanbd.conf zu kommentieren:
# 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)
Sie können jetzt Ihr benutzerdefiniertes Skript erstellen, um jede Aktion auszuführen:
Jede Zeile in Bezug auf
/sys/class/leds/led0/triggerzum Steuern der LED, um zu überwachen, was los ist. Sie können alles tun, was Sie möchten. Mitcat /sys/class/leds/led0/triggerSie verschiedenecat /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