Bagaimana daftar nama printer yang dapat diterima untuk digunakan dengan lpr?

64

The lprhalaman manual mengatakan printer tujuan dapat ditentukan dengan -Pbendera.

-P destination[/instance]
    Prints files to the named printer.

Saya telah 'menambahkan' berbagai printer pada saham Samba lokal menggunakan GUI di Ubuntu / Gnome. Bagaimana saya bisa mendapatkan daftar printer yang tersedia ini dalam format yang diharapkan oleh -Pflag (lebih disukai dari bash shell)?

Ian Mackinnon
sumber

Jawaban:

98
$ lpstat -p -d

Dari manual CUPS .

Kevin Panko
sumber
4
Terima kasih! Saya baru saja menemukan itu lpqbekerja juga.
Ian Mackinnon
6
Setiap kali saya mencari ini, saya juga mencari cara memilih printer default:lpoptions -d printername
Joshua Goldberg
12

Untuk mendapatkan daftar, Anda dapat menggunakan:

lpstat -a

atau

cat /etc/printcap

Untuk hanya mencetak nama printer:

lpstat + baca + larik:

$ while read l; do l=($l); echo "${l[0]}"; done <<< "$(lpstat -a)"

lpstat + awk:

$ lpstat -a | awk '{print $1}'

lpstat + potong:

$ lpstat -a | cut -f1 -d ' '

kucing + grep + potong /etc/printcap:

$ cat /etc/printcap | cut -f1 -d'|' | grep '^#' -v

Inilah yang ditampilkan, satu per baris:

HP_LaserJet_P1606dn
HP_Deskjet_2540_series
HP_LaserJet_M1212nf
GCP-Save_to_Google_Docs

Saya merasa lpstatsolusinya lebih elegan dan dapat diandalkan. Sebagian besar karena /etc/printcaptidak ditemukan pada beberapa sistem yang saya uji.

Tentang menggunakan awkatau cut, tergantung pada apa yang telah Anda instal dan sukai. Opsi bash read + bash array harus bekerja pada bash shell apa pun tanpa perlu eksternal.

EDIT: Saya katakan solusi yang ditandai tidak bekerja untuk saya di Amazon Linux. Tapi saya kira itu berfungsi jika Anda hanya ingin menyalin nama-nama printer dari tengah sisa output. Bekerja sama seperti menggunakan adil lpstat -a.

$ lpstat -p -d
printer HP_Deskjet_2540_series is idle. enabled since Tue 22 Dec 2015 01:12:10 PM BRST
. . .
printer GCP-Save_to_Google_Docs is idle. enabled since Tue 15 Dec 2015 02:13:33 AM BRST
system default destination: HP_LaserJet_P1606dn
Gus Neves
sumber
lpstat + cut juga akan berfungsi pada OS X.
tresf
Menurut sampel keluaran Anda, lpstat -p -dtampaknya berfungsi ...
Skippy le Grand Gourou
Maaf, tapi dia bertanya How can I get a list of these available printers in the format that the (lpr) -P flag expects. Contoh saya lpstat -p -ddengan jelas menunjukkan bahwa Anda mendapatkan lebih dari sekedar nama printer dengan itu. Dalam hal ini Anda tidak dapat menggunakan output itu untuk lpr -P $PRINTERNAMEpanggilan. Jadi tidak! lpstat -p -dtidak bekerja dalam contoh yang saya berikan.
Gus Neves