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

我曾经在各种论坛上看过很多关于这个问题和类似问题的post,但似乎没有人能够提供解决scheme。

基本的问题是这样的:

在[插入Linux发行版的旧版本]上,打印效果很好,但在更新到[较新版本的Linux发行版]之后,现在在将文件发送到打印提示和打印机实际开始打印。

在我的特殊情况下,打印在Ubuntu 8.04上立即开始,但升级到10.04后,有10秒的延迟。 我在Ubuntu服务器上使用lpr命令进行打印,但问题出现在10.04桌面上。 从我读过的,它也影响MOST Linux发行版的更新版本。 Fedora,OpenSUSE,Arch等

打印机都是networking打印机。 从Windows打印也是即时的。 打印机上的指示灯会立即开始闪烁,但是10-15秒钟内没有任何指示。

Ubuntu 10.04使用CUPS 1.4.3。 我认为这可能是CUPS中的一个错误,所以我编译了CUPS 1.4.5(最新稳定版)来取代Ubuntu 1.4.3。 但是还有一个延迟。

任何想法可能导致这个? 还是一种解决问题的方法来找出是什么原因造成的?

更新 :我设置日志级别进行debugging,并在我的日志中获得大约660行的输出作业。 我发送的testing文件从添加到提示到提示出现的时间花费了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] [Job 3071]写入了8192字节的打印数据...
 D [28 / Nov / 2010:14:44:24 -0500] [Job 3071]读取8192字节的打印数据...
我[28 / Nov / 2010:14:44:24 -0500] [Job 3071]打印第1页,完成57%...
我[28 / Nov / 2010:14:44:24 -0500] [Job 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] [Job 3071]打印第1页,完成60%...

其中重复,直到:

我[28 / Nov / 2010:14:44:26 -0500] [Job 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] [Job 3071]准备打印。

然后它继续:

 D [28 / Nov / 2010:14:44:26 -0500] [Job 3071]写入8192字节的打印数据...
 D [28 / Nov / 2010:14:44:26 -0500] [Job 3071]读取8192字节的打印数据...

一遍又一遍,直到:

 D [28 / Nov / 2010:14:44:29 -0500] [Job 3071]读取3361字节的打印数据...
 D [28 / Nov / 2010:14:44:29 -0500] [Job 3071]写入3361字节的打印数据...
我[28 / Nov / 2010:14:44:29 -0500] [Job 3071]发送打印文件,等待打印机完成...

这是打印机实际开始生产输出的点。 整整10秒钟后。

我经历了一些相同的。 我不确定这是否与您同样的问题,但是我们使用收据打印机来处理这些问题,其中一些在打印时突然开始有4秒钟的延迟,而另一些则立即开始。

这是杯升级(Slackware的Linux)后。

经过大量debugging,我们发现支持SNMP的打印机没有延迟,而不支持SNMP的打印机确实有延迟。

在升级之后,似乎杯子在发送实际的打印作业之前试图通过SNMP从打印机获取信息。

我正在寻找一种方法来禁用此function…如果我find解决scheme,将尝试写回。

我应该提到,我们正在使用原始/套接字连接到这些打印机。 我看到RedHat有一个关于这个的报告错误 ,但我不允许查看它(BZ#709896)

我真的不知道如何禁用杯子中的SNMP通信。 :\

我会build议在Ubuntu的论坛看下面的post,因为他们似乎也有打印机的通信问题。

http://ubuntuforums.org/showthread.php?t=1101273

希望RayQuang帮忙

我有与user127222相同的经验。 对于某些不支持SNMP的打印机,打印作业将有4秒的延迟。 在CUPS学习这些代码之后:

  if ((ppd = ppdOpenFile(getenv("PPD"))) == NULL || ((ppdattr = ppdFindAttr(ppd, "cupsSNMPSupplies", NULL)) != NULL && ppdattr->value && _cups_strcasecmp(ppdattr->value, "true"))) { ppdClose(ppd); return; } 

我发现我可以通过更新该打印机的PPD文件来禁用这些SNMP请求。 使用:

 *cupsSNMPSupplies: False 

参考: CUPS PPD扩展