Recherche…


Introduction et installation

L'objectif de cette documentation est d'utiliser un scanner sans interface utilisateur. Une utilisation courante consiste à télécharger un fichier PDF numérisé directement sur Google Drive ou Dropbox en appuyant simplement sur les boutons du scanner.

scanbd permet de déclencher des actions à partir des boutons du scanner, il utilise sane.

Ce qui rend les choses un peu plus compliquées est que, en interrogeant le scanner, scanbd verrouille le périphérique. Comme nous avons également besoin d'analyser à partir d'outils locaux (comme scanimage), nous devons définir un proxy qui va interrompre scandb de l'interrogation si nécessaire. C'est le travail de scanbm, qui surveille le réseau et donne la priorité sur scanbd à tout accès local au scanner.

Il faut donc:

  • Configurez la configuration sane locale pour analyser uniquement à partir du réseau (via scanbm)
  • Configurer scanbd pour avoir accès et interroger le scanner local

En tant que root :

apt-get update
apt-get install libconfuse-dev libsane-dev libudev-dev libusb-dev xinetd

La dernière version de scanbd peut être trouvée ici: 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 est maintenant installé mais pas encore configuré.

Configurer sain pour numériser à partir du réseau

La configuration locale de sane se trouve dans /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 ne contient que le 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

À ce stade, scanbm n'est pas encore configuré, aucun scanner ne peut être atteint depuis le réseau. Nous devons configurer scanbm avec scanbd pour tester la configuration.

Configurer scanbd pour interroger le scanner local

Identifier le scanner local

En utilisant lsusb, identifiez le productId (1909 ici):

pi:# lsusb
pi:# Bus 001 Device 005: ID 04a9:1909 Canon, Inc. CanoScan LiDE 110

Avec cet productId , grep le fichier de configuration correct (cela dépend de votre modèle de scanner, pour moi c'est genesys.conf ):

pi:# grep 1909 /etc/sane.d/*conf
pi:# /etc/sane.d/genesys.conf:usb 0x04a9 0x1909

Copiez le fichier dans votre dossier de configuration scanbd:

cp /etc/sane.d/genesys.conf /usr/local/etc/scanbd/
cp /etc/sane.d/dll.conf /usr/local/etc/scanbd/

Editez /usr/local/etc/scanbd/dll.conf et remplacez net par le bon moteur de numérisation:

# /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

Confirmez que le scanner local est détecté par scanbd

Nous sommes maintenant prêts à tester:

scanbd -d7 -f

Evitez autant que possible de manipuler l'envir SANE_CONFIG_DIR. Cela peut casser des choses, la valeur par défaut est déjà configurée dans /usr/local/etc/scanbd/scanbd.conf et dans le script init.

La sortie doit être similaire à:

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

Le plus important ici est found device .

Que se passe-t-il si "périphérique trouvé" n'apparaît pas?

Vous devriez vérifier à nouveau votre configuration, en particulier la partie identification de cette documentation et effacer toute éventuelle var SANE_CONFIG_DIR env mal définie en tapant: unset SANE_CONFIG_DIR


Configurez xinetd pour que scanbm écoute sur le réseau

Créez /etc/xinetd.d/sane-port qui contient:

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
}

/! \ Vérifiez le chemin de scanbm avec which scanbm

Redémarrez ensuite xinetd et démarrez scanbd :

service xinetd restart
/etc/init.d/scanbd start

scanimage -L devrait maintenant afficher le scanner.

La plupart des problèmes à ce stade concernent les autorisations. Assurez-vous que scanimage -L fonctionne lorsque vous êtes connecté en tant que saned en faisant sudo -u saned -s .

Sinon, vérifiez les autorisations USB: ls -al /dev/bus/usb/***

Déclencher des actions à partir des boutons du scanner

Les actions se trouvent dans /usr/local/etc/scanbd/scanbd.conf . J'ai 4 boutons qui sont scan , copy , email et file .

Le fichier de configuration par défaut n'inclut pas toutes les actions par défaut, vous devrez probablement ajouter le bloc manuellement. Vous pouvez avoir plus ou moins de boutons selon votre modèle de scanner.

Pour chaque action, nous définirons un chemin personnalisé pour l'option de 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"
}

N'oubliez pas de commenter toute autre action par défaut à la fin de 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)

Vous pouvez maintenant créer votre script personnalisé pour gérer chaque action:

Chaque ligne relative à /sys/class/leds/led0/trigger de contrôler la LED pour surveiller ce qui se passe. Vous pouvez faire ce que vous voulez, cat /sys/class/leds/led0/trigger vous donne tous les types de lumières.

/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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow