À l'intérieur d'un script, j'envoie un certain fichier à imprimer en utilisant la lpr
commande 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 -a
commande 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 -a
commande. 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?
la source
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 .
la source