Innerhalb eines Skripts sende ich eine bestimmte Datei zum Drucken mit dem lpr
Befehl auf einem vom Benutzer ausgewählten Drucker.
Die Liste der Drucker, aus der der Benutzer den zu verwendenden auswählt, erhalte ich mit dem lpstat -a
Befehl und betrachte dann alles vor dem ersten Leerzeichen als Namen des Druckers.
Dies funktioniert, hängt jedoch stark vom spezifischen Ausgabeformat des lpstat -a
Befehls ab. Ich befürchte, dass in Zukunft (oder jetzt auf verschiedenen Distributionen), wenn sich das Ausgabeformat ändert, das Skript beschädigt wird.
Gibt es eine Möglichkeit, die Namen aller installierten Drucker sicherer abzurufen als die, die ich verwende?
quelle
Ich brauche auch eine Liste von Druckern und hatte die gleichen Bedenken. Dem obigen Vorschlag folgend habe ich die Quelle von lpstat.c überprüft. Ich hatte erwartet, dass es ein Suid sein würde, damit es "/etc/cups/printers.conf" lesen könnte. Mir ist jetzt klar, dass dies nicht der Fall ist.
Stattdessen sendet es eine HTTP-POST-Anforderung an localhost: 631, wo cupsd ausgeführt wird. Die Anfrage hat die Form Inhaltstyp: application / ipp und Dinge wie angeforderte Attribute auth-info-required. Der Grund, nicht genauer zu sein, ist, dass eine nicht standardmäßige Codierung verwendet wird (siehe: http://en.wikipedia.org/wiki/Internet_Printing_Protocol ). Ich vermute also, dass das Parsen der Ausgabe von lpstat -a tatsächlich sauberer ist .
quelle