Como posso ver os parâmetros enviados ao CUPS para um trabalho de impressão?

1

Estou escrevendo um programa que precisa imprimir um arquivo PDF usando lp . Eu posso imprimir o arquivo usando um visualizador de PDF e a GUI, mas ao usar lp há problemas. Eu gostaria de ver exatamente quais opções o visualizador de PDFs envia ao CUPS para que eu possa usá-las no comando lp , mas não vejo nenhuma maneira de fazer isso na interface do CUPS. Isso é possível?

    
por Eric 28.09.2018 / 16:39

3 respostas

2

Se você souber como executar o visualizador de PDF na linha de comando, por exemplo, como xpdf my.pdf , use o seguinte:

strace -f -e execve xpdf my.pdf

Isso gerará linhas como

execve("/usr/bin/lp", ["lp", "-abc", "my.pdf"], ...

que mostra os comandos que estão sendo executados, com os argumentos mostrados na matriz [,,,] .

Se você não puder executar o visualizador a partir da linha de comando, encontre o id do processo para ele (com ps fax ou similar), e se for, 2519, anexe o strace a ele com:

strace -f -e execve -p 2519

Você deve obter uma saída semelhante. Digite control-c para matar o strace.

Isso pode não revelar a execução de lp , mas você pode pedir que a strace mostre mais do que está sendo feito, se necessário.

    
por 28.09.2018 / 18:46
1

O CUPS registra todas as opções (e metadados) percorrendo um trabalho em c -files (arquivos de controle) viajando junto com os dados de spool reais d - arquivo em / var / spool / cups / .

Os arquivos de controle são nomeados cNNNNNN , onde NNNNNN representa o ID do trabalho CUPS.

Esse eu sempre soube. Ontem eu precisava dar uma olhada mais de perto nesses arquivos, mas como eles são codificados em binário, um simples strings -run contra eles não produziu um resultado bom o suficiente.

Primeiro, fiz uma pergunta relacionada no StackOverflow, mas depois encontrei uma ferramenta que pode dissecar os arquivos c. Ele está no código-fonte do CUPS, mas não é construído por padrão e, portanto, dificilmente é visto até pelo usuário CUPS mais geek (e também não é feito pelos empacotadores de distribuição do Linux).

O nome é testipp .

Como construí-lo e como usá-lo eu descrevi no StackOverflow, aqui:

por 09.12.2018 / 04:55
0

Se você tiver acesso ao arquivo CUPS error_log (geralmente em /var/log/cups/ ), e se o CUPS tiver LogLevel debug em sua configuração (em /etc/cups/cupsd.conf file), então você pode ver quais argumentos de linha de comando foram passados para cada trabalho para o CUPS, aplicando a (s) linha (s) contendo a string argv[5] .

argv[5] contém todos esses parâmetros que o CUPS tinha visto no quinto argumento para a linha de comando de cada filtro. Antes disso, na mesma linha, você também verá a respectiva ID do trabalho impressa como [Job NNNNNN] .

    
por 18.12.2018 / 23:50

Tags