我在同一个子网上有两台服务器,一台是 CUPS 服务器,另一台需要访问 CUPS 服务器上配置的打印机。CUPS 浏览似乎部分正常工作,但根据客户端上的 lpstat,这些设备不是///dev/null
设备ipp
。
[username@clienthost ~]$ lpstat -t
scheduler is running
no system default destination
device for boardroom: ipp://oldprintserver.my.network:631/printers/boardroom
device for br: ipp://oldprintserver.my.network:631/printers/br
device for its: ///dev/null <------ THIS IS BAD?
- 打印服务器运行的是 Scientific Linux 6.4 和 CUPS 1.4.2
- 打印客户端运行的是 CentOS 5.8 和 CUPS 1.3.7
服务器配置-cupsd.conf
Browsing On
BrowseRemoteProtocols
BrowseAddress @LOCAL
BrowseLocalProtocols CUPS dnssd
客户端配置-cupsd.conf
Browsing On
BrowseOrder allow,deny
BrowseAllow @LOCAL
BrowsePoll therealprintservername.my.network
BrowseInterval 30
使用 tcpdump 分析主机之间的数据包,可以清楚地看到客户端正在通过 IPP 轮询服务器。服务器以 200 OK 响应。此外,客户端似乎只看到打印服务器通告的类,而不是打印机队列本身。
这就是我真正想知道的。
- 在同一 LAN 上进行 CUPS 浏览所需的最低配置是什么?
- 不同版本的 CUPS 之间打印机浏览功能可以正常工作吗?
- 还有哪些其他故障排除工具可用于解决打印机浏览问题?
[编辑:即使 lpstat -t 表示设备为 ///dev/null,我仍然可以向设备发送打印作业。因此看起来基本打印工作正常,但我仍然想知道为什么它在客户端上显示为 ///dev/null。]
答案1
我遇到的大多数问题都归结于对 CUPS 配置文件的误解。我偶然发现了一个很好的参考资料,叫做如何设置小型服务器 - CUPS 打印服务器(chschneider.eu) 提供了我所寻找的大部分答案。
打印机类有空设备
问:根据客户端上的 lpstat,设备是 ///dev/null,而不是 ipp 设备。
打印机类永远不会与特定设备或端口相关联。相反,它们包含其他打印机作为成员。无论您是在 CUPS 服务器还是客户端上运行 lpstat,打印机类始终会显示 ///dev/null 作为目标设备。这是预期的行为。
在没有本地服务器的情况下使用 CUPS 客户端
如果您希望所有打印任务都由一CUPS 打印服务器,您根本不需要配置本地 CUPS 服务器。只需将以下行添加到/etc/cups/client.conf
.
ServerName my_cups_server.my.network
在客户端模式下,所有常规打印命令(如lpstat
和 )lpr
都将直接发送到远程 CUPS 服务器。如果 client.conf 为空,打印命令将查找本地 CUPS 服务器。
最低配置
问:在同一 LAN 上进行 CUPS 浏览所需的最低配置是什么?
如果 CUPS 客户端模式不能满足您的需求,您需要配置本地 CUPS 服务器,以便它可以发现其他 CUPS 服务器上配置的打印机。有两种方法可以做到这一点。
通过 IPP 进行轮询
如果您只有几个客户端,并且希望更好地控制打印环境,那么这是理想的选择。轮询是 CUPS 不可或缺的一部分,无需特殊指令即可启用它。只需确保以下几点:
- 每个打印机队列都需要
Sharing
单独启用。 - 该
<Location />
节必须允许适当的子网和/或用户。 - 小心可能拒绝访问的自定义策略。
通过 UDP 广播浏览
如果您拥有大量客户端或服务器,并且想让打印服务器使用起来更方便,那么这是理想的选择。如果服务器上启用了浏览功能,它将定期发送 UDP 广播。
Browsing On
BrowseOrder allow,deny
BrowseAllow all
BrowseAddress @LOCAL