Obter lista de impressoras instaladas

8

Dentro de um script, envio um determinado arquivo para impressão usando o lprcomando em uma impressora selecionada pelo usuário.

A lista de impressoras, na qual o usuário seleciona a que será usada, recebo o lpstat -acomando e considero tudo antes do primeiro espaço como o nome da impressora.

Isso funciona, mas depende muito do formato de saída específico do lpstat -acomando. Receio que, no futuro (ou agora em diferentes distribuições), se o formato de saída mudar, ele quebrará o script.

Portanto, existe uma maneira de obter os nomes de todas as impressoras instaladas de maneira mais segura do que a que estou usando?

Enoon
fonte

Respostas:

1

O CUPS é (parcialmente) licenciado pela GPL, então você pode simplesmente pegar a fonte de lpstat(1) e criar seu próprio pequeno programa ( dar a minha lista de impressoras ) (licenciado pela GPL) que nunca mudará a maneira como gera dados .

(1) Está dentro cups-XX/cups/systemv/lpstat.c, eu simplesmente não entendo os números das versões lá.

sr_
fonte
Esta é uma boa solução, mas, infelizmente, o "script" é realmente um applet Java, não posso alterar o sistema de destino nem instalar novos itens nele. Está relacionado a esta pergunta: stackoverflow.com/questions/13743738/… E eu pensei que usar lpr em vez disso era uma boa idéia
Enoon
Hmm, há o CUPS4J , que pode ou não ser uma opção ... ele pode "obter objetos de impressoras de um servidor CUPS que pode ser usado para imprimir e monitorar trabalhos"
sr_
Parece uma solução interessante, obrigado!
Enoon
3

Também preciso de uma lista de impressoras e tive a mesma preocupação. Seguindo a sugestão acima, verifiquei a fonte do lpstat.c. Eu esperava que fosse um suid para que ele pudesse ler "/etc/cups/printers.conf". Agora percebo que não faz isso.

Em vez disso, envia uma solicitação HTTP POST para localhost: 631 onde o cupsd é executado. A solicitação é do tipo Content-Type: application / ipp e coisas como os atributos solicitados auth-info-required. O motivo para não ser mais específico é que ele usa uma codificação não-padrão (consulte: http://en.wikipedia.org/wiki/Internet_Printing_Protocol ) ... então eu suspeito que analisar a saída do lpstat -a é realmente mais limpo .

GraemeV
fonte