Partager un scanner en réseau

Je numérise tous les documents que je reçois, c'est pratique pour le mettre dans mon cloud personnel hébergé chez moi.
Comme cette tâche est fastidieuse et que mon espace de vie n'autorise pas d'avoir un scanner toujours à coté de mon laptop, j'ai décidé de le partager sur le réseau local pour pouvoir y accéder facilement.

Voici donc les étapes à suivre pour réaliser ce partage de scanner en réseau. Seuls des logiciels Libres sont utilisés ici. Vous utiliser un Windows ou un MAC ? : TL;DR; passez votre chemin c'est pas traité dans l'article.

Voici le matériel utilisé :

  • un petit ordinateur (raspberrypi par exemple)
  • un scanner usb

En parlant petit ordinateur, vivement qu'on puisse avoir un raspi zero avec un chip wifi intégré, ca évitera l'effet pieuvre de l'actuel :

RaspberryPi Zero et scanner

Le Hub USB est là uniquement pour deux choses : avoir une alimentation suffisante pour l'ensemble et pour pouvoir avoir simultanément du Wifi via un dongle USB et le scanner.

Coté logiciel on utilise la librairie Sane (Scanner Access Now Easy; c'est pas juste un titre marketoaccrocheur : si le partage d'imprimante en réseau était aussi simple que c'est le cas avec les scanners, l'humanité serait plus belle :))

Passons à la mise en pratique.

Sur notre petit ordinateur

Sur notre petit ordinateur, on va installer les logiciels suivants :

  • libsane : backends sane
  • sane-utils : daemon sane, commande scanimage entre autres
$ sudo apt install libsane sane-utils

Ensuite, on branche le scanner et on part à sa recherche avec la commande scanimage pour vérifier que libsane dispose du backend adéquat :

$ scanimage -L
device `genesys:libusb:001:006' is a Canon LiDE 110 flatbed scanner

Notre scanner est reconnu, on remarque que le backend utilisé est "genesys", qu'il est branché en USB, sur le bus 1, port 6 et que c'est un "< vous savez lire > scanner" :)

Dernière configuration nécessaire sur notre petit ordinateur : indiquer quelles machines seront autorisées à utiliser nos scanners sur le réseau.

Pour faire ça, on va éditer le fichier /etc/sane.d/saned.conf pour ajouter la liste des machines autorisées, ou, si on veut pas trop se prendre le choux, l'ensemble du réseau local.

Dans mon cas, j'ai ajouté la ligne suivante au fichier :

192.168.1.0/24

Autorisant ainsi toutes les machines de mon réseau 192.168.1.X à accéder au scanner.
Après avoir sauvegardé ce fichier, on va indiquer au daemon sane qu'il doit être actif en éditant le fichier /etc/default/saned, en passant la variable RUN à yes :

$ cat /etc/default/saned
RUN=yes
RUN_AS_USER=saned

Ensuite, indiquer à systemd d'activer une socket pour saned :

$ sudo systemctl enable saned.socket

Puis on la démarre :

$ sudo systemctl start saned.socket

On prendra soin de relever l'adresse IP de cet ordinateur :

$ ip a s dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether ad:3f:12:42:42:42 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.12/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever

Soit "192.168.1.12" ici.

Si vous utilisez un parefeu, et vous devriez, on doit ajouter la règle suivante (adaptez les valeurs à votre setup) :

$ sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 6566 -j ACCEPT
Sur chaque ordinateur devant accéder au scanner

On installe nos outils classiques pour scanner un document :

  • libsane : backends sane (le backend net est celui qui nous intéresse ici)
  • sane-utils : daemon sane, commande scanimage entre autres
  • simple-scan : une belle interface graphique qui permet de faire du scan simplement (c'est celui par défaut sous ubuntu notamment)

Maintenant, configurons le backend "net", qui permet d'accéder à un scanner depuis le réseau. Ouvrir le fichier /etc/sane.d/net.conf, ajouter l'adresse IP du petit ordinateur :

$ cat /etc/sane.d/net.conf
192.168.1.12

Vérifions que notre ordinateur client détecte bien le scanner partagé sur le réseau :

$ scanimage -L
device `net:192.168.1.12:genesys:libusb:001:006' is a Canon LiDE 110 flatbed scanner

Voila, notre scanner est prêt à l'emploi ❤