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?

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.


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 .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.