Eu meio que contornei esse problema com isso:
tail -n2 -f file | while read line
do
echo $line | lpr -l -h -P Epson-LQ-500
done
mas não tenho certeza se esta é a melhor prática.
Eu tenho uma impressora matricial, uma Epson LQ-500.
Funciona bem com o CUPS, e eu o uso para imprimir listas às vezes, arquivos de texto, etc.
agora, gostaria de usá-lo como uma impressora de registro. para isso, eu preciso imprimir uma linha, quando ela é anexada a um arquivo ou pipe nomeado.
Eu estava pensando em usar algo assim:
tail -n1 -f file | lpr -l -h -P Epson-LQ-500
mas não funciona, o trabalho de impressão é mantido constantemente. Então eu tentei isso:
tail -n1 -f file | lp -d Epson-LQ-500 -o raw -H immediate
e também não funciona, o trabalho de impressão é mantido indefinidamente.
Ao usar tail
sem -f
ou ao usar cat
, tudo funciona bem, mas o CUPS não permite que seja impresso linha por linha.
Então, como faço isso?
O sistema CUPS é um spooler de impressora (isto é, ele pressupõe que a impressora é compartilhada; ele coleta o material a ser impresso e o envia para a impressora somente quando terminado, para não para atrasar as impressões de outras pessoas quando você envia um cabeçalho de página, faz meia hora de computação e depois imprime o resto).
A maneira mais fácil de resolver isso seria enviar a saída diretamente para o dispositivo da impressora (isso provavelmente significa primeiro convencer o CUPS de que deve deixá-lo em paz e garantir que a impressora entenda o texto enviado).
tail -f file > /dev/lp0
assumindo uma impressora paralela e permissões apropriadas, e você não pode compartilhar a impressora.
tail -n2 -f file | while read line
do
echo $line | lpr -l -h -P Epson-LQ-500
done
Impressoras de linhas antigas são ótimas por causa de sua proximidade; quando um personagem é descartado / dev / lp0 , ele vai direto para o papel que não pode ser copiado.
Se você estava seguindo esse arquivo para capturar uma intrusão (ou uma falha do sistema), adicionou o atraso e a insegurança das linhas que passam por mais e mais etapas de software - o shell, o lpr, os filtros da impressora - antes de chegarem adicionado à página.
Se o computador travar ou a energia acabar ou alguém hackear o lpr, a impressora não conseguirá registrar o evento com precisão.
Para coisas não críticas, isso é ótimo se fornecer outras conveniências; Eu uso impressoras de linha antiga para imprimir etiquetas uma de cada vez (impressoras a laser exigem que eu imprima uma folha inteira).
Se é hora ou coisas críticas de segurança que estão indo para a impressora, use
tail -f file > /dev/lp0
(embora se for realmente informação crítica você precisa logar no papel, você poderia ignorar o shell e o sistema de arquivos completamente no kernel.)
As impressoras de linha tradicionais não precisam de nenhum driver para imprimir texto simples em tempo real.