如何在Generic Monitor(genmon)扩展上显示wlan0的网络收发带宽?
如何在Generic Monitor(genmon)扩展上显示wlan0的网络收发带宽?
我完全懂你的困扰!之前你试过nload这类工具都没成功,核心原因就是genmon的工作机制和实时监控工具不兼容——genmon是每隔固定时间运行一次指定命令,然后把命令的输出结果显示出来;但像nload这种工具是持续运行、实时刷新输出内容的,和whoami那种一次性输出单行结果的命令逻辑完全不同,自然没法在genmon里正常展示。
你想要的理想效果是每次刷新都显示类似out:00.0kb/s in:00.0kb/s的单行结果,这种需求确实得靠每次运行仅输出当前瞬时/平均带宽单行结果的命令来实现,不能用持续输出的实时工具。
给你两个可行的方案:
方案1:单行命令直接使用
你可以直接在genmon的命令输入框里填入这条命令:
awk -v iface="wlan0" 'BEGIN{ while ((getline < "/proc/net/dev") > 0) { if ($1 == iface":") { rx_old=$2; tx_old=$10; break } } system("sleep 1") while ((getline < "/proc/net/dev") > 0) { if ($1 == iface":") { rx_new=$2; tx_new=$10; break } } rx_kb=(rx_new - rx_old)/1024 tx_kb=(tx_new - tx_old)/1024 printf "out:%.1fkb/s in:%.1fkb/s\n", tx_kb, rx_kb }'
这个命令的原理是:先读取/proc/net/dev里wlan0的初始收发字节数,等待1秒后再次读取最新的字节数,通过差值计算出这1秒内的平均带宽,最后按你要的格式输出单行结果。genmon每隔几秒运行一次这个命令,就能得到实时更新的带宽数据了。
方案2:用脚本封装(更易维护)
如果觉得单行命令太复杂,你可以写一个简单的脚本:
- 创建一个名为
bandwidth_monitor.sh的文件,内容如下:
#!/bin/bash # 指定要监控的网卡 INTERFACE="wlan0" # 读取初始收发字节数 read -r _ rx_old _ _ _ _ _ _ _ tx_old < <(grep "$INTERFACE" /proc/net/dev) # 等待1秒获取差值 sleep 1 # 读取最新收发字节数 read -r _ rx_new _ _ _ _ _ _ _ tx_new < <(grep "$INTERFACE" /proc/net/dev) # 计算带宽(转换为KB/s) rx_kb=$(echo "scale=1; ($rx_new - $rx_old)/1024" | bc) tx_kb=$(echo "scale=1; ($tx_new - $tx_old)/1024" | bc) # 格式化输出 printf "out:%skb/s in:%skb/s\n" "$tx_kb" "$rx_kb"
- 给脚本添加执行权限:
chmod +x bandwidth_monitor.sh
- 在genmon的命令设置里填入脚本的完整路径(比如
/home/your_username/bandwidth_monitor.sh),然后调整genmon的刷新间隔(建议设为2-3秒,和脚本里的sleep 1配合,结果会更准确)。
补充说明
为什么这类一次性计算的命令能适配genmon?因为genmon每次触发时,都会完整执行一次命令并捕获它的最终输出——而我们的命令每次运行都是独立计算当前的带宽情况,输出唯一的一行结果,完全符合genmon的要求。而像nload这类工具会持续输出新内容,genmon只会读取第一次的输出,后续的刷新内容不会被处理,所以没法正常显示。
备注:内容来源于stack exchange,提问作者user1775763
相关产品推荐
相关产品推荐

