Skript zum Neustarten von Network Manager nach dem Fortsetzen aus dem Ruhezustand

7

Wenn mein Laptop aus dem Ruhezustand wieder aufgenommen wird, wird die WLAN-Verbindung nicht wiederhergestellt und ich muss den Netzwerkmanager jedes Mal manuell sudo service network-manager restartvom Terminal aus neu starten .

Ich hatte ein Skript, das das tat, aber es verhinderte, dass der PC ordnungsgemäß aus dem Ruhezustand wieder aufgenommen wurde, sodass ich es entfernen musste.

Alexander Paunovsky
quelle

Antworten:

12

Sie sollten in der Lage sein, ein Skript im /etc/pm/sleep.d/Verzeichnis (oder angeblich im /lib/systemd/system-sleep/Verzeichnis, wenn Sie 15.10+ ausführen) zu erstellen, das diesen Neustartbefehl bei Systemwiederaufnahme ausführt. Stellen Sie sicher, dass das Skript ausführbar ist.

  1. Erstellen Sie eine network_restartDatei in diesem Verzeichnis mit folgenden Inhalten:

    case "${1}" in
      resume|thaw)
        sudo service network-manager restart
    ;;
    esac
    
  2. Machen Sie die Datei ausführbar: sudo chmod +x network_restart
Magen
quelle
1
Das ist eine großartige Lösung. Ich benutze es, um das nm-Applet neu zu starten, das es nach dem Suspend verliert.
Grzegorz
6

Unter systemdUbuntu 16.04 sollten Sie auch die Argumente "pre" (suspend) und "post" (resume) berücksichtigen ${1}, damit der Neustart erst ausgeführt wird, nachdem das System suspend verlassen wurde .

Ich musste auch ein hinzufügen sleep, um dem Netzwerk-Scan genügend Zeit zum Abschließen zu geben (meine beste Vermutung).

$ sudo cat /lib/systemd/system-sleep/network-manager-restart 
#!/bin/sh
set -e

if [ "$2" = "suspend" ] || [ "$2" = "hybrid-sleep" ]; then
    case "$1" in
        post) sleep 10 ; systemctl restart network-manager ;;
    esac
fi

Weitere Informationen finden Sie unter: https://www.freedesktop.org/software/systemd/man/systemd-suspend.service.html

Unmittelbar vor der Eingabe von System Suspend und / oder Hibernation führt systemd-suspend.service (und die anderen genannten Einheiten) alle ausführbaren Dateien in / usr / lib / systemd / system-sleep / aus und übergibt ihnen zwei Argumente. Das erste Argument ist "pre", das zweite entweder "suspend", "hibernate" oder "hybrid-sleep", abhängig von der gewählten Aktion. Unmittelbar nach dem Verlassen des Systems, dem Suspend und / oder dem Ruhezustand, werden dieselben ausführbaren Dateien ausgeführt, aber das erste Argument lautet jetzt "post". Alle ausführbaren Dateien in diesem Verzeichnis werden parallel ausgeführt, und die Ausführung der Aktion wird erst fortgesetzt, wenn alle ausführbaren Dateien abgeschlossen sind.

Lucas
quelle
1
"pre" und "post" werden $1entgegen dem ersten Absatz tatsächlich als erstes Argument übergeben . (Das Codebeispiel ist korrekt.) Ich würde eine Bearbeitung vorschlagen, aber es ist nur ein Zeichen :)
Ben