在我的系统上,要了解连接的 wifi 信号的质量,我必须运行sudo iwconfig wlp6s0
where wlp6s0
is the name of the device interface I用来连接到 wifi 的设备接口的名称。如果我不使用 运行命令,输出不会显示链路质量或信号级别sudo
。但是,我可以nmcli
在不使用sudo
例如的情况下获得wifi的信号强度nmcli dev wifi
。
运行时sudo strace iwconfig wlp6s0
,我发现它使用ioctl
系统调用,如输出中的一行所示strace
:
ioctl(3, SIOCGIWSTATS, 0x7ffd1bd7e960) = 0
但事实证明strace nmcli dev wifi
并没有使用相同的系统调用来获取wifi信号强度或相关信息。
我想知道如何nmcli
获取它需要的信息来显示 wifi 信号强度而不使用sudo
.
编辑:两个strace
s 的输出:
完整输出
strace nmcli dev wifi
:https://pastebin.com/NdqBfC8W完整输出
sudo strace iwconfig wlp6s0
:https://pastebin.com/5w0Grwze
答案1
它可能使用 D-Bus 联系网络管理器服务,并且网络管理器服务以 root 身份运行。
~ ps -o pid,user,cmd -C NetworkManager
PID USER CMD
894 root /usr/sbin/NetworkManager --no-daemon
答案2
我是不是运行网络管理器,/sbin/iw wlan0 station dump
无需root即可显示信号强度。
如果我执行strace
,我会看到它创建了一个 NETLINK 套接字,并且似乎从该套接字获取数据。有关更多详细信息,我想应该阅读 的来源iw
。