Raspberry Pi
Maak een scanstation met scanbd (Raspbian)
Zoeken…
Introductie en installatie
Het doel van deze documentatie is om een scanner zonder gebruikersinterface te gebruiken. Een veelgebruikt gebruik is om een gescand PDF-bestand rechtstreeks naar Google Drive of Dropbox te uploaden, gewoon door op scannerknoppen te drukken.
scanbd staat toe om acties van de scannerknoppen te activeren, het gebruikt gezond.
Wat het een beetje lastiger maakt, is dat door het scannen van de scanner het apparaat wordt vergrendeld. Omdat we ook moeten scannen met lokale tools (zoals scanimage), moeten we een proxy instellen die het scandb zal onderbreken om te pollen wanneer dat nodig is. Dit is de taak van scanbm, die het netwerk controleert en prioriteit geeft boven scanbd aan elke lokale toegang tot de scanner.
Daarom moeten we:
- Stel de lokale gezonde configuratie in om alleen vanaf het netwerk te scannen (via scanbm)
- Configureer scanbd om toegang te hebben en de lokale scanner te pollen
Als root :
apt-get update
apt-get install libconfuse-dev libsane-dev libudev-dev libusb-dev xinetd
De nieuwste versie van scanbd is hier te vinden: 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 is nu geïnstalleerd maar nog niet geconfigureerd.
Configureer gezond om te scannen vanaf het netwerk
De lokale configuratie van sane bevindt zich 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 bevat alleen de 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
Op dit moment is scanbm nog niet geconfigureerd, er kan geen scanner worden bereikt vanuit het netwerk. We moeten scanbm samen met scanbd instellen om de configuratie te testen.
Configureer scanbd om de lokale scanner te pollen
Identificeer de lokale scanner
Gebruik lsusb om het productId te identificeren (hier 1909):
pi:# lsusb
pi:# Bus 001 Device 005: ID 04a9:1909 Canon, Inc. CanoScan LiDE 110
Met dat product- ID grep u het juiste configuratiebestand (het hangt af van uw scannermodel, voor mij is het genesys.conf ):
pi:# grep 1909 /etc/sane.d/*conf
pi:# /etc/sane.d/genesys.conf:usb 0x04a9 0x1909
Kopieer het bestand naar uw scanbd configuratiemap:
cp /etc/sane.d/genesys.conf /usr/local/etc/scanbd/
cp /etc/sane.d/dll.conf /usr/local/etc/scanbd/
Bewerk /usr/local/etc/scanbd/dll.conf en vervang net door de juiste 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
Bevestig dat de lokale scanner is gevonden door scanbd
Nu zijn we klaar om te testen:
scanbd -d7 -f
Vermijd zoveel als je kunt om de env var SANE_CONFIG_DIR te manipuleren. Het kan dingen breken, de standaardwaarde is al geconfigureerd in /usr/local/etc/scanbd/scanbd.conf en in het init-script.
De uitvoer moet vergelijkbaar zijn met:
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
Het belangrijkste hier is het found device .
Wat als "apparaat gevonden" niet verschijnt?
Controleer nogmaals uw configuratie, met name het identificatiegedeelte van deze documentatie en wis eventuele SANE_CONFIG_DIR env var verkeerd ingesteld door te typen:
unset SANE_CONFIG_DIR
Configureer xinetd om scanbm te laten luisteren op het netwerk
Maak /etc/xinetd.d/sane-port die bevat:
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
}
/! \ Controleer het pad van scanbm
which scanbm
Start vervolgens xinetd opnieuw en start scanbd :
service xinetd restart
/etc/init.d/scanbd start
scanimage -L zou nu de scanner moeten weergeven.
De meeste problemen in dit stadium betreffen de machtigingen. Zorg ervoor dat
scanimage -Lwerkt wanneer u bent aangemeld als gesaneerd doorsudo -u saned -s.Zo niet, controleer dan USB-machtigingen:
ls -al /dev/bus/usb/***
Acties activeren met de scannerknoppen
Acties bevinden zich in /usr/local/etc/scanbd/scanbd.conf . Ik heb 4 knoppen die scannen , kopiëren , e-mailen en opslaan .
Het standaardconfiguratiebestand bevat niet alle acties per standaard, waarschijnlijk moet u het blok handmatig toevoegen. Afhankelijk van uw scannermodel kunt u minder of meer knoppen hebben.
Voor elke actie stellen we een aangepast pad in voor de scriptoptie .
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"
}
Vergeet niet om een andere standaardactie aan het einde van scanbd.conf te becommentariëren:
# 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)
U kunt nu uw aangepaste script maken om elke actie af te handelen:
Elke regel ten opzichte van
/sys/class/leds/led0/triggerom de LED te besturen om te controleren wat er aan de hand is. Je kunt doen wat je wilt,cat /sys/class/leds/led0/triggergeeft je allemaal verschillendecat /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