Networkmanager (nmcli) 如何在没有 root 权限的情况下获取我的 wifi 信号强度?

Networkmanager (nmcli) 如何在没有 root 权限的情况下获取我的 wifi 信号强度?

在我的系统上,要了解连接的 wifi 信号的质量,我必须运行sudo iwconfig wlp6s0where wlp6s0is 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.

编辑:两个straces 的输出:

  1. 完整输出strace nmcli dev wifihttps://pastebin.com/NdqBfC8W

  2. 完整输出sudo strace iwconfig wlp6s0https://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

相关内容