为什么在 Ubuntu Server 10.04 上打印时会有 10 秒的延迟?

为什么在 Ubuntu Server 10.04 上打印时会有 10 秒的延迟?

我在各个论坛上看到过大量询问这个问题和类似问题的帖子,但似乎没有人能够提供解决方案。

基本问题是这样的:

在 [插入旧版本的 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

相关内容