首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CUPS旁路接口

CUPS旁路接口
EN

Stack Overflow用户
提问于 2012-09-04 21:53:34
回答 1查看 11.3K关注 0票数 4

我有一个服务器,在服务器上设置了几个串行打印机作为cups中的原始队列。在每一种情况下,我都安装了接口脚本来执行一些简单的输出操作,并使用运行在服务器上的应用程序来处理IPC,并且喜欢直接连接到打印机并对它们进行写入,这与cups认为他完全控制打印机设备的想法不太好。那里的一切看起来都很正常。

在服务器上输入另一个应用程序,该应用程序虽然经过cups (通过自己的打印假脱机程序后),但似乎正在将打印机特定的转义代码注入到打印出来的文件中。换句话说,此应用程序生成的打印不只是纯文本字符流,而是包含打印机要解释的二进制控制代码。

我遇到的问题是,当cups从第二个应用程序接收到这样的文件时,它似乎绕过了我的接口。我通过设置两个几乎相同的打印文件来测试这一点。第一个包含了纯文本“你好,世界!”后面跟着一个换行符;第二个字符包含一个打印机的一些转义代码,后面跟着“你好,世界!”还有新线路。然后,我在打印机的界面上添加了一条“睡眠5”行,以便在打印时出现明显的延迟。

当我用lp打印第一个文件时,五秒内什么也没发生,之后打印机就活过来了,写着“你好,世界!”但是,当我使用完全相同的lp命令打印第二个文件时,它立即打印了"Hello,world!“不睡觉。我还注意到,我可以使用lp中的“lp”选项来强制使用第一个文件的相同行为(立即打印出来而不需要5秒的延迟)。

我的猜测是cups正在查看正在打印的实际数据,并试图确定其类型,当它在数据中看到打印机转义代码时,它决定这是“原始”打印,并绕过接口。这不是我所期望的行为,因为我首先将打印机设置为一个“原始”队列,并假定这意味着cups只会通过接口传递任何发送给它的内容;然而,这是我正在看到的行为。

我的问题是:是否有一种方法可以将选项发送给cups (似乎也绕过接口的-o raw**,),告诉他不要检测接收到的打印数据的类型,然后继续发送到接口脚本?是否有一种方法来指定传入数据的格式(例如,告诉cups它正在接收的是“纯文本”,即使它包含转义代码),这样cups就不会看它,只是把它传递给接口?*

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-04 23:01:17

您拥有的打印队列不是“原始”队列!

First,您似乎不知道CUPS术语中的原始打印队列是什么:原始队列是与.

  • ...neither接口脚本(与位于/etc/cups/interfaces/中的队列本身同名的脚本),

  • ...nor一个PostScript打印机描述( PPD )文件(与队列本身同名的PPD文件,其后缀为*.ppd,位于/etc/cups/ppd/中)。

既然您说您已经为您的打印机队列安装了接口脚本,那么根据定义,它们是而不是原始队列!

要将作业作为raw (即:未经过滤)发送到非原始CUPS队列,除了在lp命令行上使用lp之外,没有其他方法。您也可以使用(或者)选项-o document-format=application/vnd.cups-raw..。但这有着完全相同的含义:它会导致杯子使用相同的工作处理方式,而且只需多7倍的键盘键就可以打孔。

都会导致CUPS跳过自动键入传入作业文件的步骤,并将其传递到队列的后端。

自动键入步骤及其结果可以在日志文件/var/log/cups/error_log中观察到,只要您的cupsd.conf启用了LogLevel debug,就可以查找关键字LogLevel debug:提到Request file type is ...的行告诉您,哪个MIME类型CUPS将您的传入作业分类为。)

如何强制CUPS将传入的打印数据作为文本处理

-o document-format=text/plain命令行中使用lp

如何设置CUPS 'raw‘队列

如果要将(任何)现有的打印队列转换为原始队列,只需删除相关的PPD文件(/etc/cups/ppd/myprinter.ppd)或关联的接口脚本(/etc/cups/interfaces/myprinter)。

如果希望从一开始就安装打印队列作为原始队列,只需使用printername和后端URI,但不要指定任何PPD或与其关联的任何接口脚本:

安装“raw”打印队列的示例命令:

代码语言:javascript
复制
 sudo lpadmin -p my_raw_printer -E -v socket://192.168.177.188:9100

( -p用于指定打印队列名,-E用于从开始时启用打印队列。)

猜测:为什么第二个应用程序可能是通过您的接口脚本传递的?

没有看到完整的系统设置,也没有查看第二个应用程序(其打印行为似乎与第一个应用程序不同),也没有对调试级别CUPS error_log文件的访问,就只能推测:

  • 我的猜测是,您的第二个应用程序使用了一些硬连线打印命令,它隐式地使用-o raw打印命令选项。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12271871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档