J’ai toujours détesté les imprimantes domestiques à jet d’encre. Ça bourre le papier, l’encre sèche, c’est connu pour l’obsolescence programmée, ça prend 3h à démarrer et se préparer en faisant des bruitages ridicules, … Je n’ai aucune patience pour ces trucs là. Par contre les imprimantes laser ça marche bien (ou mieux). C’est plus cher à l’achat, mais ça imprime bien, très vite, et l’encre ne sèche pas puisqu’il n’y a pas d’encre. On m’a très gentiment donné une ancestrale et vénérable HP LaserJet P2035, et bien que ses fonctionnalités soient spartiates (Noir et Blanc, recto, et c’est tout), ça vaut à mes yeux bien plus que l’une de ces saloperies multifonction jet d’encre.
Configuration
Cette imprimante ne dispose pas de port réseau ni de puce Wi-Fi. La communication s’effectue soit en USB Type-B, soit en port parallèle. Nous sommes en 2009, je passais mon brevet des collèges.
Je n’ai pas spécialement envie de placer ce bloc de plastique dans mon salon, mais il faut bien pouvoir s’y connecter pour imprimer… Alors direction le homelab : je la branche à mon serveur, et je fais un USB passthrough vers une nouvelle VM. Je choisis un Linux Mint.
On nettoie un peu l’OS de ses paquets inutiles :
emile@cups:~$ sudo apt purge libreoffice-* vlc celluloid pix gimp* xreader xed thunderbird transmission-*
emile@cups:~$ sudo apt autoremove --purge
emile@cups:~$ sudo apt clean
L’imprimante est détectée toute seule par CUPS, un outil open-source bien connu pour gérer ses imprimantes sous Unix, Linux et dérivés. Pas besoin d’installer de driver (j’ai choisi celui recommandé pré-installé par CUPS) et c’est tant mieux, car les drivers officiels sont obsolètes, je n’ai même pas réussi à les installer (notamment en raison d’une dépendance qui a changé de nom entre temps). Il suffit de se rendre sur l’inteface de CUPS pour retrouver l’imprimante et imprimer une page de test : https://localhost:631. J’en ai profité pour la renommer et activer le partage.
Il faut maintenant y accéder à distance.
Partage
Depuis un PC Windows, les imprimantes sont généralement partagées avec SMB, ce que CUPS ne gère par nativement. Mais on peut aussi utiliser IPP. Pour paramétrer cela, il faut aller dans :
- Paramètres Windows
- Bluetooth et appareils
- Imprimantes et scanner
- Ajouter un appareil
- Ajouter un nouvel appareil manuellement
- Ajouter une imprimante à l'aide d'une adresse IP ou d'un nom d'hôte
Remplir les infos. Moi j’ai configuré un enregistrement DNS donc je peux mettre : https://print.homelab.emiletouron.fr:631/printers/Sabre-laser. « Et voilà », comme disent les Anglais. Evidemment on va éviter d’exposer le port 631 sur Internet.
Bonus : un scanner
J’en fais quoi de cette foutue imprimante jet d’encre ? Sa fonctionnalité scanner m’intéresse : elle fonctionnelle, elle. Alors je la branche au serveur, je la monte dans la VM. CUPS ne gère pas les scanner mais j’ai trouvé un outil formidable : scanservjs. Ce programme écrit en Node.js permet d’héberger une page web qui va nous permettre de contrôler le scanner.
J’ai rencontré un problème de taille pour le faire fonctionner. Quand l’imprimante s’éteint (tout le temps), le serveur web ne la voit plus, même quand elle revient. Pour contourner ça, il a fallu écrire une règle udev qui relance le serveur dès que l’imprimante est détectée. C’est bien, Linux.
On peut récupérer les infos utiles avec cette commande, juste après le démarrage de l’imprimante : udevadm monitor --environment --udev. On obtient :
La valeur de l’attribut idVendor va nous intéresser. On pourrait filtrer sur d’autres valeurs, mais dans mon cas ça suffit. Ecrivons la règle : quand un périphérique USB dont l’idVendor est 04a9 est ajouté, relancer le conteneur scanservejs.
emile@cups:~$ sudo vim /etc/udev/rules.d/99-scanservjs.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="04a9", ACTION=="add", RUN+="/usr/bin/docker-compose -f /home/scan/scanservjs/docker-compose.yml restart"
emile@cups:~$ sudo udevadm control --reload-rules