Liste der installierten Drucker abrufen

8

Innerhalb eines Skripts sende ich eine bestimmte Datei zum Drucken mit dem lprBefehl 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 -aBefehl und betrachte dann alles vor dem ersten Leerzeichen als Namen des Druckers.

Dies funktioniert, hängt jedoch stark vom spezifischen Ausgabeformat des lpstat -aBefehls 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?

Enoon
quelle

Antworten:

1

CUPS ist (teilweise) GPL-lizenziert, sodass Sie einfach die Quelle von lpstat(1) abrufen und Ihr eigenes kleines (GPL-lizenziertes) Give-my-List-of-Drucker- Programm erstellen können , das die Art und Weise der Datenausgabe niemals ändert .

(1) Es ist in cups-XX/cups/systemv/lpstat.c, ich verstehe die Versionsnummern dort einfach nicht.

sr_
quelle
Dies ist eine gute Lösung, aber leider ist das "Skript" tatsächlich ein Java-Applet. Ich kann das Zielsystem nicht ändern oder neue Dinge darauf installieren. Es hängt mit dieser Frage zusammen: stackoverflow.com/questions/13743738/… Und ich dachte, dass die Verwendung von lpr stattdessen eine gute Idee war
Enoon
Hmm, es gibt CUPS4J , das eine Option sein kann oder nicht ... es kann "
sr_
Dies scheint eine interessante Lösung zu sein, danke!
Enoon
3

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 .

GraemeV
quelle