我在 conky 中显示 wifi 信号强度和 IP 时遇到了问题(尽管可以显示下载和上传量以及 DL/UP 比特率)。我使用带有 Broadcom 无线适配器 (BCM4312) 的 Dell Studio 1535 笔记本电脑。在谷歌上搜索了一段时间却找不到解决方案后,我认为分享我解决这个问题的经验可能会有所帮助。值得一提的是,我使用的是 Linux Mint 15 64 位,它基于 Ubuntu(存储库和所有内容),因此我认为这也适用于 Ubuntu。
答案1
有 2 个问题:conky 权限和网络接口 (NIC) 名称。简短摘要如下:
运行此命令以授予 Conky 所需的权限:
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/conky
将无线网卡从 eth1 重命名为 wlan0。如何。
为什么?
有些人(在他们的网站上)建议,问题可能出在 boradcom 无线适配器上,阻止 conky 请求获取适配器的信息,但由于命令行工具列表能够获取我家附近的无线网络列表,我怀疑阻止请求会是问题所在,尽管另一个命令行工具韋斯皮无法获取信息。
您可以使用命令行工具获取您所在地区的无线网络详细列表列表:
iwlist eth1 scan
事实上,问题之一是缺乏适当的 root 用户权限。显然,Conky 需要具有 root 权限才能访问网络库和功能。如果您不想使用 root 权限运行 conky,有一种方法(自 Linux 内核 2.2 开始)可以赋予程序所需的权限,而无需在 root 权限下运行它们。您可以为任何程序(其可执行二进制文件)授予部分 root 权限以执行特定功能(例如网络功能、文件系统功能等)。这在此有完整解释手册页,部分这里。因此,我们需要委托(Conky 的二进制文件)适当的 root 权限来执行与网络相关的任务并从有线/无线适配器捕获原始数据包。换句话说,任务被归类为不同的权限类别。这些访问类别中的两个(conky 需要它们)称为 cap_net_admin 和 cap_net_raw。我们需要授予 conky 这些权限类别。这是通过以下命令完成的(来源:这里):
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/conky
除了这个权限问题之外,回复话题给了我一个线索,我的网络接口卡 (NIC)(在本例中为无线适配器)的名称可能是问题的根源,因为 conky“假设”以“eth”(在我的情况下为 eth1)开头的接口名称是以太网(有线)网卡,因此,这些卡不应该代表信号强度。虽然这个线索非常宝贵,但上述主题中没有提供任何解决方案。我认为重命名接口可能会解决问题,事实确实如此!我将无线接口(默认情况下名为 eth1)重命名为 wlan0。这里,您可以找到如何在 Linux 中重命名网络接口卡。请注意,在那篇文章中,他们将接口重命名为“wan0”,我将其重命名为wlan0。
这是我的 .conkyrc 配置文件的网络部分:
${if_existing /proc/net/route eth0}
${voffset -6}${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed eth0} kb/s
${alignr}${upspeedgraph eth0 8,60}
${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed eth0} kb/s ${alignr}${downspeedgraph eth0 8,60}
${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup eth0}
${voffset 4}${font PizzaDude Bullets:size=14}T${font} Download: ${alignr}${totaldown eth0}
${voffset 4}${font PizzaDude Bullets:size=14}Z${font} Signal: ${wireless_link_qual eth0}% ${alignr}${wireless_link_bar 8,60 eth0}
${voffset 4}${font PizzaDude Bullets:size=14}a${font} Local Ip: ${alignr}${addr eth0}
${voffset 4}${font PizzaDude Bullets:size=14}b${font} Public Ip: ${alignr} ${execi 3600 wget -O - http://ip.tupeux.com | tail}
${else if_existing /proc/net/route wlan0} ${voffset 4}${font PizzaDude Bullets:size=14}Z${font} Signal: ${wireless_link_qual wlan0}% ${alignr}${wireless_link_bar 8,60 wlan0}
${voffset 4}${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed wlan0} kb/s ${alignr}${upspeedgraph wlan0 8,60}
${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed wlan0} kb/s ${alignr}${downspeedgraph wlan0 8,60}
${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup wlan0}
${voffset 4}${font PizzaDude Bullets:size=14}T${font} Download: ${alignr}${totaldown wlan0}
${voffset 4}${font PizzaDude Bullets:size=14}a${font} Local Ip: ${alignr}${addr wlan0}
${voffset 4}${font PizzaDude Bullets:size=14}b${font} Public Ip: ${alignr} ${execi 3600 wget -O - http://ip.tupeux.com | tail}
${endif}
最后,这里有一些额外的命令,用于显示和删除(可执行/二进制)文件的功能(部分和分类的 root 权限):
您可以通过运行以下命令找出每个文件的权限:
getcap filepath/filename
并删除文件的所有权限(功能):
setcap -r filepath/filename
答案2
顺便说一句,以防万一有人没有注意到并且这能有所帮助:不要忘记删除文件wlan0
后面的所有斜线.conkryc
。示例:
${upspeedf wlan0/} --> ${upspeedf wlan0}
${downspeedf wlan0/} --> ${downspeedf wlan0}
如果 之后没有任何斜杠wlan0
,那么就没有问题,但我必须删除.conkyrc
文件里的斜杠,否则 Conky 将不会显示网络upspeedf
(对于 也是如此downspeedf
)——即使在关注了 Metallica 的帖子之后也是如此。
答案3
以下是我解决问题的方法:首先,我使用此命令获取了我的无线适配器名称:
ifconfig
我的无线适配器名称是,wlp2s0
所以我改为wlan0
,wlp2s0
问题就解决了。
您可以关注主线程这里。
我正在使用 Lubuntu 16.04