linux-CUPS旁路接口
作者:互联网
我有一台服务器,其中有几台串行打印机设置为杯子中的原始队列.在每种情况下,我都安装了接口脚本,以执行一些简单的输出操作并使用在服务器上运行的应用程序来处理IPC,并且喜欢直接连接到打印机并对其进行写入,这与杯子的想法并不协调.他完全控制打印机设备.那里的一切似乎都在工作.
在服务器上输入另一个应用程序,尽管它确实通过了杯子(在通过其自己的打印后台处理程序后台处理后),但似乎正在将打印机特定的转义码注入到要打印的文件中.换句话说,此应用程序产生的打印内容不仅是纯文本字符流,而且还包含打印机要解释的二进制控制代码.
我遇到的问题是,当杯子从第二个应用程序收到此类文件时,它们似乎绕过了我的界面.我通过设置两个几乎相同的打印文件进行了测试.第一个包含纯文本“ Hello,world!”.后跟换行符;第二个包含其中一个打印机的一些转义码,后跟“ Hello,world!”.和换行符.然后,我在打印机的界面上添加了“ sleep 5”行,以便在打印时会有明显的延迟.
当我使用lp打印第一个文件时,五秒钟没有任何反应,此后打印机复活并写下了“ Hello,world!”.但是,当我使用完全相同的lp命令打印第二个文件时,它立即打印了“ Hello,world!”.不睡觉我还注意到,我可以在lp中使用“ -o raw”选项对第一个文件强制执行相同的行为(立即将其打印出来,而不会延迟五秒钟).
我的猜测是,杯子正在查看要打印的实际数据,并试图确定其类型,并且当它看到数据中的打印机转义码时,便确定这是“原始”打印并绕过了接口.这不是我期望的行为,因为我首先将打印机设置为“原始”队列,并认为这意味着杯子将通过接口将发送给它的任何东西传递出去.不过,这是我所看到的行为.
我的问题是:是否可以将选项发送到杯子(除了-o raw之外,它似乎也绕过接口)告诉他不要检测接收到的打印数据的类型,然后继续将其发送到接口脚本?或者,有一种方法可以指定传入数据的格式(例如,告诉杯子它接收的内容是“纯文本”,即使它包含转义码也是如此),这样杯子就不会看它,而只是将其传递给接口?
解决方法:
您拥有的打印队列不是“原始”打印队列!
首先,您似乎不知道CUPS的说法是什么是原始打印队列:原始队列是不与…关联的队列.
> …都不是接口脚本(与/ etc / cups / interfaces /中的队列名称相同的脚本),
> …也没有PostScript打印机描述(PPD)文件(与队列本身同名的PPD文件,带有附加后缀* .ppd,位于/ etc / cups / ppd /中).
因为您说您已经为打印机队列安装了接口脚本,所以从定义上讲,这些不是原始队列!
要将作业作为原始作业(即:未过滤)发送到非原始CUPS队列,除了在lp命令行上使用-o raw之外,别无其他方法.您也可以使用-o document-format = application / vnd.cups-raw …选项,但这具有完全相同的含义:它使CUPS使用相同的作业处理,并且仅多出7倍的键盘按键即可冲床.
两种方式都使CUPS跳过自动键入传入作业文件的步骤,并将其未经过滤传递到队列的后端.
在cupsd.conf启用LogLevel调试后,通过查找关键字“自动键入”,可以在日志文件/ var / log / cups / error_log中观察到自动键入步骤及其结果,该行提到的请求文件类型为.. .会告诉您CUPS将哪种MIME类型将收到的工作分类为.)
如何强制CUPS以文本形式处理传入的打印数据
在lp命令行中使用-o document-format = text / plain.
如何设置CUPS“原始”队列
如果要将(任何)现有的打印队列转换为原始的打印队列,只需删除关联的PPD文件(/etc/cups/ppd/myprinter.ppd)或关联的接口脚本(/ etc / cups / interfaces / myprinter).
如果要从一开始就安装一个打印队列作为原始队列,只需使用打印机名称和后端URI,但不要指定任何PPD或与其关联的任何接口脚本:
安装“原始”打印队列的示例命令:
sudo lpadmin -p my_raw_printer -E -v socket://192.168.177.188:9100
(-p是指定打印队列名称,-E是从头开始启用打印队列.)
推测:为什么第二个应用程序可能绕过您的界面脚本
在没有看到完整的系统设置并没有看到第二个应用程序的情况下(第二个应用程序的打印行为与第一个应用程序不同),或者无法访问调试级别的CUPS error_log文件,只能推测:
>我的猜测是您的第二个应用程序使用一些硬连线的打印命令,该命令隐式使用-o raw打印命令选项.
标签:printing,cups,linux 来源: https://codeday.me/bug/20191031/1979452.html