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

64

A lprpágina do manual diz que uma impressora de destino pode ser especificada com o -Psinalizador.

-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 -Psinalizador espera (de preferência de um shell bash)?

Ian Mackinnon
fonte

Respostas:

98
$ lpstat -p -d

No manual do CUPS .

Kevin Panko
fonte
4
Obrigado! Acabei de descobrir que lpqfunciona também.
precisa saber é o seguinte
6
Sempre que estou procurando isso, também estou procurando como escolher uma impressora padrão:lpoptions -d printername
Joshua Goldberg
12

Para obter uma lista, você pode usar:

lpstat -a

ou

cat /etc/printcap

Para imprimir apenas os nomes da impressora:

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 ' '

gato + grep + corte em /etc/printcap:

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

Isto é o que é mostrado, um por linha:

HP_LaserJet_P1606dn
HP_Deskjet_2540_series
HP_LaserJet_M1212nf
GCP-Save_to_Google_Docs

Sinto que as lpstatsoluções são mais elegantes e confiáveis. Principalmente porque /etc/printcapnão foi encontrado em alguns sistemas que testei.

O uso de awkou cutdepende do que você instalou e prefere. A opção bash read + bash array deve funcionar em qualquer shell bash sem a necessidade de externos.

Edição: Eu disse que a solução marcada não funciona para mim no Amazon Linux. Mas acho que funciona se você quiser apenas copiar os nomes das impressoras do meio do restante da saída. Funciona da mesma forma que usar 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
Gus Neves
fonte
O lpstat + cut também funcionará no OS X.
tresf
De acordo com sua amostra de saída, lpstat -p -dparece funcionar ...
Skippy le Grand Gourou
Desculpe, mas ele pergunta How can I get a list of these available printers in the format that the (lpr) -P flag expects. Meu exemplo lpstat -p -dmostra claramente que você recebe mais do que apenas o nome da impressora. Nesse caso, você não pode usar essa saída para uma lpr -P $PRINTERNAMEchamada. Então não! lpstat -p -dnão funciona no exemplo que dei.
Gus Neves