Comment persister sur une connexion wifi après déconnexion?


9

J'ai une machine Ubuntu exécutant un logiciel qui nécessite Internet. Cependant, parfois le wifi échoue (redémarrage du routeur par exemple) et ne retrouve pas le réseau, jusqu'à ce que je répare manuellement le redémarrage du gestionnaire de réseau ou que je coupe et rallume le wifi pour le trouver.

Existe-t-il un moyen possible d'exécuter une tâche Cron ou une tâche Supervord pour surveiller la connectivité et si le réseau ne peut pas être trouvé pour redémarrer le service de gestionnaire de réseau et se connecter à ce SSID spécifique?


Je pense que cela pourrait être dû à un nouveau bogue de gestionnaire de réseau, car j'ai également commencé à rencontrer ce problème récemment, je pense après la mise à niveau vers Ubuntu 15.04.
Sadi

1
Il existe un certain nombre de rapports de bogues qui suggèrent qu'il peut y avoir un problème. Pourriez-vous publier les détails de votre noyau (uname -a) et la version du gestionnaire de réseau, ainsi que les détails de votre carte WiFi.
DaveM

Réponses:


7

Je pense que cela pourrait être dû à un nouveau bogue de gestionnaire de réseau, car je n'ai également commencé à rencontrer ce problème que récemment - je pense après la mise à niveau vers Ubuntu 15.04.

Il semble que j'ai réussi à résoudre ce problème temporairement comme solution de contournement avec ces deux fichiers:

  1. J'ai un fichier de script pour regarder la connexion WiFi et activer et désactiver le WiFi lorsqu'il est déconnecté, par exemple ~/.bin/WiFi-Keep-Connectedavec ce contenu:


#!/bin/bash
while true; do
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        rfkill block wifi && rfkill unblock wifi
        sleep 10
    fi
    sleep 10
done

  1. J'ai également un fichier .desktop pour continuer à exécuter ce script chaque fois que je me connecte, par exemple ~/.config/autostart/KeepWifiConnected.desktopavec ce contenu:


[Desktop Entry]
Type=Application
Exec=/home/"username"/.bin/WiFi-Keep-Connected
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Keep WiFi Connected
Icon=networkmanager

Remarque: vous devrez saisir votre nom d'utilisateur dans le chemin indiqué Exec=ci-dessus.

NB: Parfois, redémarrer le Wi-Fi de cette manière ne suffit pas, auquel cas je dois redémarrer Network Manager en entrant cette commande une ou même deux fois depuis le terminal:sudo service network-manager restart

Par conséquent, il pourrait être préférable de modifier le script ci-dessus (juste au cas où) comme ceci:


#!/bin/bash
while true; do
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        rfkill block wifi && rfkill unblock wifi
        sleep 10
    fi
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        gksudo service network-manager restart
        sleep 10
    fi
    sleep 10
done


1

Je ne sais pas pourquoi, mais comme vous le mentionnez, parfois lorsque le wifi échoue, le gestionnaire de réseau ne retrouve plus le réseau.

Je pense que le problème est que le gestionnaire de réseau, après une panne de connexion wifi, ne rafraîchit pas la liste wifi (et il semble que le gestionnaire de réseau cache le réseau problématique). Le gestionnaire de réseau n'a pas d'option de menu de nouvelle analyse, et la désactivation et l'activation de la case à cocher sans fil dans le menu du gestionnaire de réseau ne forcent pas une nouvelle analyse wifi (comme le fait le redémarrage du service).

Lorsque le gestionnaire de réseau perd ma connexion sans fil et qu'il ne retrouve plus mon wifi (et je savais que le wifi est opérationnel), j'exécute la commande:

sudo iwlist wlan0 scan

Il effectue une analyse wifi sur l'interface wlan0 (wlan0 est le nom de l'interface sans fil dans mon ordinateur portable) et il vous montre les réseaux sans fil disponibles, mais en tant qu'effet secondaire, le gestionnaire de réseau actualise automatiquement sa liste et trouve le réseau perdu.

Je préfère exécuter la commande manuellement lorsque ce problème se produit (la reconnexion au réseau ne garantit pas la reprise de la communication et certains programmes devront être redémarrés).

Mais, comme vous le mentionnez, vous pouvez le cron, et vous pouvez le faire sans tester la connectivité (le processus de numérisation met à jour votre liste wifi mais ne ferme pas votre connexion sans fil actuelle, si vous êtes connecté).

Si vous préférez, vous pouvez tester la conectivité en utilisant ping ou iwconfig et si vous n'êtes pas connecté, lancez l'analyse.

Quelque chose comme:

#!/bin/bash
if ! ping -c 1 -W 1 your_router_ip &> /dev/null
then
    iwlist wlan0 scan
fi

Mais rappelez-vous que ce script doit être créé par sudo ou exécuté avec les privilèges root. Il envoie seulement 1 ping avec 1 seconde de temporisation.


La solution ci-dessus est correcte, mais comment intercepter la notification du gestionnaire de réseau (nm) que la connexion a été interrompue. Cela devrait être possible à partir de nm lui-même, un rapide coup d'œil à la source semble suggérer que la fonctionnalité est là. Le message provient de dbus et l'icône nm est mise à jour, il est donc possible que ce soit un bogue, ou qu'une autre partie du système intercepte la chute de la connexion et ait été modifiée et que l'avis ne passe plus pour tenter de se reconnecter?
DaveM

0

Ce que je pense, c'est que la connexion est perdue à cause des problèmes de connectivité du routeur. Le redémarrage du gestionnaire de réseau n'a pas pu aider lorsque le routeur lui-même a des problèmes. Vous pouvez plutôt créer un script pour suspendre le processus exécutant le logiciel à l'aide de SIGSTOP lorsque la connexion est perdue, et déclencher à nouveau pour continuer à utiliser SIGCONT lorsque le réseau devient disponible. Et ajoutez le script à vos tâches cron, en le planifiant pour s'exécuter toutes les minutes.

Pour votre référence: http://hints.macworld.com/article.php?story=20030915193440334

J'espère que cela t'aides.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.