Wie kann man bei einem WLAN disassociate ein Skript ausführen?

Hinweis: In dem Thema Wie kann man bei einem WLAN disassociate ein Skript ausführen? gibt es 8 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Hallo,


    ich möchte auf meinem openSUSE Leap 42.1 (x86_64) folgendes erreichen: Wenn das WLAN ein disassociate bekommt, soll ein Skript gestartet werden. Das heisst, ich suche die Stelle, die als Callback für so ein Disassoc-Ereignis verwendet wird (denn es wird ja die NW-Verbindung wieder aufgebaut...).


    Mein WLAN wird mit wicked verwaltet, es gibt nur 1 aktiven USB WLAN Stick, ID 0bda:8179 Realtek, im Betrieb keine Probleme.


    Vielen Dank,
    Lynxnoise

    Für den Inhalt des Beitrages 99345 haftet ausdrücklich der jeweilige Autor: lynxnoise

  • Danke für den Hinweis auf DBUS. Hier ist das Ergebnis:


    Bash
    while sleep 10; do 
      dbus-monitor --system "interface=org.opensuse.Network.Interface" | 
        while read -r line ; do 
          if echo $line | grep addressAcquired; then exec doSomething; 
        fi; 
      done; 
    done;

    In Zeile 2 lauschen wir am dbus für das NW-Interface. Wenn da (Z 3) ein "addresAcquired" (Z4) auftaucht (oder ein anderer interessanter Zustand), wird etwas ausgeführt (Z4 exec). Wenn doSomething fertig ist, ist die Pipe aus Z2 auch weg (wegen exec), also warten wir ein bisschen (Z1), und lauschen dann wieder am Dbus.


    addressAcquired ist der Status, der nach einem Disassoc und dem folgenden reassoc auftritt, wenn der Adapter wieder über DHCP eine Adresse bekommen hat. Ab dann ist das Interface bereit zur Nutzung und kann mittels doSomething weiter konfiguriert werden.

    Für den Inhalt des Beitrages 99430 haftet ausdrücklich der jeweilige Autor: lynxnoise

  • Cool.


    OK. War zu banal.
    Dann will ich das jetzt in einer Version direkt mit systemd sehen.
    Quasi einen Service, der als Watchdog rumhängt.
    Das wär wichtig, weil ich mir das sonst selber zusammenpfrimmeln müsste.
    Mal hier einlesen.


    Und das Script solltest du evtl. nach Tutorials verschieben mit einer wesentlich ausführlicheren Erklärung.
    Denke, das wird so manchen interessieren.
    Wer das noch nicht gemacht hat, wird es damit alleine etwas schwer haben.

  • Also, Berichtigung,
    deinen Kommentar verstehe ich nicht ganz. Auf den ultrakurzen Hinweis "guckst du DBUS" habe ich mein Ergebnis gepostet. Das war schon ein bisschen Arbeit (ca 8h Recherche + "§$%&/!!!( Bash Eigenheiten). Und ich stimme dir zu: Ich *will das auch* als Systemd-Watchdog sehen ;). Aber ich mach das in meinem Tempo. Und was ich sonst noch *soll*, entscheide ich alleine.


    Wenn ich also das Bedürfnis habe, mein Ergebnis mit der Welt zu teilen, werde ich das tun, und zwar hier als Antwort. Nicht mehr, nicht weniger.


    Mit besten Grüßen aus den Untiefen des Systemd,
    Lynxnoise

    Für den Inhalt des Beitrages 99499 haftet ausdrücklich der jeweilige Autor: lynxnoise

  • Für die Welt: Hier eine Konfiguration, wie man z.B. auf den VPN-Tunnel aufpassen kann und im Falle eines Disassociate/Reassociate wieder neu aufbaut.
    Schritt 1: Service Skripts in /etc/systemd/system

    /etc/rc.d/vpn ist das init-Skript, das den VPN-Tunnel kontrolliert. Das ist systemspezifisch.



    Bash: vpnWatchdog.sh
    #!/bin/bash
    dbus-monitor --system interface=org.opensuse.Network.Interface | while read -r line ; do 
            if echo $line | grep addressAcquired; then 
                    /etc/rc.d/vpn retunnel
            fi; 
    done


    Mit dieser Konfiguration passiert folgenes:
    Beim Systemstart wird vor dem grafischen Login, und nachdem das "normale" NW aufgebaut wurde, der VPN-Tunnel aufgebaut. Zusätzlich wird der VPN-Watchdog gestartet. Wenn nun ein Dissassoc/Reassoc kommt, ruft der Watchdog /etc/rc.d/retunnel auf, und dort kann dann der Tunnel wieder hergestellt werden.


    Es gibt allerdings ein kleines Zeitfenster von ca 1-3 sec, in dem man "direkt" am Netz hängt. Aber besser als nix ;)


    Wichig ist noch, den Tunnel (z.B. openvpn) mit nohup zu starten, damit er dann nach Ende des /etc/rc.d/vpn auch weiterläuft.


    Viel Spass damit!

    Für den Inhalt des Beitrages 99506 haftet ausdrücklich der jeweilige Autor: lynxnoise

  • @lynxnoise
    Ich muß @Berichtigung insoweit Recht geben, dass dein Beitrag in "Tutorials" besser aufgehoben wäre, mit den entsprechenden Kommentaren zu den Scripten deinerseits.
    Ansonsten verschwindet deine Arbeit innert weniger Wochen in den Tiefen des Forum und wird nie wieder gesehen. Es wäre schade drum. Vllt. möchtest du das noch einmal überdenken?

  • Bitte schön, Berechtigung oder wer auch immer, möchte doch meine "Arbeit" fortsetzen und aus dem Fragment ein Tutorial machen. Das setzt vorraus, das der User zuerst das Zeug mal ausprobiert, einrichtet und versteht - so wie ich eben auf der Suche nach eine Lösung für genau diese eine Frage war, und den richtigen Hinweis hier bekommen habe.


    Ich finde aber das Zeugs nicht geeignet für ein Tutorial, da es nicht so ohne weiteres auf beliebige Systeme übertragbar ist. Und ein Tutorial würde auch bedeuten, dass der Kontext rundherum erklärt wird - eine Arbeit, die ich nicht leisten will. Daher habe ich meine Antwort auf meine eigene Frage hier gepostet, und gut is.

    Für den Inhalt des Beitrages 99509 haftet ausdrücklich der jeweilige Autor: lynxnoise

  • Wie auch immer.
    Es ist ja schon mal löblich, wenn du überhaupt (d)eine Lösung postest.


    Zur Sache:
    Man könnte das Ding mit dem VPN Tunnel um ein Script erleichtern.
    Du müsstest nur eine Watchdogfunction in das /etc/rc.d/vpn packen.
    Dann kannst du das via Servicefile starten lassen, dem du noch die entsprechende "Restart" Direktive mitgibst.
    Dafür müsstest du dich allerdings von DBUS wieder verabschieden, das Ding also rein in systemd machen.
    Letztlich schreibst du einfach eine "Restartmessage" in den systemd Socket.


    (DBUS kann man schon auch nehmen, nur wartest du halt auf dessen Start dann notwendigerweise mit. Könnte schneller und das Zeitfenster damit kleiner sein, als bei der jetzigen Lösung.)


    Nur so als Idee gedacht...