Wie kann man nach dem Trennen der Verbindung eine WLAN-Verbindung aufrechterhalten?

9

Ich habe eine Ubuntu-Maschine, auf der eine Software ausgeführt wird, die Internet benötigt. Manchmal schlägt das WLAN jedoch fehl (z. B. Neustart des Routers) und findet das Netzwerk nicht wieder, bis ich den Neustart des Netzwerkmanagers manuell durchführe oder das WLAN aus- und wieder einschalte, um es zu finden.

Gibt es eine Möglichkeit, einen Cron-Job oder einen Supervisord-Job auszuführen, um die Konnektivität zu überwachen, und wenn das Netzwerk nicht gefunden werden kann, um den Netzwerkmanager-Dienst neu zu starten und eine Verbindung zu dieser bestimmten SSID herzustellen?

Blauer Geist
quelle
Ich denke, dies könnte an einem neuen Netzwerkmanager-Fehler liegen, da ich dieses Problem erst seit kurzem habe, denke ich nach dem Upgrade auf Ubuntu 15.04.
Sadi
1
Es gibt eine Reihe von Fehlerberichten, die darauf hinweisen, dass möglicherweise ein Problem vorliegt. Könnten Sie Details zu Ihrem Kernel (uname -a) und der Netzwerkmanager-Version sowie Details zu Ihrer WiFi-Karte veröffentlichen?
DaveM

Antworten:

7

Ich denke, dies könnte an einem neuen Netzwerkmanager-Fehler liegen, da dieses Problem erst seit kurzem auftritt - ich denke, nach dem Upgrade auf Ubuntu 15.04.

Es scheint, dass ich es geschafft habe, dieses Problem vorübergehend zu lösen, um dieses Problem zu umgehen:

  1. Ich habe eine Skriptdatei, um die WiFi-Verbindung zu überwachen und WiFi ein- und auszuschalten, wenn die Verbindung getrennt wird, z. B. ~/.bin/WiFi-Keep-Connectedmit folgendem Inhalt:


#!/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. Ich habe auch eine .desktop-Datei, mit der dieses Skript bei jeder Anmeldung ausgeführt werden kann, z. B. ~/.config/autostart/KeepWifiConnected.desktopmit folgendem Inhalt:


[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

Hinweis: Sie müssen Ihren Benutzernamen in den Exec=oben angegebenen Pfad eingeben .

NB: Manchmal reicht es nicht aus, Wi-Fi auf diese Weise neu zu starten. In diesem Fall muss ich Network Manager neu starten, indem ich diesen Befehl ein- oder sogar zweimal über das Terminal eingebe:sudo service network-manager restart

Daher ist es möglicherweise besser , das obige Skript (nur für den Fall) wie folgt zu ändern:


#!/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

Sadi
quelle
1

Ich weiß nicht warum, aber wie Sie bereits erwähnt haben, findet der Netzwerkmanager das Netzwerk manchmal nicht wieder, wenn das WLAN ausfällt.

Ich denke, dass das Problem darin besteht, dass der Netzwerkmanager nach einem WLAN-Verbindungsfehler die WLAN-Liste nicht aktualisiert (und es scheint, dass der Netzwerkmanager das problematische Netzwerk verbirgt). Der Netzwerkmanager verfügt nicht über eine Menüoption zum erneuten Scannen. Durch Deaktivieren und Aktivieren des Kontrollkästchens für die drahtlose Verbindung im Menü des Netzwerkmanagers wird kein neuer WLAN-Scan erzwungen (wie beim Neustart des Dienstes).

Wenn der Netzwerkmanager meine drahtlose Verbindung verliert und mein WLAN nicht wieder findet (und ich wusste, dass das WLAN funktioniert), führe ich den folgenden Befehl aus:

sudo iwlist wlan0 scan

Es führt einen WLAN-Scan auf der wlan0-Schnittstelle durch (wlan0 ist der Name der drahtlosen Schnittstelle in meinem Laptop) und zeigt Ihnen die verfügbaren drahtlosen Netzwerke an. Als Nebeneffekt aktualisiert der Netzwerkmanager automatisch seine Liste und findet das verlorene Netzwerk.

Ich bevorzuge es, den Befehl manuell auszuführen, wenn dieses Problem auftritt (eine erneute Netzwerkverbindung stellt keine Wiederaufnahme der Kommunikation sicher, und einige Programme müssen neu gestartet werden).

Wie Sie bereits erwähnt haben, können Sie dies tun, ohne die Konnektivität zu testen (der Scanvorgang aktualisiert Ihre WLAN-Liste, schließt jedoch nicht Ihre aktuelle drahtlose Verbindung, wenn Sie verbunden sind).

Wenn Sie möchten, können Sie die Konnektivität mit Ping oder iwconfig testen. Wenn Sie nicht verbunden sind, starten Sie den Scan.

Etwas wie:

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

Denken Sie jedoch daran, dass dieses Skript mit Root-Rechten ausgeführt oder ausgeführt werden muss. Es wird nur 1 Ping mit 1 Sekunde Timeout gesendet.

acesargl
quelle
Die obige Lösung ist in Ordnung, aber wie kann man die Benachrichtigung vom Netzwerkmanager (nm) abfangen, dass die Verbindung unterbrochen wurde? Dies sollte innerhalb von nm selbst möglich sein. Ein kurzer Blick durch die Quelle scheint darauf hinzudeuten, dass die Funktionalität vorhanden ist. Die Nachricht wird von dbus übernommen und das nm-Symbol wird aktualisiert. Es ist also möglich, dass dies ein Fehler ist oder dass ein anderer Teil des Systems den Verbindungsabbruch abfängt und geändert wurde und der Hinweis nicht mehr weitergeleitet wird, um zu versuchen, die Verbindung wiederherzustellen.
DaveM
0

Ich denke, das Problem ist, dass die Verbindung aufgrund von Konnektivitätsproblemen des Routers unterbrochen wird. Ein Neustart des Netzwerkmanagers konnte nicht helfen, wenn der Router selbst Probleme hat. Sie können vielmehr ein Skript erstellen, mit dem der Prozess, auf dem die Software ausgeführt wird, mithilfe von SIGSTOP angehalten wird, wenn die Verbindung unterbrochen wird, und erneut ausgelöst werden, um die Verwendung von SIGCONT fortzusetzen, wenn das Netzwerk verfügbar wird. Fügen Sie das Skript zu Ihren Cron-Jobs hinzu und planen Sie, dass es jede Minute ausgeführt wird.

Als Referenz: http://hints.macworld.com/article.php?story=20030915193440334

Hoffe das hilft.

Virtuelle Reisen
quelle