Printer queues with Samba and CUPS

Printer queues with Samba and CUPS

我已经成功地让 Samba 和 CUPS 协同工作,仅使用 Postscript 驱动程序就可以为 95 版以后的任何版本的 IA32 和 x64 Windows 客户端提供良好、一致的打印界面。smb.conf 中与打印相关的部分包括:

[global]
   load printers = yes
   printing = cups
   printcap name = cups

后来又分享了这些:

[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700

[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no

这成功枚举了所有 CUPS 打印机并且客户端可以正常打印。

但我遇到的问题是,Windows 客户端几乎看不到队列中除了自己的作业之外的任何作业,而且只能看到很短一段时间,大概是当作业正在后台处理到服务器时。这会产生连锁反应,如果有人想取消他们的一项作业,他们要么关闭打印机(!),要么让我这么做。

我印象中,和的组合减轻printing = cups了使用设置(如使队列管理功能可用)的需要,因为它直接使用了 libcups。但在测试服务器上,设置一个合理的值会稍微改变观察到的行为,这样按下刷新 Windows 中的队列会暂时显示作业,然后它们会再次消失。我遗漏了什么?printcap name = cups[global]lpq commandlpq commandF5

我一度怀疑它与共享read only上的设置有关。共享部分[printers]是什么意思?它与队列管理任务有关吗?无论以哪种方式更改它,我都看不到任何明显的区别,但我想了解而不是仅仅猜测!据推测,它与通常的文件共享上下文中的含义不同,因为共享在后台有一些与打印相关的魔法。不过,我找不到与打印机共享相关的任何具体文档。read only = yes[printers][printers]

答案1

本地 Windows 假脱机只是将其传送到远程假脱机。

我想,要实现您的愿望(让每个人都能看到所有排队的东西),只有使用一些 Windows 打印队列才能实现,但我远不是 Windows 专家。我会研究 IPP,我也不确定 lpd 是否设计为将队列发送回客户端,而是仅将您的东西提交给服务器。

答案2

您可以尝试使用 Windows 中的 IPP(将网络打印机定义为http://服务器:631/打印机/打印机名称并使用带有 Microsoft Imagesetter 的通用打印机)。

我不记得它是否列出了所有作业,直到它们出队——我将我的打印机配置为中止 CUPS 上失败的作业。

答案3

我遇到了和你描述完全相同的问题。

原来是cups里的隐私政策设置。

在你的cupsd.conf尝试

JobPrivateValues none

代替

JobPrivateValues default

默认情况下,对于未经身份验证的 IPP找工作 request cups does not return the attributes job-name and job-originating-user-name. But they are required by samba to successfully return the queue.
https://git.samba.org/?p=samba.git;a=blob;f=source3/printing/print_cups.c#l1378

To see if you have the same problem you can tell samba to talk to cups over network so you can use wireshark to dump the ipp traffic.

In smb.conf use e.g.

cups server = localhost

Now open the the printer on a Windows client and try to display the queue. Capture the resulting traffic between samba and cups and compare it with the traffic generated from a local command like

lpstat -h localhost -o

( If you don't use -h then lpstat uses a unix-socket to talk to cups and nothing ist captured.
For Windows clients samba caches the queue for 30 seconds so it could take a while before samba talks to cups - see lpq cache time in smb.conf. )

In the latter capture I saw the job-name and job-originating-user-name attributes. These were missing the Windows capture. After modifying cupsd.conf as said these attributes where also in the Windows capture and the queue was displayed on the Windows client.

答案4

Isn't it possible to setup CUPS so that clients can view and/or cancel their own jobs via the web interface via a specific cancel policy?

http://cupsServerIP:631

http://www.cups.org/documentation.php/policies.html

相关内容