当我尝试将原始文件(如 PCL 文件)发送到我的网络打印机时,即使我使用“lpr -l”或“lpr -o raw”之类的命令,CUPS 队列也会出错,并且打印机会“禁用”。
我认为可能是 PPD 搞砸了,因为打印机的 PPD 在其描述中特别说明了“Postscript(推荐)”,如果将 postscript 发送给它,那么它可以正常工作。
我无法将其作为设备直接发送到打印机,因为它已联网。
当我尝试将原始文件(如 PCL 文件)发送到我的网络打印机时,即使我使用“lpr -l”或“lpr -o raw”之类的命令,CUPS 队列也会出错,并且打印机会“禁用”。
我认为可能是 PPD 搞砸了,因为打印机的 PPD 在其描述中特别说明了“Postscript(推荐)”,如果将 postscript 发送给它,那么它可以正常工作。
我无法将其作为设备直接发送到打印机,因为它已联网。
PCL 和 Postscripts 是两个相互竞争的打印协议。
如果打印机同时支持这两种协议,您必须在 CUPS 中定义不同的队列,使用不同的 PPD/与打印件交谈的不同方式。
您可以尝试通过 IPP 与打印机对话。
如果打印机特定型号只使用 Postscript,那么您就无法向其发送 PCL。
您可以使用
lpr -o raw pcl-file
将数据发送到打印机而无需对其进行任何修改。事实上,这种用法非常普遍,因此有一个单独的选项:(lpr -l pcl-file
等价-l
于-o raw
)。在为此苦苦挣扎了很长时间(大约一个月)之后,我发现基本上 lpr/CUPS 是某种大脑受损的逻辑,导致它在联网打印机上失败。问题是整个“禁用/启用”打印机范例,一旦 lpr 变得混乱,打印机就会变得无法使用,这肯定会在某个时候发生。由于用户必须具有超级用户权限才能诊断此类问题,因此 lpr 对于工作组环境中具有非特权用户的任何人来说基本上都无法使用。
我解决问题的方法是用 C 语言编写一个短程序,连接到端口 9100 上的打印机 IP 地址,打开 PCL 文件以只读方式打印,将文件复制到连接套接字,然后关闭连接和文件。这对我来说每次都完美无缺。因此,如果您想打印原始文件,基本上使用您必须执行此操作的任何编程功能。您甚至可以在 bash 或 csh 中执行此操作。