Redireciona lpd lp para um arquivo?

1

Temos um aplicativo Business Basic antigo que imprime relatórios em uma impressora de linha simples e gostaríamos de capturar essa saída em um arquivo (para então extrair os dados dela). Isso é executado no Red Hat 8 (por volta de 2002).

O código básico abre e imprime para "LP", que faz o caminho para a impressora lpd lp. Inspecionando alguns arquivos aleatórios de spool que não foram excluídos em / var / spool / lpd / lp /, eles parecem ter conteúdo adequado.

Então a questão é, como mudar temporariamente algo de tal forma que o programa Basic envia sua saída apenas para um arquivo (e esse arquivo não é impresso).

Poder-se-ia conseguir o efeito alterando o código Básico, mas o sistema é extenso, possui muitos locais onde a impressão é realizada e não haveria uma maneira fácil de oferecer uma opção nesses locais.

Daí a busca de uma maneira de fazer isso, externa ao aplicativo Básico, que pode ser instalado e desativado (para retornar a impressão ao normal) de um script.

Caso seja relevante, a entrada printcap:

lp:\
:ml#0:\
:mx#0:\
:sd=/var/spool/lpd/lp:\
:af=/var/spool/lpd/lp/lp.acct:\
:sh:\
:rm=[ip address]:\
:rp=pr0:\
:lpd_bounce=true:\
:if=/usr/share/printconf/util/mf_wrapper:

Obrigado!

    
por gwideman 20.08.2016 / 00:10

1 resposta

2

Se você definir sua entrada printcap como:

lp:\
    :ml#0:\
    :mx#0:\
    :sd=/var/spool/lpd/lp:\
    :sh:\
    :lp=/dev/null:\
    :of=/var/output/capture:

Nesse caso, a entrada lp aponta para /dev/null e, portanto, nunca imprimirá nada.

A mágica está no filtro of . É um script muito simples:

#!/bin/sh

DIR=/var/output/files
d='/bin/date +%Y-%m-%d_%H:%M:%S'

output=$DIR/$d.$$

cat > $output
chmod 644 $output
exit 0

Agora

mkdir /var/output/files
chown daemon /var/output/files

Neste ponto, podemos fazer algo como:

% echo this is a test | lpr

E é se por mágica:

% ls /var/output/files
2016-08-20_09:44:19.26541

% cat /var/output/files/2016-08-20_09\:44\:19.26541 
this is a test

Você pode modificar o script para suas necessidades exatas.

(Eu testei isso no FreeBSD, que é a única máquina que ainda usa lpd !)

Agora você tinha um filtro if no original. if é um "filtro de entrada" projetado para modificar o arquivo recebido para um formato normalizado. Não tenho certeza do que o mf_wrapper ("m format"?), Mas se você estiver vendo uma confusão em seus arquivos de saída, altere o printcap para incluir o filtro if original:

lp:\
    :ml#0:\
    :mx#0:\
    :sd=/var/spool/lpd/lp:\
    :sh:\
    :lp=/dev/null:\
    :of=/var/output/capture:\
    :if=/usr/share/printconf/util/mf_wrapper:

Para arquivos com os quais "você está feliz", é possível enviá-los manualmente para outra fila de impressão com lpr -Prealqueue ou similar.

    
por 20.08.2016 / 15:48

Tags