badraxas.

J’ai réparé le Wi-Fi de mon imprimante… en désactivant son Wi-Fi

À la maison, imprimer un document était devenu une petite épreuve de patience. Ma femme voulait imprimer quelque chose et l’imprimante avait encore disparu du réseau. Il fallait alors essayer de la redémarrer pour espérer la retrouver. À force, ça commençait sérieusement à l’agacer.

Imprimante HP ENVY Photo 6234 reliée par USB à un Raspberry Pi 3 utilisé comme serveur d’impression réseau.

Le plus frustrant ? Notre imprimante HP imprimait et scannait parfaitement. Seul son Wi-Fi faisait des siennes.

Plutôt que changer une imprimante qui fonctionnait encore très bien, j’ai cherché comment partager une imprimante USB sur le réseau de la maison avec un vieux Raspberry Pi 3 qui traînait dans un de mes tiroirs.

Transformer une imprimante USB en imprimante Wi-Fi avec un Raspberry Pi

Le plan est assez simple : connecter l’imprimante en USB au Raspberry Pi, puis exposer ses fonctions sur le réseau de la maison.

Mon Raspberry Pi (baptisé Hermès comme le messager dans la mythologie grecque) est installé sagement à côté de l’imprimante. Mes besoins sont simples et j’ai choisi d’utiliser Raspberry Pi OS Lite. Je n’ai pas besoin de l’interface graphique et ,grâce à Raspberry Pi Imager, il se connecte lui-même au réseau en Wi-Fi.

Oui, je remplace un Wi-Fi par un autre Wi-Fi. La seule différence c’est que celui du Raspberry est stable.

L’imprimante, elle, n’a plus le fardeau de gérer une connexion réseau.

Avant : imprimante HP connectée directement au Wi-Fi instable. Après : Raspberry Pi connecté en Wi-Fi et imprimante reliée en USB, avec AirPrint et AirScan.

Une question restait en suspens : comment partager l’impression et le scanner depuis le Pi ?

C’est là que mon installation a pris une direction assez inattendue.

Première tentative : CUPS et HPLIP

Quand on cherche à partager une imprimante USB depuis Linux, CUPS s’impose rapidement comme un incontournable.

CUPS (Common UNIX Printing System) permet de gérer les imprimantes, les pilotes et les files d’attente. Pour une imprimante HP, on utilise également HPLIP qui installe les pilotes adaptés aux nombreux modèles de la marque.

J’ai donc commencé par installer les composants classiques :

Bash
sudo apt update
sudo apt install cups hplip printer-driver-hpcups avahi-daemon

Après avoir créé une file d’impression avec le pilote de ma HP ENVY Photo 6200 Series, j’ai lancé une page de test.

Ça s’imprime !

Première victoire : le Raspberry Pi communique bien avec l’imprimante en USB.

Ma joie a été de courte durée parce qu’il y a un problème…

Cinquante secondes pour imprimer une page

Entre l’envoi d’un document et le début de son impression, il se passe environ 50 secondes.

On ne s’en rend pas compte mais attendre 50 secondes pour une pauvre page, c’est très long.

Bien évidemment, j’accuse l’imprimante : elle met probablement du temps à sortir de veille, à initialiser ses mécanismes ou à préparer l’impression.

J’aurais pu m’arrêter là. Après tout, l’impression fonctionnait et la connexion réseau ne disparaissait plus. Et puis quel humain sain d’esprit s’amuserait à essayer de comprendre les états d’âme d’une imprimante ?

Mais bon, remplacer un problème agaçant par un autre n’était pas vraiment l’objectif. Ces 50 secondes me frustraient.

IPP-over-USB : imprimer et scanner sans CUPS

En examinant les périphériques USB du Raspberry Pi, je découvre que ma HP prend en charge IPP-over-USB.

IPP (Internet Printing Protocol) est un standard d’impression utilisé notamment par les imprimantes réseau modernes.

Avec IPP-over-USB, une imprimante compatible peut utiliser ces mêmes échanges directement à travers son câble USB.

C’est précisément ce qu’exploite ipp-usb, un projet OpenPrinting.

Le logiciel fait le lien entre les services IPP de l’imprimante et les appareils qui veulent y accéder.

Encore mieux, lorsque l’imprimante le permet, il peut également exposer son scanner avec eSCL (encore un standard…), le protocole utilisé par AirScan.

Dans mon cas, cela signifiait que je pouvais potentiellement retrouver :

  • l’impression réseau avec IPP et AirPrint ;
  • la numérisation avec eSCL et AirScan ;
  • le tout sans pilote HP spécifique sur le Raspberry Pi.

Vérifier la compatibilité

Sur Hermès, je lance :

Bash
sudo ipp-usb check

Résultat :

HAML
IPP over USB devices:
 Num Device              Vndr:Prod  Model
   1. Bus 001 Device 004 03f0:1254 "HP ENVY Photo 6200 series"

Mon imprimante est bien détectée.

Après démarrage du service :

Bash
sudo systemctl start ipp-usb
sudo ipp-usb status

Le périphérique apparaît avec le statut OK.

Ça commence à devenir intéressant.

Et le scanner ?

Bonne surprise : ipp-usb détecte également le service de numérisation eSCL.

Après avoir configuré son partage sur mon réseau local, je retrouve finalement mon imprimante dans Transfert d’images, sur macOS.

Je lance un scan de trois pages. Ça fonctionne.

J’ai maintenant les deux fonctions principales de l’imprimante qui sont utilisables depuis le Raspberry Pi. Mais j’ai toujours ces 50 secondes d’attente avant l’impression.

Les cinquante secondes ne venaient pas de l’imprimante

Puisque la HP sait parler IPP, j’essaie une nouvelle file CUPS configurée en IPP Everywhere, cette fois sans le pilote HPLIP.

L’impression fonctionne. Les capacités de l’imprimante sont correctement récupérées, notamment la couleur et les niveaux d’encre.

Mais le délai est toujours présent.

Je décide de regarder les journaux d’ipp-usb pour comprendre à quel moment le travail arrive réellement jusqu’à l’imprimante.

ÉvénementHeure
Travail envoyé à l’impression14:52:34
Première requête reçue par ipp-usb14:53:25
Échange USB et réponseEnviron 1 seconde

Intéressant, 51 secondes s’écoulent avant même qu’ipp-usb ne reçoive la tâche.

J’ai été mauvaise langue, l’imprimante ne passe pas cinquante secondes à se réveiller. Dans cet essai, la requête ne lui est tout simplement pas encore parvenue.

L’attente se trouvait en amont, dans le chemin d’impression utilisant CUPS.

Je n’ai pas identifié le responsable exact de ce délai mais j’avais maintenant une piste beaucoup plus intéressante.

Mais surtout : pourquoi passer par CUPS si ipp-usb expose déjà directement l’imprimante sur le réseau ?

Le changement de direction : supprimer CUPS

Je tente donc quelque chose de plus simple.

Sur mon Mac, j’ajoute directement l’imprimante annoncée par ipp-usb, sans utiliser la file CUPS du Raspberry Pi.

Elle apparaît sous un nom similaire à :

HP ENVY Photo 6200 series [G9TLA] (USB)

J’envoie une impression. Et là, miracle, elle part presque immédiatement.

Adieu les 50 secondes à attendre.

Le Mac communique directement avec ipp-usb, qui transmet les échanges à l’imprimante via USB.

Mon serveur d’impression classique venait de perdre sa raison d’être.

Sur le Raspberry Pi, en tout cas : macOS utilise toujours ses propres composants d’impression, mais je n’ai plus besoin d’héberger une file CUPS intermédiaire sur Hermès.

J’étais plutôt content du résultat.

Parce qu’une bonne histoire a plusieurs retournements de situation, il restait une dernière surprise.

Mon imprimante couleur devient une « Generic PCL Laser Printer »

Au premier ajout direct sur macOS, l’imprimante est identifiée comme une « Generic PCL Laser Printer ».

Une imprimante laser générique alors que ma HP est pourtant une imprimante à jet d’encre couleur.

Et le problème ne s’arrête pas au nom, la fenêtre d’impression a perdu l’option de sélection de la couleur.

Pourtant, les informations IPP renvoyées par la HP confirment bien qu’elle sait imprimer en couleur. J’arrive à forcer une impression en noir et blanc.

L’imprimante fonctionne mais ce qui cloche, c’est son identification sur le Mac.

Le problème des anciennes annonces Bonjour

À force de multiplier les essais, j’avais accumulé plusieurs chemins d’accès à la même imprimante :

  • le Wi-Fi natif de la HP
  • la première file CUPS avec HPLIP
  • la file CUPS en IPP Everywhere
  • le service direct publié par ipp-usb

Entre les annonces réseau et les anciennes imprimantes enregistrées par macOS, difficile de savoir quel appareil le système utilisait réellement.

J’ai donc supprimé les anciennes entrées HP sur le Mac et désactivé le Wi-Fi sur l’imprimante.

Puis j’ai coupé le service de découverte réseau pour qu’il redémarre :

Bash
sudo killall -HUP mDNSResponder

Enfin, j’ai ajouté de nouveau l’imprimante annoncée par le Raspberry Pi, celle portant le suffixe (USB).

Cette fois, macOS la reconnaît correctement comme une HP ENVY Photo 6200 Series AirPrint.

Le choix couleur est revenu.

Le scanner est disponible.

Les niveaux d’encre remontent correctement.

Bref, tout fonctionne.

Le dernier obstacle n’était donc ni le câble USB, ni le Raspberry Pi, ni l’imprimante : c’était le résultat de mes tests successifs.

Comme quoi, parfois, faire du ménage peut parfois être plus efficace qu’essayer d’installer encore un logiciel.

Comment partager une imprimante USB avec ipp-usb sur Raspberry Pi ?

Après cette odyssée, voici la procédure que je retiendrais pour repartir sur une installation propre.

Elle concerne les imprimantes prenant en charge IPP-over-USB. Si votre modèle est une imprimante USB plus ancienne, une autre solution reste possible. J’y reviendrai juste après.

1. Installer les composants

Sur un Raspberry Pi équipé de Raspberry Pi OS Lite, relié à l’imprimante en USB :

Bash
sudo apt update
sudo apt install ipp-usb avahi-daemon

Vérifiez ensuite la détection :

Bash
sudo ipp-usb check
sudo ipp-usb status

L’imprimante doit apparaître parmi les périphériques compatibles.

Si ce n’est pas le cas, n’en concluez pas que toutes les solutions de partage USB sont impossibles. Simplement, cette méthode n’est probablement pas adaptée à votre modèle.

2. Partager les services sur le réseau local

Dans mon installation, ipp-usb devait être configuré pour accepter les connexions provenant des autres appareils du réseau.

Le fichier concerné est :

INI
/etc/ipp-usb/ipp-usb.conf

Dans la section [network] existante :

INI
[network]
interface = all
dns-sd = enable

Le premier paramètre autorise l’écoute sur toutes les interfaces réseau.

Le second active l’annonce automatique des services via DNS-SD, utilisée notamment par Bonjour et AirPrint. C’est également utilisé sur Android avec le protocole mDNS.

Appliquez les changements :

Bash
sudo systemctl restart ipp-usb
sudo ipp-usb status

Attention : cette configuration est destinée à un réseau local de confiance. Elle rend les services d’impression et de numérisation accessibles aux machines pouvant joindre le Raspberry Pi. N’exposez pas ces ports sur Internet.

3. Ajouter l’imprimante sur les appareils

Sur macOS (ou sur votre os habituel), recherchez l’imprimante réseau annoncée par ipp-usb. Dans mon cas, le suffixe (USB) permet de la distinguer de l’ancienne connexion Wi-Fi.

Sur iPhone, le périphérique apparaît comme une imprimante AirPrint.

Sur Android, la découverte dépend du système et de ses services d’impression. J’y reviens dans mes résultats de test.

Si vous avez encore plusieurs annonces pour la même imprimante, pensez à désactiver son Wi-Fi natif et à nettoyer les anciennes files. Si elle fait wi-fi direct, pensez à le désactiver également.

4. Vérifier l’impression et la numérisation

Sur macOS, on peut visualiser les annonces des services d’impression :

Bash
dns-sd -B _ipp._tcp local.

Et celles des scanners :

Bash
dns-sd -B _uscan._tcp local.

Dans mon installation finale, je retrouve une annonce d’impression et une annonce de numérisation provenant d’Hermès.

Après extinction et redémarrage complet du Raspberry Pi, ipp-usb fonctionne toujours :

Bash
systemctl is-active ipp-usb
sudo ipp-usb status

Le service est actif et l’imprimante présente un statut OK.

Petite particularité : chez moi, l’unité systemd d’ipp-usb est statique. Il est donc normal que systemctl enable ipp-usb refuse son activation classique. Le démarrage automatique est géré par la détection du périphérique USB.

Et si votre imprimante est simplement USB, sans IPP-over-USB ?

C’est une distinction importante.

Toutes les imprimantes USB ne prennent pas en charge IPP-over-USB. Une imprimante plus ancienne peut utiliser un protocole propriétaire ou nécessiter un pilote spécifique.

Le Raspberry Pi peut malgré tout servir de serveur d’impression réseau, mais cette fois CUPS redevient une solution pertinente.

On peut l’installer sur le Raspberry Pi :

Bash
sudo apt update
sudo apt install cups avahi-daemon

Commencez par rechercher le périphérique :

Bash
lpinfo -v

La commande liste les périphériques et URI d’impression connus du système.

Il faut ensuite créer une file CUPS avec le pilote ou le mode d’impression compatible avec votre modèle. Pour certaines imprimantes HP, HPLIP peut être utile. Pour d’autres marques, il faudra rechercher le pilote correspondant.

Une fois la file configurée et testée localement, on peut activer son partage :

Bash
sudo cupsctl --share-printers

Puis autoriser le partage de cette file :

Bash
sudo lpadmin -p NOM_DE_LA_FILE -o printer-is-shared=true

Remplacez NOM_DE_LA_FILE par le nom réellement créé dans CUPS.

Les autres appareils pourront alors utiliser l’imprimante via le service réseau proposé par CUPS, sous réserve de leur compatibilité avec les formats et pilotes disponibles. La découverte automatique peut également nécessiter une configuration adaptée d’Avahi.

Par contre, ça ne transforme pas automatiquement toutes les imprimantes USB en modèles AirPrint natifs. CUPS peut servir de passerelle, mais les capacités réellement disponibles dépendent du pilote, de la file et du client.

Par contre, concernant le scanner, c’est un autre sujet. Sur une ancienne multifonction USB, le partage de l’impression ne garantit pas celui de la numérisation. Selon le modèle, il faudra examiner sa compatibilité avec SANE (décidément, il faut s’accrocher avec les acronymes) et les solutions de partage du scanner.

La bonne approche est donc de vérifier les capacités de votre imprimante avant de choisir votre architecture, plutôt que d’installer systématiquement toute une pile logicielle.

macOS, AirPrint sur iPhone et Android

Une fois le montage finalisé, je voulais vérifier qu’il était utilisable au quotidien par toute la maison.

macOS : impression et scan fonctionnels

C’est sur mon Macbook que j’ai effectué l’essentiel du dépannage.

Après nettoyage des anciennes imprimantes, j’ai validé :

  • l’impression couleur et noir et blanc ;
  • la remontée des niveaux d’encre ;
  • la numérisation depuis Transfert d’images ;
  • la découverte réseau après redémarrage ;
  • une impression qui démarre presque immédiatement.

Le résultat est nettement plus agréable que ma première configuration CUPS.

iPhone : AirPrint sans configuration particulière

Sur iPhone, l’impression fonctionne également.

L’imprimante est détectée comme un périphérique AirPrint et je n’ai pas besoin de renseigner son adresse IP.

C’est exactement ce que je recherchais pour un usage familial : ouvrir un document, choisir l’imprimante et imprimer.

Pas expliquer comment fonctionne IPP à chaque fois que quelqu’un veut sortir une feuille.

Android : une différence intéressante entre deux systèmes

J’ai testé une première fois avec la ROM Treble basée sur Android 15 que j’ai installé sur ma Lenovo P11 Pro.

La découverte automatique ne fonctionnait pas. Génial…

En revanche, l’ajout manuel de l’imprimante avec son adresse IPP permettait d’imprimer :

ipp://192.168.1.46:60000/ipp/print

C’est l’adresse utilisée sur mon installation. Le port dépend de la configuration et du périphérique géré par ipp-usb. Pensez à réserver l’IP du Raspberry dans le serveur DHCP de votre box afin d’éviter qu’elle ne change.

Le service fonctionne donc, mais la découverte automatique ne fonctionne pas dans cet environnement.

J’ai ensuite testé sur un Google Pixel 8a avec Android d’origine.

Cette fois, l’imprimante a été reconnue immédiatement, sans configuration manuelle.

C’est une bonne illustration du fait qu’une ROM alternative ne représente pas nécessairement le comportement d’Android en général.

Conclusion

Au départ, mon objectif était assez terre à terre : que ma femme (et moi) puissions imprimer sans devoir aller redémarrer une imprimante qui avait encore disparu du réseau.

J’avais une multifonction qui fonctionnait toujours, un Raspberry Pi 3 inutilisé et un câble USB.

J’ai commencé avec CUPS et HPLIP, découvert IPP-over-USB, passé du temps à chercher cinquante secondes de latence, puis bataillé avec le cache Bonjour de macOS.

Le résultat final est pourtant très simple :

  • le Raspberry Pi assure la connexion Wi-Fi ;
  • l’imprimante communique avec lui en USB ;
  • ipp-usb expose l’impression et le scanner sur le réseau.

Il y a évidemment un compromis : le Raspberry Pi doit rester allumé et disponible. C’est un appareil supplémentaire à alimenter et à maintenir. Côté consommation, un Raspberry Pi 3 tourne autour de 1,5 à 2,5 W au repos selon sa config, soit entre 13 et 22 kWh par an s’il reste en permanence allumé. Ce n’est pas une mesure réalisée sur mon installation mais des ordres de grandeurs donné par la Raspberry Pi Foundation. À 0,20 €/kWh, on parle d’environ 3 à 4,50 € par an, hors pertes d’alimentation et variations de charge.

Mais je l’avais déjà sous la main, et il m’a permis de conserver une imprimante parfaitement utilisable.

Surtout, cette expérience m’a rappelé quelque chose que j’ai tendance à oublier quand je commence à empiler les services : ajouter des composants ne rend pas forcément un système meilleur.

Je suis parti pour construire un serveur d’impression et j’ai terminé en supprimant la couche qui ne m’apportait rien.

Finalement, pour réparer le Wi-Fi de mon imprimante, il suffisait presque de lui enlever son Wi-Fi.

Et à la maison, pouvoir imprimer un document sans bataille préalable, c’est déjà une belle victoire.

Pour suivre les prochains articles et mes projets :

Flux RSS Les nouveaux articles, directement dans ton lecteur.

La discussion.

0 commentaires

Commentaire

L’adresse email ne sera pas publiée. Nom, email et commentaire obligatoires.