我在各个论坛上看到过大量询问这个问题和类似问题的帖子,但似乎没有人能够提供解决方案。
基本问题是这样的:
在 [插入旧版本的 Linux Distro] 上打印工作正常,但更新到 [新版本的 Linux Distro] 后,将文件发送到打印提示和打印机实际开始打印之间现在有 [5,10,15] 秒的延迟。
在我的特定情况下,在 Ubuntu 8.04 上打印立即开始,但升级到 10.04 后,延迟了 10 秒。我在 Ubuntu Server 上执行此操作,使用 lpr 命令进行打印,但问题也出现在 10.04 桌面上。据我所知,它也影响大多数 Linux 发行版的较新版本。Fedora、OpenSUSE、Arch 等。
打印机都是网络打印机。从 Windows 打印也很快捷。打印机上的指示灯立即开始闪烁,但 10-15 秒内没有任何反应。
Ubuntu 10.04 使用 CUPS 1.4.3。我以为可能是 CUPS 的一个 bug,所以我编译了 CUPS 1.4.5(最新稳定版)来替换 Ubuntu 的 1.4.3。但还是有延迟。
知道是什么原因造成的吗?或者有没有什么方法可以解决问题并找出原因?
更新:我将日志级别设置为调试,单个作业的日志输出约为 660 行。我发送的测试文件从添加到提示到输出用了 10 秒钟。
我不会在这里发布整个内容(除非你真的想要!),但这里是重点内容:
任务被提示,然后在同一秒内发生了许多事情。那一秒的最后一行是:
D [28/Nov/2010:14:44:19 -0500]
Discarding unused printer-state-changed event...
下一行日志出现在整整 4 秒之后:
D [28/Nov/2010:14:44:23 -0500]
[Job 3071] prtGeneralCurrentLocalization type is 0, expected 2!
因此,由于某种原因,这里有 4 秒的延迟。
1秒后我们得到:
D [28/Nov/2010:14:44:23 -0500] PID 15448 (/usr/lib/cups/filter/pdftoraster) 退出时没有错误。 D [28/Nov/2010:14:44:24 -0500] [作业 3071] 写入 8192 字节的打印数据... D [28/Nov/2010:14:44:24 -0500] [作业 3071] 读取 8192 字节的打印数据... 我 [28/Nov/2010:14:44:24 -0500] [作业 3071] 正在打印第 1 页,完成度 57%... 我 [28/Nov/2010:14:44:24 -0500] [作业 3071] 正在打印第 1 页,完成度 59%... D [28/Nov/2010:14:44:24 -0500] 丢弃未使用的作业进度事件... D [28/Nov/2010:14:44:24 -0500] 丢弃未使用的打印机状态改变事件... 我 [28/Nov/2010:14:44:24 -0500] [作业 3071] 正在打印第 1 页,完成度 60%...
重复进行直到:
我 [28/Nov/2010:14:44:26 -0500] [作业 3071] 正在打印第 1 页,完成 99%... D [28/Nov/2010:14:44:26 -0500] 丢弃未使用的作业进度事件... D [28/Nov/2010:14:44:26 -0500] 丢弃未使用的打印机状态改变事件... 我 [28/Nov/2010:14:44:26 -0500] [作业 3071] 准备打印。
然后它继续:
D [28/Nov/2010:14:44:26 -0500] [作业 3071] 写入 8192 字节的打印数据... D [28/Nov/2010:14:44:26 -0500] [作业 3071] 读取 8192 字节的打印数据...
一遍又一遍,直到:
D [28/Nov/2010:14:44:29 -0500] [作业 3071] 读取 3361 字节的打印数据... D [28/Nov/2010:14:44:29 -0500] [作业 3071] 写入 3361 字节的打印数据... 我 [28/Nov/2010:14:44:29 -0500] [作业 3071] 打印文件已发送,正在等待打印机完成...
这是打印机实际开始输出的时间点。整整 10 秒钟后。
答案1
我也遇到过类似的问题。我不确定这是否和您遇到的问题一样,但我们遇到过这样的情况:有些收据打印机在打印时突然出现 4 秒延迟,而其他收据打印机则立即出现延迟。
这是在 Cups 升级(Slackware linux)之后。
经过大量的调试我们发现支持SNMP的打印机不会出现延迟,而不支持SNMP的打印机则会有延迟。
升级后,cups 似乎在尝试通过 SNMP 从打印机获取信息,然后发送实际的打印作业。
我现在正在寻找一种方法来禁用此功能...如果我找到解决方案,我会尝试回复。
我应该提到,我们正在使用原始/套接字连接到这些打印机。我明白了RedHat 已报告此问题,但我无权查看它 (BZ#709896)
我真的不知道如何禁用 Cups 中的 SNMP 通信。:\
答案2
与您的问题可能无关的答案,但肯定是对我的问题的答案,是针对本地 USB 热敏打印机——为什么它会导致打印之间延迟 5 秒。
解决方案是,并非所有 USB 打印机都应设置为双向通信,就像 CUPS 想要的那样。因此,在 cups 的 /usr/share/cups/usb 区域中为打印机设置一个“怪癖”,以包含特定的打印机“ID”,并设置诸如“unidir”、“no-reattach”、“soft-reset”之类的标志,似乎完全解决了我的问题。希望任何遇到相同问题的人都可以节省几个小时调试 cups 代码,以了解我在调试输出中输入的内容,该输出表明它正在等待 USB 读取线程退出(显然是 5 秒)。
答案3
我建议看看 ubuntuforums 中的以下帖子,因为他们似乎也存在与打印机的通信问题。
http://ubuntuforums.org/showthread.php?t=1101273
希望有所帮助,RayQuang
答案4
使用 POS USB 打印机,我解决了以下问题:
停止 cups 服务
service cups stop
编辑 Printers.conf 文件
sudo nano /etc/cups/printers.conf
滚动到您的打印机并在所需打印机配置的最后一行添加此行:
Option usb-unidir true
重启 cups 服务
service cups restart