Obtenga una lista de impresoras instaladas

8

Dentro de un script, envío un cierto archivo para imprimir usando el lprcomando en una impresora seleccionada por el usuario.

La lista de impresoras, de la cual el usuario selecciona la que usará, aparece usando el lpstat -acomando y luego considero todo antes del primer espacio como el nombre de la impresora.

Esto funciona pero depende en gran medida del formato de salida específico del lpstat -acomando. Me temo que en el futuro (o ahora en diferentes distribuciones) si el formato de salida cambia, se romperá el script.

Entonces, ¿hay alguna forma de obtener los nombres de todas las impresoras instaladas de una manera más segura que la que estoy usando?

La tarde
fuente

Respuestas:

1

CUPS tiene licencia (en parte) de GPL, por lo que puede tomar la fuente de lpstat(1) y crear su propio pequeño programa (licencia de GPL) de dar-mi-lista-de-impresoras que nunca cambiará la forma en que genera datos .

(1) Está dentro cups-XX/cups/systemv/lpstat.c, simplemente no entiendo los números de versiones allí.

sr_
fuente
Esta es una buena solución, pero desafortunadamente el "script" es en realidad un applet de Java, no puedo cambiar el sistema de destino o instalar cosas nuevas en él. Está relacionado con esta pregunta: stackoverflow.com/questions/13743738/... Y pensé que usar lpr en su lugar era una buena idea
Enoon
Hmm, hay CUPS4J , que podría o no ser una opción ... puede "obtener objetos de impresoras de un servidor CUPS que pueden usarse para imprimir y monitorear trabajos"
sr_
Esto parece una solución interistente, ¡gracias!
Tarde
3

También necesito una lista de impresoras y tenía la misma preocupación. Siguiendo la sugerencia anterior, verifiqué la fuente de lpstat.c. Esperaba que fuera un suid para que pudiera leer "/etc/cups/printers.conf". Ahora me doy cuenta de que no hace esto.

En su lugar, envía una solicitud HTTP POST a localhost: 631 donde se ejecuta cupsd. La solicitud tiene el formato Tipo de contenido: aplicación / ipp y elementos como los atributos solicitados auth-info-required. La razón para no ser más específico es que usa una codificación no estándar (ver: http://en.wikipedia.org/wiki/Internet_Printing_Protocol ) ... así que sospecho que analizar la salida de lpstat -a es realmente más limpio .

GraemeV
fuente