Wil*_*iam 4 linux printing cups
我有一台服务器,上面有几台串行打印机设置为杯子中的原始队列。在其中的每一个上,我都安装了接口脚本来执行一些简单的输出操作并使用在服务器上运行的应用程序处理 IPC,并且喜欢直接连接到打印机并写入它们,这与杯子的想法不太一致他完全控制打印机设备。那里的一切似乎都在起作用。
在服务器上输入另一个应用程序,虽然它确实通过了杯子(在通过自己的打印后台处理程序进行后台处理之后),但似乎正在将特定于打印机的转义代码注入它打印的文件中。换句话说,此应用程序生成的打印件不仅仅是纯文本字符流,还包含打印机要解释的二进制控制代码。
我遇到的问题是当 cups 从第二个应用程序接收此类文件时,它似乎绕过了我的接口。我通过设置两个几乎相同的打印文件对此进行了测试。第一个包含纯文本“你好,世界!” 后跟一个换行符;第二个包含其中一台打印机的一些转义码,后跟“Hello,world!” 和换行符。然后我在我的打印机界面上添加了“sleep 5”行,这样打印时就会有明显的延迟。
当我使用 lp 打印第一个文件时,五秒钟内什么也没发生,之后打印机启动并写出“Hello,world!” 但是,当我使用完全相同的lp命令打印第二个文件时,它立即打印出“Hello, world!” 不睡觉。我还注意到我可以使用“ -o raw”选项lp来强制第一个文件具有相同的行为(立即打印出来,没有五秒钟的延迟)。
我的猜测是 cups 正在查看正在打印的实际数据并尝试确定其类型,当它看到数据中的打印机转义码时,它决定这是“原始”打印并绕过接口。这不是我所期望的行为,因为我首先将打印机设置为“原始”队列,并假设这意味着杯子只会传递通过接口发送给它的任何东西;尽管如此,这就是我所看到的行为。
我的问题是:有没有办法向 cups 发送一个选项(除了-o raw,它似乎也绕过接口)告诉他不要检测接收到的打印数据的类型并继续将其发送到接口脚本? 或者,有没有办法指定传入数据的格式(例如,告诉cups 它接收的是“纯文本”,即使它包含转义码),以便cups 不会查看它,而只是将其传递给界面?
首先,您似乎不知道在 CUPS 的说法中原始打印队列是什么:原始队列是与...无关的队列。
...既不是接口脚本(与位于 中的队列本身同名的脚本/etc/cups/interfaces/),
...也不是PostScript 打印机描述(PPD) 文件(与队列本身同名的 PPD 文件,附加后缀*.ppd,位于 中/etc/cups/ppd/)。
既然你说你已经为你的打印机队列安装了一个接口脚本,根据定义,这些不是原始队列!
要将原始作业(即:未过滤)发送到非原始 CUPS 队列,除了-o raw在lp命令行上使用之外别无他法。您也可以(或者)使用该选项-o document-format=application/vnd.cups-raw……但这具有完全相同的含义:它使 CUPS 使用相同的作业处理,并且只需多 7 倍的键盘按键即可使用。
这两种方式都会导致 CUPS 跳过自动输入传入作业文件的步骤,并将其未经过滤地传递到队列的后端。
自动分类步骤和它的结果可以在日志文件中可以观察到/var/log/cups/error_log通过查找的关键字Auto-typing,一旦你cupsd.conf已经LogLevel debug启用:行提Request file type is ...告诉您哪些MIME类型CUPS分类传入工作的)。
使用-o document-format=text/plain的lp命令行。
如果要将(任何)现有打印队列转换为原始打印队列,只需删除关联的 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
Run Code Online (Sandbox Code Playgroud)
(-p是指定打印队列名称,-E是从一开始就启用打印队列。)
没有看到完整的系统设置并查看第二个应用程序(其打印行为似乎与第一个不同),或者没有访问调试级别的 CUPSerror_log文件,只能推测:
-o raw打印命令选项的硬连线打印命令。| 归档时间: |
|
| 查看次数: |
10868 次 |
| 最近记录: |