¿Cómo enumerar los nombres de impresoras aceptables para usar con lpr?

64

La lprpágina del manual dice que se puede especificar una impresora de destino con la -Pbandera.

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

He 'agregado' varias impresoras en recursos compartidos locales de Samba usando la GUI en Ubuntu / Gnome. ¿Cómo puedo obtener una lista de estas impresoras disponibles en el formato que la -Pbandera espera (preferiblemente de un shell bash)?

Ian Mackinnon
fuente

Respuestas:

98
$ lpstat -p -d

Del manual de CUPS .

Kevin Panko
fuente
44
¡Gracias! Acabo de descubrir que eso lpqtambién funciona.
Ian Mackinnon
66
Siempre que estoy buscando esto, también estoy buscando cómo elegir una impresora predeterminada:lpoptions -d printername
Joshua Goldberg
12

Para obtener una lista, puede usar:

lpstat -a

o

cat /etc/printcap

Para imprimir solo los nombres de impresora:

lpstat + lectura + matriz:

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

lpstat + awk:

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

lpstat + corte:

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

cat + grep + corte en /etc/printcap:

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

Esto es lo que se muestra, uno por línea:

HP_LaserJet_P1606dn
HP_Deskjet_2540_series
HP_LaserJet_M1212nf
GCP-Save_to_Google_Docs

Siento que las lpstatsoluciones son más elegantes y confiables. Principalmente porque /etc/printcapno se encontró en algunos sistemas que probé.

Acerca de usar awko cut, depende de lo que haya instalado y prefiera. La opción bash read + bash array debería funcionar en cualquier shell bash sin la necesidad de elementos externos.

EDITAR: Dije que la solución marcada no funciona para mí en Amazon Linux. Pero supongo que funciona si solo quieres copiar los nombres de la impresora desde el medio del resto de la salida. Funciona igual que usar solo 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
fuente
lpstat + cut también funcionará en OS X.
tresf
Según su muestra de salida, lpstat -p -dparece funcionar ...
Skippy le Grand Gourou
Lo siento, pero él pregunta How can I get a list of these available printers in the format that the (lpr) -P flag expects. Mi ejemplo de lpstat -p -dmuestra claramente que obtienes más que solo el nombre de la impresora con eso. En cuyo caso no puede usar esa salida para una lpr -P $PRINTERNAMEllamada. Entonces no! lpstat -p -dno funciona en el ejemplo que di.
Gus Neves