local - CUPS @LOCAL 值

标签 local broadcast discovery cups

我有两台机器。一个使用 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 条目如下:

 - The Allow, Deny, BrowseAllow, BrowseDeny, and
   BrowseAddress directives now support the network
   interface names "@LOCAL" and "@IF(name)" for access
   control and browsing based on the current interface
   addresses instead of fixed names or IP addresses.

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

第二...

...让我们看看为什么您可能会看到差异:

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

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

可能还偶然发现了您计算机的两个 CUPS 版本之一中的错误。

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

相关文章:

sql-server - 将 SQL Server 实例配置为(本地)

Javascript:从页面内的内容将数据下载到文件

ios - 无法启用解析本地数据存储

android - 如何从接收器调用服务取决于互联网连接与否?

angularjs - $rootscope.$emit/$broadcast 不会传递参数

discovery - 您如何找到有趣的问题来解决?

android - 发现蓝牙设备列出重复名称

iphone - iPhone SDK 前台本地通知

service - CRM 2011使用C#连接到organization.svc

function - 从 Julia 中的函数中收集值