我有两台机器。一个使用 CUPS 1.5.0,另一个使用 CUPS 1.6.1。两台机器在同一个本地网络上。我想全面发现网络上的打印机。如果我运行以下命令:

CUPS_DEBUG_LEVEL=2 /usr/lib/cups/backend/snmp 2>&1

在两台机器上我得到不同的结果。带有 CUPS 1.5.0 的那台也是我想要的另一台带有 CUPS 1.6.1 的机器的结果。

我解决了这个问题! CUPS 中有一个名为 @LOCAL 的变量。上面的命令等于:
CUPS_DEBUG_LEVEL=2 /usr/lib/cups/backend/snmp @LOCAL 2>&1

问题在于,在第二种情况(CUPS 1.6.1)中,@LOCAL 的值是机器的本地 IP(192.168.3.69)而不是广播(192.168.3.255)。

如果我在机器二上运行以下命令一切正常:
CUPS_DEBUG_LEVEL=2 /usr/lib/cups/backend/snmp 192.168.3.255 2>&1

请解释我如何配置 @LOCAL 变量的值。或者为什么 CUPS 1.5.0 在安装时配置得很好而 1.6.1 没有? (安装后我什么都没做,效果很好)

最佳答案

第一的...

...让我们弄清楚 @LOCAL 的含义:
@LOCAL 字符串不完全是一个变量——在 CUPS 配置 (/etc/cups/cupsd.conf) 的上下文中,它被称为宏。还有更多可以使用的宏: @IF@GROUP@ACL@OWNER@SYSTEM
@LOCAL 宏在 1.1.15 版的 CUPS 中被引入。相应的 CHANGELOG 条目如下:



换句话说:在将其引入 CUPS 代码库之前,您必须将主机的当前 IP 地址硬编码到 cupsd.conf 中。之后,您可以选择在 @LOCAL 中写入 @IF(eth0)@IF(wlan1)cupsd.conf,CUPS 将使用当前 IP 地址( 所有 本地 IP 地址,如果框有多个!),即使它改变了。 (PPP/拨号连接的地址不算作本地IP地址...)

第二...

...让我们看看为什么你会看到差异:

如果无法访问两台机器的完整 CUPS 和网络设备配置,就无法回答这个问题。

可能是一台服务器比另一台服务器拥有更多的网络接口(interface)和/或更多不同的 IP 地址(例如使用 eth0:1 技巧来使用额外的虚拟网络接口(interface))。

您可能还偶然发现了机器的两个 CUPS 化身之一中的错误。

关于local - CUPS @LOCAL 值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13135018/

10-13 04:57