Cups-pdf já é uma mão na roda? Que tal cups-para-qualquer-coisa?
Dica publicada em Linux / Miscelânea
Cups-pdf já é uma mão na roda? Que tal cups-para-qualquer-coisa?
Eu queria outro dia criar um sistema de visualização do que foi impresso via web, de várias impressoras, e também tinha de exibir informações a respeito do material impresso. O problema do cups-pdf é que só permite uma instância dele por computador.
A solução foi simples, bastou alterar uma única linha do arquivo "pipe", um backend para openSUSE, esse backend originalmente envia via pipe somente "o grosso" do material a ser impresso, e seu programa/script precisa lidar com STDIN, senão não "funfa"...
Abra o arquivo /usr/lib/cups/backend/pipe e substitua:
$cmdln = "/bin/cat $file | $arg";
por:
Caso o tal arquivo não exista, instale o pacote "cups-backends".
Agora na hora de adicionar uma "impressora" a URI do dispositivo fica assim:
pipe:/caminho/do/script/ou/programa
Seu script agora receberá esses parâmetros:
Não conheço maneira de enviar o número de páginas nem o conteúdo do que será impresso (antes que perguntem, não dá para usar $ARGV[5]), por isso usei o PPD "generic postscript" para que seja sempre um arquivo do tipo post-script lá em /tmp.
O arquivo exemplo do arquivo "pipe" completo, pra quem não quiser baixar o rpm está em:
A solução foi simples, bastou alterar uma única linha do arquivo "pipe", um backend para openSUSE, esse backend originalmente envia via pipe somente "o grosso" do material a ser impresso, e seu programa/script precisa lidar com STDIN, senão não "funfa"...
Abra o arquivo /usr/lib/cups/backend/pipe e substitua:
$cmdln = "/bin/cat $file | $arg";
por:
$cmdln = "/bin/cat $file > /tmp/$ARGV[0].ps && $arg $ARGV[0] $ARGV[1] $ARGV[2] $ARGV[3] $ARGV[4]";
Caso o tal arquivo não exista, instale o pacote "cups-backends".
Agora na hora de adicionar uma "impressora" a URI do dispositivo fica assim:
pipe:/caminho/do/script/ou/programa
Seu script agora receberá esses parâmetros:
- $1 - job-id
- $2 - username
- $3 - job title
- $4 - number of copies
- $5 - job options
Não conheço maneira de enviar o número de páginas nem o conteúdo do que será impresso (antes que perguntem, não dá para usar $ARGV[5]), por isso usei o PPD "generic postscript" para que seja sempre um arquivo do tipo post-script lá em /tmp.
O arquivo exemplo do arquivo "pipe" completo, pra quem não quiser baixar o rpm está em:
=D