Obtenir la liste des imprimantes installées


8

À l'intérieur d'un script, j'envoie un certain fichier à imprimer en utilisant la lprcommande sur une imprimante sélectionnée par l'utilisateur.

La liste des imprimantes, à partir de laquelle l'utilisateur sélectionne celle à utiliser, j'obtiens en utilisant la lpstat -acommande et en considérant ensuite tout avant le premier espace comme le nom de l'imprimante.

Cela fonctionne mais repose fortement sur le format de sortie spécifique de la lpstat -acommande. J'ai peur qu'à l'avenir (ou maintenant sur des distributions différentes) si le format de sortie change, cela cassera le script.

Alors, existe-t-il un moyen d'obtenir les noms de toutes les imprimantes installées d'une manière plus sûre que celle que j'utilise?

Réponses:


1

CUPS est (partiellement) sous licence GPL, vous pouvez donc simplement saisir la source de lpstat(1) et créer votre propre petit programme (sous licence GPL) Give-my-list-of-printers qui ne changera jamais la façon dont il génère les données .

(1) C'est cups-XX/cups/systemv/lpstat.cdedans, je ne comprends tout simplement pas les numéros de versions.


C'est une bonne solution, mais malheureusement le "script" est en fait une applet Java, je ne peux pas changer le système cible ou y installer de nouvelles choses. C'est lié à cette question: stackoverflow.com/questions/13743738/… Et je pensais que l'utilisation de lpr à la place était une bonne idée
Enoon

Hmm, il y a CUPS4J , qui pourrait ou non être une option ... il peut "obtenir des objets d'imprimantes d'un serveur CUPS qui peuvent être utilisés pour imprimer et surveiller des travaux"
sr_

Cela semble une solution intéressante, merci!
Enoon

3

J'ai également besoin d'une liste d'imprimantes et j'avais la même préoccupation. Suite à la suggestion ci-dessus, j'ai vérifié la source de lpstat.c. Je m'attendais à ce que ce soit un suid pour qu'il puisse lire "/etc/cups/printers.conf". Je me rends compte maintenant que cela ne fait pas cela.

Au lieu de cela, il envoie une requête HTTP POST à ​​localhost: 631 où cupsd s'exécute. La demande est de la forme Content-Type: application / ipp et des éléments tels que les attributs demandés auth-info-required. La raison pour ne pas être plus spécifique est qu'il utilise un encodage non standard (voir: http://en.wikipedia.org/wiki/Internet_Printing_Protocol ) ... donc je soupçonne que l'analyse de la sortie de lpstat -a est en fait plus propre .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.