Conky 不显示无线信息

Conky 不显示无线信息

我在 conky 中显示 wifi 信号强度和 IP 时遇到了问题(尽管可以显示下载和上传量以及 DL/UP 比特率)。我使用带有 Broadcom 无线适配器 (BCM4312) 的 Dell Studio 1535 笔记本电脑。在谷歌上搜索了一段时间却找不到解决方案后,我认为分享我解决这个问题的经验可能会有所帮助。值得一提的是,我使用的是 Linux Mint 15 64 位,它基于 Ubuntu(存储库和所有内容),因此我认为这也适用于 Ubuntu。

答案1

有 2 个问题:conky 权限和网络接口 (NIC) 名称。简短摘要如下:

  1. 运行此命令以授予 Conky 所需的权限:

    sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/conky
    
  2. 将无线网卡从 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 所以我改为wlan0wlp2s0问题就解决了。

您可以关注主线程这里

我正在使用 Lubuntu 16.04

相关内容