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?

Enoon
la source

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.

sr_
la source
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 .

GraemeV
la source