Outra possibilidade é usar a interface de linha de comando do Network Manager (não é tão "strong" como reiniciar o daemon, mas funcionou para mim). Nesse caso, a operação é exatamente igual a se você interagir com o applet, portanto, não precisa de nenhum privilégio.
Para reiniciar a interface wifi, use este código:
nmcli nm wifi off
sleep 5
nmcli nm wifi on
Eu tive problemas semelhantes com a queda da rede (no meu caso era um roteador defeituoso), então usei esse script adicionado ao trabalhos de inicialização :
#!/bin/bash
PINGTEST=192.168.1.1 # my router, change here. google.com should work anytime ;-)
while /bin/true; do
if ! [ "$(ping -c 1 $PINGTEST)" ]; then
echo "Warning: connection lost at $(date) -- restart" 1>&2
nmcli nm wifi off
sleep 5
nmcli nm wifi on
sleep 60
if ! [ "$(ping -c 1 $PINGTEST)" ]; then
echo "Waiting for connection going up at $(date)" 1>&2
sleep 60
else
echo "Connection on at $(date)" 1>&2
fi
# else
# echo "Connection OK on $(date)" 1>&2
fi
sleep 60
done
verifica a conexão a cada minuto e, se não funcionar, reinicia o wifi.
Se isso não for suficiente, você provavelmente precisará usar armas mais strongs, como iniciar / parar o Network Manager. Mesmo que em algum momento falhar em mim, e eu tenho que recorrer para descarregar ( sudo rmmod
) e, em seguida, recarregar ( sudo modprobe
) o módulo do driver da placa wifi.