Artisan Numérique

/système/périphériques/matos/matériel/scanner/sane/ Installer un serveur de numérisation, SANE

L'objectif ici est d'installer le scanner USB en utilisant les outils du projet SANE. Une procédure très simple en soit avec juste quelques "pièges" qu'il est utile d'éviter pour ne pas perdre de temps.

Le logiciel SANE

Un petit mot sur SANE tout d'abord. Ce projet apporte à un système unix un support unifié de toutes les périphériques d'acquisition d'image. Ce va de la WebCam à la carte TNT en passant bien évidemment par les scanners. Outre ce support, SANE permet de publier un scanner sur votre réseau et ainsi de le rendre utilisable sur d'autre machines. A ce titre SANE est l'équivalent de CUPS mais pour l'acquisition. Le support des WebCam et autre carte TV est en soit anecdotique, il s'agit d'un driver générique qui utilise le système V4L (Vidéo4Linux). Le support des scanners est le vrai métier de SANE.

A noter enfin que le partage des scanners publiés par SANE ne se limite pas au monde Unix. Vous pouvez les utiliser avec Max/OSX, mais aussi sous Windows.

Ce qui suit n'est pas spécifique à un scanner, je prends juste le mien comme exemple pour illustrer la démarche.

Installation de SANE

Rien de bien sorcier pour cette étape qui sera achevée par un simple apt-get install sane-utils

Installation des drivers Epson

Epson fait parti de ces fabriquant à disposer de drivers pour Linux. C'est assez rare pour être salué et c'est d'ailleurs ce qui fait que je n'achète dans ce domaine (numérisation, impression) que du matériel Epson. la RX640 n'échappe pas à la règle et son drivers se trouve sur le site de la société Avasys qui semble être une filiale dédiée au développement Linux. Il sont fournis AVEC les sources, sous licence GPL, ce qui est encore plus rare (A titre d'information, les pilotes Linux des cartes nVidia ne sont fournit qu'en binaire fermés). Un aspect qui n'est pas négligeable car du coup le pilote Epson pour la RX640 est déjà intégré dans Saned. Il n'y a donc rien à faire de ce côté qu'installer SANE.

L'interface du site n'est pas spécialement intuitive mais l'on fini par dégoter le paquet iScan pour la RX640 (iscan-data_1.8.0-0_all.deb dans mon cas). Après l'avoir téléchargé, nous allons d'abord installer une dépendance qui empêchera dpkg de couiner.

rootapt-get install xsltproc
rootdpkg -i iscan-data_1.8.0-0_all.deb

Recherche du scanner

Tout est maintenant en place pour que l'on puisse trouver le scanner (qui doit être branché ;-). Pour cela, lancez la commande :

rootsane-find-scanner
(...)
found USB scanner (vendor=0x04b8, product=0x081c) at libusb:003:004
(...)

Parfait, le scanner est visible. Si ce n'était pas le cas, tentez un lsusb pour vérifier s'il est connu du module USB de Linux. Maintenant, nous allons déterminer si SANE a bien un driver pour notre scanner. Pour cela, lancez la commande :

rootscanimage -L
device `epkowa:libusb:003:004' is a Epson Stylus Photo Rx640/RX650 flatbed scanner

(Re)parfait. Comme je le disais plus haut, le driver Epson GPL (alias epkowa) a joué son rôle, le scanner est maintenant reconnu par Sane. A ce stade le scanner est reconnu en local. Nous allons maintenant publier cette périphérique sur le réseau.

Publication sur le réseau

Première chose à faire, vérifier que le port de SANE, 6566, est présente dans la liste des ports connus par votre serveur. Pour cela, éditer le fichier /etc/services et rechercher la chaîne 6566. Si cette ligne existe, vérifiez qu'elle correspond à ce qui suit, sinon, ajoutez là :

sane 6566/tcp saned # SANE network scanner daemon

Étape suivante, nous allons activer le service saned. Pour cela, il faut éditer le fichier /etc/default/saned pour remplacer RUN=no par RUN=yes et RUN_AS_USER=saned par RUN_AS_USER=root (les risques de piratage sur un réseau local domestique sont assez faibles ;-).

Dernière étape, modifiez le fichier /etc/sane.d/saned.conf et rajoutez dans la section ## Access list soit toutes les IP des clients (une par ligne), soit un masque plus générique comme 10.0.0.0/24. Ici aussi, la sécurité sur un réseau domestique n'est pas tellement à craindre. Maintenant si vous envisagez ce tutoriel sous un angle d'utilisation via internet ou dans une entreprise, je vous conseille la lecture de cet autre tutoriel.

La configuration étant terminée, nous pouvons enfin démarrer le service par /etc/init.d/saned start.

Vérifions maintenant que le port est bien en écoute par la commande suivante :

rootnetstat -anlp | grep 6566
tcp        0      0 0.0.0.0:6566                0.0.0.0:*                   LISTEN      7580/saned

A ce stade le scanner est "publié", vous pouvez donc aller sur une autre machine pour vérifier son bon fonctionnement.

Paramétrage du poste client

Sur le poste client, sane-utils doit aussi être installé, de même que le paquet sane tout court. Ceci fait, il n'est nécessaire que de modifier le fichier /etc/sane.d/net.conf pour y ajouter le nom de la machine à laquelle est connecté votre scanner. Imaginons qu'elle s'appelle serveur_scanner, vous devez donc avoir dans /etc/sane.d/net.conf la ligne :

serveur_scanner

Une fois le fichier sauvé, il suffit de vérifier que le scanner est bien visible en réutilisant la commande scanimage ##scanimage -L device `net:serveur_scanner:epkowa:libusb:003:004' is a Epson Stylus Photo Rx640/RX650 flatbed scanner

Le scanner est donc bien visible et prêt à être utilisé, par exemple via la commande scanimage elle-même :

scanimage --mode color --resolution 150 -d net:serveur_scanner:epkowa:libusb:003:004 > mon_image

Et voilà.

Petit script de scan

Pour terminer, voyons comment utiliser scanimage pour automatiser des numérisations nombreuses (genre un acte de propriété de 50 pages, au hasard ;-)

#! /bin/sh
# paramétres 
target_name="$1"  # Nom du fichier final
page_count="$2" # optionnel, le nombre de feuilles à numériser

# on supprime le dossier temporaire de numérisation, on le recrée et on s'y place
if [ -d scans ] ; then
rm -rf scans
fi
mkdir scans
cd scans

# utilisation de scanimage pour déterminer l'adresse de notre scanner
scanner_usb_id=$( scanimage -L | grep epkowa | cut -d "\`" -f2 | cut -d"'" -f1)

# options de numérisation par défaut
scanimage_options="--mode color --resolution 150 -d $scanner_usb_id"

# Choix entre 1 et plusieurs pages. 
if [ ! -z $page_count ] ; then
echo "Génération des fichiers sur le modèle $TIME_STAMP"
scanimage $scanimage_options --batch="$target_name %d"  --batch-count $page_count --batch-prompt
else
scanimage $scanimage_options > $target_name
fi

# conversion de toutes les images en JPEG
for file in * ; do 
echo "Conversion de $file en jpg"
convert -quality 80 "$file" "$file.jpg"
rm -rf "$file"
done

# Si nous avons plus d'une page, on converti les JPEG en un seul document PDF
if [ ! -z $page_count ] ; then
convert * "../$target_name.pdf"
else
mv -f * ..
fi
cd ..

# ménage
rm -rf scans

Il a l'air de rien ce script mais il est très très pratique. Lancé avec un nom de fichier en paramètre, il va scanner et générer le fichier JPEG correspondant.

Et si vous indiquez en plus du nom de fichier, un nombre de pages à scanner, il fabriquera cette fois un PDF de toutes les pages scannées.

Conclusion

SANE est un projet mature qui fonctionne merveilleusement bien. Si vous n'avez pas envie de jouer à la ligne de commande, il existe de très nombreux frontaux graphiques qui le prennent en charge (Kooka, XSane, GnomeScan, etc.)