我有一台服务器,在该服务器上,我将几台串行打印机设置为杯子中的原始队列。在每一个上,我都安装了接口脚本来执行一些简单的输出操作,并使用在服务器上运行的应用程序来处理 IPC,并且喜欢直接连接到打印机并写入它们,这与 cups 认为的不太合适他完全控制打印机设备。那里的一切似乎都在工作。
在服务器上输入另一个应用程序,虽然它确实通过了 cups(在通过自己的打印假脱机程序进行假脱机之后),但似乎正在将特定于打印机的转义码注入到它打印出来的文件中。换句话说,此应用程序产生的打印不仅仅是纯文本字符流,而是包含打印机要解释的二进制控制代码。
我遇到的问题是,当 cups 从第二个应用程序接收此类文件时,它似乎绕过了我的接口。我通过设置两个几乎相同的打印文件对此进行了测试。第一个包含纯文本“你好,世界!” 后跟换行符;第二个包含其中一台打印机的一些转义码,然后是“Hello,world!” 和换行符。然后我在我的打印机界面上添加了一条“sleep 5”行,这样打印时会有明显的延迟。
当我使用 lp 打印第一个文件时,五秒钟内什么也没发生,之后打印机恢复活力并写下“Hello, world!”。但是,当我使用完全相同的lp
命令打印第二个文件时,它立即打印出“Hello, world!” 不睡觉。我还注意到,我可以使用 " -o raw
" 选项lp
来强制对第一个文件执行相同的行为(立即将其打印出来,没有 5 秒的延迟)。
我的猜测是,cups 正在查看正在打印的实际数据并试图确定其类型,当它在数据中看到打印机转义码时,它决定这是“原始”打印并绕过接口。这不是我所期望的行为,因为我首先将打印机设置为“原始”队列并假设这意味着杯子只会传递通过接口发送给它的任何东西;尽管如此,这是我看到的行为。
我的问题是:有没有办法向 cups 发送一个选项(除了-o raw
,它似乎也绕过了界面)告诉他不要检测接收到的打印数据的类型并继续并将其发送到界面脚本? 或者,有没有办法指定传入数据的格式(例如,告诉 cups 它正在接收的是“纯文本”,即使它包含转义码),这样 cups 就不会查看它并简单地将其传递给界面?