Ubuntu 20.04 et imprimante Canon TR4550

J’ai récemment remplacé ma vieille imprimante Epson XP-215 qui avait fait son temps. Mon choix s’est porté sur une Canon TR4550 après un rapide tour des différents modèles disponibles à moins de 100€.

Et l’installation sous Ubuntu s’est révélée chaotique, particulièrement la partie scanner… Décidément, c’est le point noir avec Linux, qui peut vraiment se révéler bloquant pour l’utilisateur lambda. J’aurais du faire mon choix en fonction de mon système d’exploitation comme premier critère, cela m’aurait simplifié la vie.

Ce que je retiens, c’est que la marque Canon ne fait pas vraiment d’effort pour Linux, et fournit le service minimum (limited support). Vous verrez plus bas que le scanner est bien accessible avec le protocole escl, mais comme il « n’offre » pas le réglage du contraste, il ne sera pas utilisable avec simple-scan, l’outil par défaut de Gnome/Ubuntu.

Mais comme toujours, c’est comme ça que l’on apprend, voilà donc le fruit de mes investigations pour cette imprimante multi-fonction.

On y parle essentiellement de Wi-fi, de Sane, et de protocle eSCL.

L’essentiel

Pour les plus pressés, voilà ce que je retiens de tout cela : je ne parle que du scanner, n’ayant eu aucun souci avec l’imprimante.

Commencer par la page de référence de Sane pour voir si votre imprimante/scanner est supportée ou non. Si ce n’est pas le cas, les choses sont plutôt mal parties, et il vous faudra sans doute patienter à moins que le constructeur ne fournisse tout ce qu’il faut (genre scangearmp2).

On peut éventuellement mettre à jour la version du backend de Sane à partir de cette page. Cela peut débloquer la situation sur un modèle récent. Choisir la branche « SANE release », puis installer le PPA et mettre le système à jour. Pour vérifier la version du backend Sane sur son système, taper la commande sudo apt show libsane-common.

Enfin, si comme moi votre modèle précis n’est pas listé, ne pas hésiter à regarder un modèle proche, comme dans mon cas, l’entrée « PIXMA TR4500 series » ne m’apportant pas d’informations utiles, je suis allé voir le modèle TR4540 alors que j’ai une TR4550. C’est le mot clef ‘escl‘ qui a fait tilt !

Si j’ai bien compris, eSCL est un protocole d’HP et d’Apple (Apple AirScan or AirPrint scanning) qui permet de s’affranchir d’un pilote pour communiquer avec le scanner. Il fonctionne avec de nombreux modèles récents, et est implémenté dans Sane.

Enfin si j’ai bien réussi à faire fonctionner le scanner de cette façon, le résultat était mitigé, le document scanné manquant singulièrement de contraste (fond gris). Problème résolu avec Xsane au lieu de simple-scan, voir la partie « BUG » ci-dessous.

Sinon voilà comment j’ai investigué et réglé mes différents problèmes.

Connexion

Dans un premier temps, je connecte l’imprimante via le câble USB, que j’utilisais pour mon Epson. Suite aux problèmes rencontrés pour faire marcher le scanner, je suis passé en Wi-Fi, après avoir lu que c’était ce que recommandait Canon.

Pour éviter d’avoir le mot de passe de votre réseau Wi-Fi à taper sur le clavier de l’imprimante (un beau challenge en perspective si vous avez des caractères spéciaux dans le mot de passe !), je vous recommande d’utiliser le mode WPS (Wi-Fi Protected Setup) sur votre box, afin que l’appareil se connecte automatiquement. 😎

Impression

Pour la partie impression, pas de problème particulier, si ce n’est d’aller sur le site de Canon pour récupérer le pilote (version Debian archive pour Ubuntu).

Il faut alors extraire le fichier .tar.gz récupéré, puis aller dans le sous-dossier package, pour y trouver le fichier cnijfilter2_5.70-1_amd64.deb. Il ne reste plus qu’à l’installer (sudo apt install), puis aller ajouter l’imprimante via le panneau de configuration.

Jusque là tout va bien…

Scanner

Pour le scanner, ce sera une autre paire de manche…

Dans un premier temps, j’applique la même méthode (on ne change pas une équipe qui gagne), à savoir télécharger le pilote du site Canon. Je récupère de la même façon le fichier scangearmp2_3.70-1_amd64.deb, et je l’installe.

Scangear étant également une application, je tente de l’utiliser, même si à terme, c’est le scanner de Gnome que je souhaite utiliser. Mais cela ne fonctionne pas, le scanner n’est même pas détecté !

La recherche de scanner échoue systématiquement

En fait, comme indiqué sur cette page, scangearmp2 est un outil de scanning fourni par Canon, totalement indépendant de SANE, le système fourni par Debian. Finalement, cette application et le pilote ne servent à rien (en plus de ne pas fonctionner), autant la désinstaller tout de suite :

$ sudo apt remove scangearmp2

La première chose à faire est d’aller voir si le scanner est bien supporté par le backend Sane. Les infos sont sur cette page. On y voit :

On y voit que les « PIXMA TR4500 Series » sont bien supportées (Complete). Je laisse la ligne suivante pour les TR4540 pour info, elle va nous servir plus bas. La mienne est une TR4550, je le rappelle.

Avec les outils de base d’Ubuntu, le scanner est bien détecté (pour l’instant, je suis toujours en USB) :

$ scanimage -L
device `pixma:04A91854' is a CANON Canon PIXMA TR4500 Series multi-function peripheral
device `escl:http://127.0.0.1:60000' is a ESCL TR4500 series flatbed scanner

Hélas, si en lançant le scanner de Gnome (simple-scan), il apparaît bien, il est impossible de scanner : « impossible de se connecter… » :

Le scanner Canon apparaît bien dans la liste, mais…

Je lance alors simple-scan en mode commande , avec l’option ‘debug’ pour en savoir un peu plus :

pascal$ simple-scan -d
[+0,00s] DEBUG: simple-scan.vala:1720: Starting simple-scan 3.36.3, PID=13292
[+0,00s] DEBUG: unsetenv() is not thread-safe and should not be used after threads are created
[+0,01s] DEBUG: _g_io_module_get_default: Found default implementation dconf (DConfSettingsBackend) for ‘gsettings-backend’
[+0,06s] DEBUG: app-window.vala:1906: Loading state from /home/pascal/.cache/simple-scan/state
[+0,06s] DEBUG: app-window.vala:1885: Restoring window to 676x421 pixels
[+0,12s] DEBUG: scanner.vala:1539: sane_init () -> SANE_STATUS_GOOD
[+0,12s] DEBUG: scanner.vala:1545: SANE version 1.0.31
[+0,12s] DEBUG: scanner.vala:1606: Requesting redetection of scan devices
[+0,12s] DEBUG: scanner.vala:828: Processing request
[+0,51s] DEBUG: app-window.vala:1981: Saving state to /home/pascal/.cache/simple-scan/state
[+8,29s] DEBUG: scanner.vala:341: sane_get_devices () -> SANE_STATUS_GOOD
[+8,29s] DEBUG: scanner.vala:353: Device: name="pixma:04A91854" vendor="CANON" model="Canon PIXMA TR4500 Series" type="multi-function peripheral"
[+8,29s] DEBUG: scanner.vala:353: Device: name="escl:http://127.0.0.1:60000" vendor="ESCL" model="TR4500 series" type="flatbed scanner"
[+8,61s] DEBUG: app-window.vala:1981: Saving state to /home/pascal/.cache/simple-scan/state
[+11,47s] DEBUG: app-window.vala:1981: Saving state to /home/pascal/.cache/simple-scan/state
[+14,08s] DEBUG: app-window.vala:1981: Saving state to /home/pascal/.cache/simple-scan/state
[+15,77s] DEBUG: app-window.vala:1981: Saving state to /home/pascal/.cache/simple-scan/state
[+15,99s] DEBUG: app-window.vala:1981: Saving state to /home/pascal/.cache/simple-scan/state
[+16,04s] DEBUG: simple-scan.vala:1536: Requesting scan at 300 dpi from device 'pixma:04A91854'
[+16,04s] DEBUG: scanner.vala:1674: Scanner.scan ("pixma:04A91854", dpi=300, scan_mode=ScanMode.COLOR, depth=8, type=single, paper_width=0, paper_height=0, brightness=0, contrast=0, delay=3000ms)
[+16,04s] DEBUG: scanner.vala:828: Processing request
[+16,37s] DEBUG: app-window.vala:1981: Saving state to /home/pascal/.cache/simple-scan/state
[+16,56s] DEBUG: scanner.vala:889: sane_open ("pixma:04A91854") -> SANE_STATUS_DEVICE_BUSY
[+16,56s] WARNING: scanner.vala:893: Unable to open device: Device busy
[+16,89s] DEBUG: app-window.vala:1981: Saving state to /home/pascal/.cache/simple-scan/state

On voit à la fin le « SANE_STATUS_DEVICE_BUSY« , suivi d’un « Unable to open device: Device busy« .

J’ai d’abord pensé à faire une mise à jour du backend de SANE. Par défaut, avec Ubuntu 20.04, on est en version 1.0.29 :

$ sudo apt show libsane-common
[sudo] Mot de passe de pled : 
Package: libsane-common
Version: 1.0.29-0ubuntu5.2

Il faut aller sur cette page du Sane project, et regarder si une version plus récente est disponible sur la page sane-release. Je vois qu’une version 1.31 est disponible, j’installe donc le PPA et fait une update du système comme indiqué, et je vérifie que je suis bien passé en v1.0.31 :

$ sudo add-apt-repository ppa:sane-project/sane-release
sudo apt-get update
sudo apt show libsane-common
[sudo] Mot de passe de pascal : 
Package: libsane-common
Version: 1.0.31+git20210131-focal0

Mais le scanner n’est toujours pas détecté par simple-scan. En lisant la documentation Canon, je vois qu’ils « recommandent » d’utiliser l’imprimante en Wi-Fi plutôt qu’en USB. Je passe donc l’imprimante en Wi-Fi, en utilisant le bouton WPS sur la box, pour les raisons expliquées plus haut.

Et là, miracle, l’imprimante est non seulement détectée, mais utilisable par simple-scan :

Cette fois, le scan va fonctionner !

À noter toutefois que la qualité du scan est problématique, le fond du document scanné est grisâtre au lieu d’être blanc, et les options de contraste/luminosité n’ont aucun effet. Et si je compare le scan du même document avec un scan fait sous Windows avec les logiciels de Canon, il n’y a pas photo :

À gauche, un scan Windows, à droite le scan Ubuntu…

Création d’un bug

Le fait que les options de luminosité et de contraste n’aient aucun effet me faisait penser à un bug, j’en ai donc créé un sur le backend sane ici. Un dev l’a rapidement pris en compte, et m’a demandé des logs, à toutes fins utiles, voilà la commande pour tout savoir :

pascal$ SANE_DEBUG_ESCL=255 simple-scan 

Et la conclusion est vite tombée : il ne s’agit pas d’un bug, les réglages de contraste ne fonctionnent que si la caméra (du scanner) expose ces paramètres. Or ce n’est pas le cas, et simple-scan n’ayant pas de couche logicielle pour le faire, c’est mort. Par contre xsane permet de gérer cela.

Conclusion : je ne peux pas utiliser simple-scan avec ce scanner, je dois utiliser xsane. 🙁 Si j’avais su cela aupravant, je n’aurais pas acheté cette imprimante, car j’aime bien simple-scan.

Détection réseau

Dernier problème, la détection réseau du scanner ne fonctionnait dans une machine virtuelle (VM QEMU). Cette VM Ubuntu utilise le mode NAT de l’hôte pour le réseau, et cela à certains impacts.

Là aussi l’installation de l’imprimante fonctionnait, mais il fallait tout de même spécifier l’adresse IP de l’imprimante. C’est logique, le scan doit se faire uniquement sur le subnet du réseau de la VM…

Ajout de l’imprimante dans la VM

Reste le scanner… Cette fois, malgré la mise à jour du backend Sane, il n’est pas détecté, et sans doute pour la même raison.

Je reviens alors sur la page de référence où sont listés les modèles supportés par Sane, et par curiosité je vais voir le lien vers le man (l’aide) de sane-escl pour le modèle TR4540. Rappelez-vous, mon imprimante est détectée ainsi (une fois connectée en Wi-Fi sur mon PC) :

pascal$ scanimage -L
device `escl:https://192.168.1.29:443' is a Canon TR4500 series platen,adf scanner

On retrouve le protocole « escl » dans la ligne d’identification …. Je lis le man, puis édite le fichier /etc/sane.d/escl.conf de la VM, et je vois que je peux y ajouter mon propre device s’il n’est pas détecté automatiquement. Aussitôt dit, aussitôt fait :

# For example, the lines below are for one device, but if you have several devic
es to use, you can duplicate the lines below as many times as you have devices.
# You can also configure a device on a single line starting with 'device'
# by writing a complete URL and an optional model name.

#device http://123.456.789.10:8080 OptionalModel1
#device https://123.456.789.10:443 "Optional Model 2"
#device unix:/run/proxy.sock:http://123.456.789.10:80
device https://192.168.1.29:443 "Canon TR4550 Series"

J’ai ajouté mon imprimante à la dernière ligne, avec les infos données sur le PC par la commande scanimage -L. Je lance simple-scan, et voilà, le scanner est bien détecté dans ma VM. Et voilà, problème réglé ! 😎

Finalement, je suis assez content : j’ai compris plein de choses à propos de Sane, et je sais que la prochaine fois, je saurai chercher dans la bonne direction beaucoup plus rapidement.

2 commentaires sur “Ubuntu 20.04 et imprimante Canon TR4550”

  1. Bonjour,merci pour votre article! j’ai le même problème de scanner que vous, c’est un vieux scanner à plat canon (LIDE 35) , mais qui fonctionne à merveille jusqu’à ubuntu (mate) 18.04, y compris pour les réglages contrastes et luminosité!

    Et puis, à la mise à jour vers Ubuntu mate 20.04, surprise, luminosité et contraste étaient inopérants, même chose pour le tout dernier ubuntu mate 21.04!

    Simple scan est parfait, simple, intuitif, alors que l’interface de xsane m’a donné des boutons, ça rend le scan bien plus fastidieux pour un résultat moins bon.

    Ma « solution » est pour l’instant de rester sur Ubuntu 18.04, mais ça ne va pas durer des années…

    Le fait que ça fonctionne sur une ancienne version est bien la preuve que ça peut tout à fait fonctionner sur une plus récente, et qu’il y a anguille sous roche quelque part…

    1. Bonjour Simon,
      Oui, à ta place, je me servirai des différentes commandes utilisée dans l’article pour faire le point sur ce que tu utilises avec la 18.04 : scanimage -L, sudo apt show libsane-common, et éventuellement une trace avec SANE_DEBUG_ESCL=255 simple-scan. Ensuite, tu fais un backup de ton dossier /etc/sane.d où se trouvent tous les dossiers de conf de sane.
      Ensuite, sous 20.04, tu fais une trace pour comparer (avec meld par exemple), puis tu fais en sorte de reproduire ton environnement 18.04 d’abord avec les .conf, et peut-être en « downgradant » la version de libsane.

Répondre à Simon Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *