É provável que entre em contato com o serviço do Network Manager usando o D-Bus, e o serviço Network Manager seja executado como root.
~ ps -o pid,user,cmd -C NetworkManager
PID USER CMD
894 root /usr/sbin/NetworkManager --no-daemon
No meu sistema, para descobrir a qualidade do sinal wifi conectado, eu teria que executar sudo iwconfig wlp6s0 onde wlp6s0 é o nome da interface do dispositivo que estou usando para conectar ao wifi. A saída não mostra a qualidade do link ou o nível do sinal se eu não executar o comando com sudo . No entanto, posso obter a força do sinal do Wi-Fi usando nmcli sem usar sudo , por exemplo. nmcli dev wifi .
Executando sudo strace iwconfig wlp6s0 , descobri que ele usa ioctl chamada do sistema, conforme indicado na linha strace output:
ioctl(3, SIOCGIWSTATS, 0x7ffd1bd7e960) = 0
Mas acontece que strace nmcli dev wifi não usa a mesma chamada de sistema para obter a força do sinal wifi ou informações relevantes.
Eu quero saber como nmcli obtém as informações necessárias para exibir a intensidade do sinal de Wi-Fi sem usar sudo .
EDIT: Saída de ambos os strace s:
É provável que entre em contato com o serviço do Network Manager usando o D-Bus, e o serviço Network Manager seja executado como root.
~ ps -o pid,user,cmd -C NetworkManager
PID USER CMD
894 root /usr/sbin/NetworkManager --no-daemon
Eu sou não executando o gerenciador de rede, e /sbin/iw wlan0 station dump pode mostrar a intensidade do sinal muito bem sem ser raiz.
Se eu fizer um strace , vejo que ele cria um soquete NETLINK e parece obter os dados desse soquete. Para mais detalhes, suponho que se deve ler a fonte de iw .
Tags linux wifi strace networkmanager