Raspberry Pi
Skapa en skanningsstation med scanbd (Raspbian)
Sök…
Introduktion och installation
Syftet med denna dokumentation är att använda en skanner utan något användargränssnitt. En vanlig användning är att ladda upp en PDF-skannad fil direkt till Google Drive eller Dropbox bara genom att trycka på skannerknapparna.
scanbd tillåter att utlösa åtgärder från skannerknapparna, det använder sane.
Det som gör saker lite svårare är att genom att polla skannern låser scanbd enheten. Eftersom vi också behöver skanna från lokala verktyg (som scanimage), måste vi ställa in en proxy som kommer att avbryta scandb från polling vid behov. Detta är jobbet med scanbm, som övervakar nätverket och ger prioritet framför scanbd till alla lokala åtkomst till skannern.
Därför måste vi:
- Ställ in den lokala sane konfigurationen för att bara skanna från nätverket (via scanbm)
- Konfigurera scanbd för att få åtkomst till och polla den lokala skannern
Som rot :
apt-get update
apt-get install libconfuse-dev libsane-dev libudev-dev libusb-dev xinetd
Den senaste versionen av scanbd kan hittas här: 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 är nu installerat men ännu inte konfigurerat.
Konfigurera sane för att skanna från nätverket
Den lokala konfigurationen av sane är inuti /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 innehåller endast 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
Vid denna tidpunkt är scanbm ännu inte konfigurerat, ingen skanner kan nås från nätverket. Vi måste konfigurera scanbm tillsammans med scanbd för att testa installationen.
Konfigurera scanbd för att undersöka den lokala skannern
Identifiera den lokala skannern
Genom att använda lsusb, identifiera produktenId (1909 här):
pi:# lsusb
pi:# Bus 001 Device 005: ID 04a9:1909 Canon, Inc. CanoScan LiDE 110
Med den produktenId , grep rätt konfigurationsfil (det beror på din skannermodell, för mig är det genesys.conf ):
pi:# grep 1909 /etc/sane.d/*conf
pi:# /etc/sane.d/genesys.conf:usb 0x04a9 0x1909
Kopiera filen i din scanbd-konfigurationsmapp:
cp /etc/sane.d/genesys.conf /usr/local/etc/scanbd/
cp /etc/sane.d/dll.conf /usr/local/etc/scanbd/
Redigera /usr/local/etc/scanbd/dll.conf och ersätt net med rätt skannerstöd:
# /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
Bekräfta att den lokala skannern hittas av scanbd
Nu är vi redo att testa:
scanbd -d7 -f
Undvik så mycket du kan för att manipulera env-varan SANE_CONFIG_DIR. Det kan bryta saker, standardvärdet är redan konfigurerat i /usr/local/etc/scanbd/scanbd.conf och i init-skriptet.
Output bör likna:
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
Det viktigaste här found device .
Vad händer om "hittad enhet" inte visas?
Du bör kontrollera din konfiguration igen, särskilt identifieringsdelen av denna dokumentation och rensa eventuella SANE_CONFIG_DIR env var felaktigt inställda genom att skriva:
unset SANE_CONFIG_DIR
Konfigurera xinetd så att scanbm lyssnar i nätverket
Skapa /etc/xinetd.d/sane-port som innehåller:
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
}
/! \ Dubbelkontrollera sökvägen till scanbm med
which scanbm
Starta sedan om xinetd och starta scanbd :
service xinetd restart
/etc/init.d/scanbd start
scanimage -L ska nu visa skannern.
De flesta frågor i detta skede gäller behörigheterna. Se till att
scanimage -Lfungerar när du är inloggad som saned genom att görasudo -u saned -s.Om inte, kontrollera USB-behörigheter:
ls -al /dev/bus/usb/***
Aktivera åtgärder från skannerknapparna
Åtgärder finns i /usr/local/etc/scanbd/scanbd.conf . Jag har fyra knappar som skannar , kopierar , e-post och fil .
Standardkonfigurationsfilen inkluderar inte alla åtgärder per standard, du måste förmodligen lägga till blocket manuellt. Du kan ha mindre eller fler knappar beroende på din skannermodell.
För varje åtgärd kommer vi att ställa in en egen väg för skriptet alternativ.
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"
}
Glöm inte att kommentera någon annan standardåtgärd i slutet av 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)
Du kan nu skapa ditt anpassade skript för att hantera varje åtgärd:
Varje linje i förhållande till
/sys/class/leds/led0/triggerär för att kontrollera lysdioden för att övervaka vad som händer. Du kan göra vad du vill,cat /sys/class/leds/led0/triggerger dig alla olika ljusmönster.
/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