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 -L werkt wanneer u bent aangemeld als gesaneerd door sudo -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/trigger om de LED te besturen om te controleren wat er aan de hand is. Je kunt doen wat je wilt, cat /sys/class/leds/led0/trigger geeft je allemaal verschillende cat /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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow