dimanche 8 février 2015

Imprimante Zebra USB, ZPL et CUPS - Damned CUPS!!!

Voici un petit bout d'histoire autour d'un imprimante Zebra USB branchée sur une machine Linux (Linux Mint Mate 17) et d'un acharné qui voulait envoyer du ZPL sur sa Zebra.

L'imprimante à étiquette Zebra, ZPL et Linux
Chez MCHobby (shop.mchobby.be) nous utilisons Linux Mint pour toutes nos tâches et développements.
Ainsi, pour améliorer et accélérer notre étiquetage à partir des infos de notre PrestaShop, nous avons branché une Zebra LP 2824 USB sur notre ordinateur.

Comme nous développons nos propres petits outils PrestaShop en Python (cfr Lcd Order Track et PrestaConsole), nous pourrions facilement créer nos étiquettes à la demande. 

Revenons à nos moutons...

Ensuite, nous avons essayer d'envoyer des commandes ZPL vers l'imprimante. Les commandes ZPL permettent de contrôler directement l'imprimante et le contenu à imprimer.

Fichier de démo et agaceries CUPS
Comme suggéré dans la documentation technique de Zebra, nous avons créé un petit petit fichier de démonstration demo.zpl

^XA
^FO100,50^ADN,36,20^FDxxx^FS
^XZ
 
Ce fichier fût créé à l'aide de Geany (un excellent éditeur de code), avec LF (LineFeed) comme séparateur de ligne et un encodage de fichier en UTF-8.

Ensuite, j'ai essayé d'envoyer le fichier directement vers l'imprimante à l'aide de:

  cat demo.zpl > /dev/usb/lp0

pour continuellement recevoir le message d'erreur

  /dev/usb/lp0: Permission denied

Cette erreur étant provoquée par le système de gestion des impressions (CUPS).

Je ne pouvais pas adresser directement le périphérique à cause de CUPS... mais je ne pouvais pas retirer CUPS car nous l'utilisons pour d'autres impressions (par exemple notre imprimante réseau HP3015).

Sacré nom de Dieu de CUPS!
Cette simple tâche d'envoyer un fichier brute (RAW comme disent les anglais) sur notre Zebra fût l'une des tâches les plus complexes à réaliser.
CUPS n'était pas vraiment en cause... c'est plutôt mon manque de connaissance de la gestion des imprimantes CUPS qui est en cause.

Ce que nous devons faire, c'est installer la Zebra comme une imprimante RAW  et non comme une Zebra! 

Installer la Zebra en RAW dans CUPS
Pour commencer,
Branchez votre Zebra USB puis ouvrez le gestionnaire d'imprimante.
Sur Linux Mint, il ressemble à ceci...

Cliquez sur le bouton "+" pour ajouter une imprimante.

A ce stade, vous pouvez sélectionner votre Zebra USB et passer à l'étape suivant.
Attention, c'est à partir ICI qu'il faudra faire le bon choix!!
Pour commencer, sélectionnez l'imprimante Generique (même si Zebra et la bonne imprimante existe dans la liste, c'est une imprimante générique qu'il faut installer)

Ensuite, vous sélectionnez le pilote "Raw Queue" (file d'impression Raw/brute):


De la sorte, tous les fichiers envoyés cette queue d'impression Zebra sera redirigé directement vers l'imprimante sans aucun traitement intermédiaire!

Point final très important... il faut nommer la file d'impression de façon intelligible!
Nous avons remplacé le nom proposé par "zebra-raw". Ce sera bien plus pratique par la suite. Nous vous conseillons vivement de simplifier le nom court.
 
Voila, quand c'est fini, vous vous trouvez vers avec une nouvelle imprimante (Printer queue / File d'impression) nommée zebra-raw et n'utilisant pas de pilote d'imprimante interprétant les données que vous voulez envoyer vers la Zebra


Chouette, c'est enfin prêt!
 
Envoyer le fichier demo.zpl vers la Zebra
Comme vous l'avez vu ci-dessus, nous avons crée une queue de traitement "zebra-raw" pour notre Zebra LP 2824 Plus.

A la suite de cela, il a été possible d'envoyer des données brutes (RAW) contenant des commandes ZPL directement sur l'imprimante à l'aide de l'utilitaire lp:

lp -d zebra-raw demo.zpl


Et voila, maintenant, cela fonctionne parfaitement!

Il nous reste plus qu'a attaquer la file d'impression/printer queue en Python et mon bonheur sera complet...

1 commentaire:

Lucas a dit…

Merci beaucoup pour le tuto sur l'imprimante Zebra, ça m'a bien aidé !