将 lpd lp 重定向到文件?

将 lpd lp 重定向到文件?

我们有一个古老的 Business Basic 应用程序,它将报告打印到简单的行式打印机,我们希望将该输出捕获到文件中(然后从中抓取数据)。它在 Red Hat 8(大约 2002 年)上运行。

基本代码打开,然后打印到“LP”,这将进入 lpd 打印机 lp​​。检查 /var/spool/lpd/lp/ 中未删除的几个随机假脱机文件,这些文件看起来有合适的内容。

所以问题是,如何临时更改某些内容,使 Basic 程序仅将其输出发送到文件(并且不会打印该文件)。

通过改变Basic代码就可以达到这样的效果,但是系统庞大,有很多地方需要进行打印,而且没有简单的方法可以在这些地方提供一个选项。

因此,我们寻求一种在基本应用程序外部执行此操作的方法,可以从脚本中设置和取消设置(以恢复正常打印)。

如果相关的话,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:

谢谢!

答案1

如果您定义的printcap条目类似于:

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

在这种情况下,lp条目指向/dev/null,因此它永远不会打印出任何内容。

魔法位于of过滤器中。这是一个非常简单的脚本:

#!/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

现在

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

此时我们可以做类似的事情:

% echo this is a test | lpr

如果是魔法的话:

% 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

您可以根据您的具体需要修改脚本。

(我已经在 FreeBSD 上测试过这个,这是我唯一仍在使用的机器lpd!)

现在你if的原件中已经有了一个过滤器;if是一个“输入过滤器”,旨在将传入文件修改为规范化格式。我不确定mf_wrapper是什么(“m 格式”?),但如果您在输出文件中看到一团糟,那么您可以更改printcap以包含原始if过滤器:

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:

对于您满意的文件,您可以使用lpr -Prealqueue或类似的命令手动将它们发送到另一个打印队列。

相关内容