web-dev-qa-db-fra.com

Faire un script bash qui se reconnecte à AP quand la connexion est perdue

Je fais face à des problèmes de connexion Wi-Fi sur Ubuntu. J'ai essayé de mettre à jour le système, mais le problème est que je perds soudainement la connexion avec mon routeur. Lorsque j'appuie sur la barre WIFI, le système ne détecte aucun point d'accès. décochez l'option "enable WIFI", puis vérifiez-la à nouveau pour que cela fonctionne: il se reconnecte automatiquement.

Je songe à créer un script bash qui détecte le moment où le PC est déconnecté du routeur, quelle que soit la raison, et le désactive ensuite, puis active le wifi. Je veux dire comme automatiser la réinitialisation de la connexion que possible?

je suppose que je dois utiliser ceci

nmcli nm wifi off
nmcli nm wifi on

mais comment puis-je faire savoir au script si le PC est déconnecté du WIFI?

4
Alexander

C'est plus simple que vous ne le pensez:

#!/bin/bash

if ! [ "$(ping -c 1 google.com)" ]; then
    nmcli nm wifi off
    nmcli nm wifi on
fi

Ensuite, vous pouvez utiliser un travail cron pour que ce script s'exécute à chaque minute.

7
Radu Rădeanu

Bien que la réponse soit correcte, vous devez prendre en compte que:

1) cela fonctionnera si l'utilisateur est connecté ou non --- cela peut être un comportement souhaité ou non, selon l'application;

2) si la reconnexion tarde plus d'une minute, vous n'y arriverez jamais ...

J'ai écrit un script simple que je peux exécuter avec les scripts de démarrage de ma session graphique et qui peut être un bon candidat. Je redirige sa sortie vers un fichier afin de pouvoir suivre mon utilitaire SLogger.

Voici le script - on ne sait jamais.

#!/bin/bash
while /bin/true; do
    if ! [ "$(ping -c 1 google.com)" ]; then
        echo "Warning: connection lost at $(date) -- restart"  
        nmcli nm wifi off
        sleep 5
        nmcli nm wifi on
        sleep 60
        if ! [ "$(ping -c 1 google.com)" ]; then
             echo "Waiting for connection going up at $(date)"
             sleep 60
        else 
             echo "Connection on at $(date)" 
        fi
#    else
#        echo "Connection OK on $(date)"
    fi
sleep 60
done
4
Rmano