Dapatkan daftar printer yang diinstal

8

Di dalam skrip saya mengirim file tertentu untuk dicetak menggunakan lprperintah pada printer yang dipilih pengguna.

Daftar printer, dari mana pengguna memilih yang akan digunakan, saya bisa menggunakan lpstat -aperintah dan kemudian mempertimbangkan semuanya sebelum ruang pertama sebagai nama printer.

Ini berfungsi tetapi sangat bergantung pada format output spesifik dari lpstat -aperintah. Saya khawatir bahwa di masa depan (atau sekarang pada distribusi yang berbeda) jika format output berubah akan merusak skrip.

Jadi, apakah ada cara untuk mendapatkan nama-nama semua printer yang diinstal dengan cara yang lebih aman daripada yang saya gunakan?

Enoon
sumber

Jawaban:

1

CUPS (sebagian) berlisensi GPL, jadi Anda bisa mengambil sumber lpstat(1) dan membuat program Anda sendiri yang kecil (berlisensi GPL) memberikan-daftar-printer-saya yang tidak akan pernah mengubah cara output data. .

(1) Ada di cups-XX/cups/systemv/lpstat.c, saya hanya tidak mengerti nomor versi di sana.

sr_
sumber
Ini adalah solusi yang baik, tetapi sayangnya "script" sebenarnya adalah applet Java, saya tidak dapat mengubah sistem target atau menginstal hal baru di atasnya. Ini terkait dengan pertanyaan ini: stackoverflow.com/questions/13743738/... Dan saya pikir menggunakan lpr sebagai ide yang bagus
Enoon
Hmm, ada CUPS4J , yang mungkin atau mungkin bukan pilihan ... itu bisa "mendapatkan objek printer dari server CUPS yang dapat digunakan untuk mencetak dan memantau pekerjaan"
sr_
Ini sepertinya solusi yang saling berkaitan, terima kasih!
Enoon
3

Saya juga membutuhkan daftar printer dan memiliki keprihatinan yang sama. Mengikuti saran di atas saya memeriksa sumber lpstat.c. Saya mengharapkannya menjadi suid sehingga bisa membaca "/etc/cups/printers.conf". Saya sekarang sadar itu tidak melakukan ini.

Sebaliknya ia mengirim permintaan HTTP POST ke localhost: 631 di mana cupsd berjalan. Permintaan dalam bentuk Content-Type: application / ipp dan hal-hal seperti diminta-atribut auth-info-diperlukan. Alasan untuk tidak lebih spesifik adalah karena menggunakan pengkodean non-standar (lihat: http://en.wikipedia.org/wiki/Internet_Printing_Protocol ) ... jadi saya curiga sebenarnya menguraikan output lpstat -a sebenarnya lebih bersih .

GraemeV
sumber