如何让点阵打印机打印每一行“tail -f”

如何让点阵打印机打印每一行“tail -f”

我有一台点阵打印机,Epson LQ-500。

它与 CUPS 配合得很好,我有时用它来打印列表、文本文件等。

现在,我想用它作为日志打印机。为此,当它附加到文件或命名管道时,我需要它打印一行。

我正在考虑使用这样的东西:

tail -n1 -f file | lpr -l -h -P Epson-LQ-500

但它不起作用,打印作业一直被保留。然后我尝试了这个:

tail -n1 -f file | lp -d Epson-LQ-500 -o raw -H immediate

它也不起作用,打印作业被无限期地保留。

当使用tailwithout时-f,或者使用cat它时,一切都工作正常,但 CUPS 只是不会让它逐行打印。

那么,我该怎么做呢?

答案1

CUPS系统是一台打印机假脱机程序(即,它假设打印机是共享的;它收集要打印的东西,只有在完成时才将其发送到打印机,为了在发送页眉时不延迟其他人的打印输出,请执行1/2小时计算然后打印其余部分)。

解决此问题的最简单方法是将输出直接发送到打印机设备(这可能意味着首先让 CUPS 相信它应该不管它,并确保打印机确实理解发送给它的文本)。

答案2

tail -f file > /dev/lp0

假设有并行打印机和适当的权限,并且您无法共享打印机。

答案3

我用这个解决了这个问题:

tail -n2 -f file | while read line
do
echo $line | lpr -l -h -P Epson-LQ-500
done

但我不确定这是否是最佳实践。

答案4

tail -n2 -f file | while read line
do
    echo $line | lpr -l -h -P Epson-LQ-500
done

老式行式打印机因其即时性而非常有用。当一个角色被抛弃时/dev/lp0,它直接进入无法破解的纸张。

如果您跟踪该文件是为了捕获入侵(或系统崩溃),则在将其添加到系统之前,您已经添加了经过越来越多软件步骤(shell、lpr、打印机过滤器)的线路的延迟和不安全性。页。

如果计算机崩溃或断电或有人侵入 lpr,打印机将无法准确记录事件。

对于非关键的事情,如果能提供其他便利那就太好了;我使用旧的行式打印机一次打印一个标签(激光打印机要求我打印一整张纸)。

如果需要将时间或安全性关键的内容发送到打印机,请使用

tail -f file > /dev/lp0

(虽然如果是真的您需要记录到纸上的关键信息,您可以在内核中完全绕过 shell 和文件系统。)

老式行式打印机不需要任何实时打印纯文本的驱动程序。

相关内容