Como listar nomes de impressora aceitáveis para uso com lpr?

49

A página lpr man diz que uma impressora de destino pode ser especificada com o sinalizador -P .

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

Eu adicionei várias impressoras em compartilhamentos locais do Samba usando a GUI no Ubuntu / Gnome. Como posso obter uma lista dessas impressoras disponíveis no formato que o sinalizador -P espera (de preferência de um shell bash)?

    
por Ian Mackinnon 18.08.2010 / 18:23

2 respostas

76
$ lpstat -p -d

Do manual do CUPS .

    
por 18.08.2010 / 18:51
12

Para obter uma lista, você pode usar:

lpstat -a

ou

cat /etc/printcap

Para imprimir apenas os nomes das impressoras:

lpstat + read + array:

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

lpstat + awk:

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

lpstat + cut:

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

cat + grep + corte em /etc/printcap :

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

Isso é o que é mostrado, um por linha:

HP_LaserJet_P1606dn
HP_Deskjet_2540_series
HP_LaserJet_M1212nf
GCP-Save_to_Google_Docs

Eu sinto que as soluções lpstat são mais elegantes e confiáveis. Principalmente porque /etc/printcap não foi encontrado em alguns sistemas que testei.

Sobre o uso de awk ou cut , depende do que você instalou e prefere. A opção bash read + bash array deve funcionar em qualquer shell bash sem a necessidade de externals.

EDIT: Eu disse que a solução marcada não funciona para mim no Amazon Linux. Mas eu acho que funciona se você quiser apenas copiar os nomes das impressoras do meio do resto da saída. Funciona da mesma forma que usando apenas 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
    
por 22.12.2015 / 18:02