Userspace programm ausführen wenn eingelogged und online
-
- Beiträge: 441
- Registriert: 12.10.2005 23:09:28
- Lizenz eigener Beiträge: MIT Lizenz
-
Kontaktdaten:
Userspace programm ausführen wenn eingelogged und online
Ich habe ein Notebook das seine Internetverbindung je nach Umgebung per ifplugd/guessnet/wpa_supplicant über Lan oder Wlan aufbaut.
Was ist die sauberste Methode jedes mal nach dem Zustandekommen der Internetverbinung für alle angemeldenten Benutzer alle Scripts in einem vom jeweiligen Benutzer zu bestückenden Ordner (z.B. /home/[user]/opt/etc/network/if-up.d/) auszuführen?
Ein Shell-Script schreiben und unter /etc/network/if-up.d/ plazieren?
Das schreiben des Scripts bekomme ich hin, aber ist das der "richtige" Ansatz oder gibt es eine "elegantere" Lösung?
Was ist die sauberste Methode jedes mal nach dem Zustandekommen der Internetverbinung für alle angemeldenten Benutzer alle Scripts in einem vom jeweiligen Benutzer zu bestückenden Ordner (z.B. /home/[user]/opt/etc/network/if-up.d/) auszuführen?
Ein Shell-Script schreiben und unter /etc/network/if-up.d/ plazieren?
Das schreiben des Scripts bekomme ich hin, aber ist das der "richtige" Ansatz oder gibt es eine "elegantere" Lösung?
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett
- Livingston
- Beiträge: 1816
- Registriert: 04.02.2007 22:52:25
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: 127.0.0.1
Re: Userspace programm ausführen wenn eingelogged und online
Du könntest als non-root User inotifywait aus dem Paket inotify-tools auf /sys/class/net/<iface>/carrier loslassen. Hilfreich könnte generell https://www.kernel.org/doc/Documentatio ... -class-net bzw. falls installiert die ABI-Dokumentation des Kernels sein.
EDIT: Ergänzung
Die sys-Datei /sys/class/net/<iface>/carrier sagt dir nur, ob die Karte einen Link hat oder nicht. Das heißt noch nicht, dass sie eine IP-Adresse bezogen hat. Die solltest Du natürlich in dem Script auch noch abfragen, z.B. mit
(Das geht bestimmt auch eleganter. LinuxCowboy, bitte übernehmen!)
EDIT: Ergänzung
Die sys-Datei /sys/class/net/<iface>/carrier sagt dir nur, ob die Karte einen Link hat oder nicht. Das heißt noch nicht, dass sie eine IP-Adresse bezogen hat. Die solltest Du natürlich in dem Script auch noch abfragen, z.B. mit
Code: Alles auswählen
#!/bin/sh
LANG=C /sbin/ifconfig|/bin/sed -n '/^eth0/,/^$/s/^[ \t]*inet addr:\([0-9\.]*\)[ \t].*/\1/p'
-
- Beiträge: 441
- Registriert: 12.10.2005 23:09:28
- Lizenz eigener Beiträge: MIT Lizenz
-
Kontaktdaten:
Re: Userspace programm ausführen wenn eingelogged und online
Ah, inotfiywait klingt nach einer super Lösung!
Leider schint es nicht zu funktionieren. Bei folgendem test erhalte ich lediglich
und dann nichts weiter. Auch wenn ich wlan0 (dis)connecte.
Stehe ich nur auf dem Schlauch?
Leider schint es nicht zu funktionieren. Bei folgendem test erhalte ich lediglich
Code: Alles auswählen
$ while true; do inotifywait /sys/class/net/wlan0/carrier && cat /sys/class/net/wlan0/carrier; done
Setting up watches.
Watches established.
Stehe ich nur auf dem Schlauch?
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett
-
- Beiträge: 441
- Registriert: 12.10.2005 23:09:28
- Lizenz eigener Beiträge: MIT Lizenz
-
Kontaktdaten:
Re: Userspace programm ausführen wenn eingelogged und online
Mh. Sieht so aus also ob inotifywait im sysfs nicht funktioniert:
http://osdir.com/ml/linux.c-programming ... 00015.html
Schade. Irgendwelche andere Ideen?
http://osdir.com/ml/linux.c-programming ... 00015.html
Schade. Irgendwelche andere Ideen?
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett
- Livingston
- Beiträge: 1816
- Registriert: 04.02.2007 22:52:25
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: 127.0.0.1
Re: Userspace programm ausführen wenn eingelogged und online
Noch ein (ungetesteter) Einfall: Vielleicht klappt das Spiel ja mit /etc/network/interfaces/run/ifstate. Das Teilchen liegt nicht in einem virtuellen Dateisystem und ist für genau Deine Aufgabenstellung (wie) geschaffen.
-
- Beiträge: 441
- Registriert: 12.10.2005 23:09:28
- Lizenz eigener Beiträge: MIT Lizenz
-
Kontaktdaten:
Re: Userspace programm ausführen wenn eingelogged und online
Gute Idee!
Du meinst wahrscheinlich etc/network/run/ifstate. Das funktioniert fast.
Leider setzt irgendwas die permissions von /etc/network/run/ifstate so dass ich es als user nur lesen kann wenn neben lo mindestens ein echtes interface up ist.
Ich verstehe überhaupt nicht wozu das gut sein soll, aber es verhindert dass ich inotifywait wie folgt
einsetzten kann, da ich während alle interfaces down sind dauernd die Fehlermeldung
bekomme.
Arg...
Du meinst wahrscheinlich etc/network/run/ifstate. Das funktioniert fast.
Leider setzt irgendwas die permissions von /etc/network/run/ifstate so dass ich es als user nur lesen kann wenn neben lo mindestens ein echtes interface up ist.
Code: Alles auswählen
$ ifdown wlan0 && sleep 5 && ls -l /etc/network/run/ifstate
-rw------- 1 root root 6 Sep 12 11:39 /etc/network/run/ifstate
$ ifup wlan0 && sleep 5 && ls -l /etc/network/run/ifstate
-rw-r--r-- 1 root root 20 Sep 12 11:40 /etc/network/run/ifstate
Code: Alles auswählen
while true; do inotifywait -e modify /etc/network/run/ifstate ; cat /etc/network/run/ifstate ; done
Code: Alles auswählen
...
Couldn't watch /etc/network/run/ifstate: Permission denied
cat: /etc/network/run/ifstate: Permission denied
...
Arg...
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett
-
- Beiträge: 3799
- Registriert: 26.02.2009 14:35:56
Re: Userspace programm ausführen wenn eingelogged und online
Die kann man doch mit 2>/dev/null abschalten und den $? auswerten.
-
- Beiträge: 441
- Registriert: 12.10.2005 23:09:28
- Lizenz eigener Beiträge: MIT Lizenz
-
Kontaktdaten:
Re: Userspace programm ausführen wenn eingelogged und online
Das Problem ist eher dass inotifywait nicht wartet weil es keine watch establishen kann.
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett
- Livingston
- Beiträge: 1816
- Registriert: 04.02.2007 22:52:25
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: 127.0.0.1
Re: Userspace programm ausführen wenn eingelogged und online
Ich denke, Du solltest das Problem mit einem if-up.d/-Script erschlagen. Um root- und user-Welt getrennt zu halten, könnte das Script zum Beispiel im Verzeichnis /run eine allgemein-lesbare und damit inotifibierbare Datei anlegen, die von einem Script in if-down.d/ wieder entsorgt oder deren Inhalt verändert wird. Genau für so was ist /run ja schließlich da. Im übrigen ist garantiert, das Scripte, die nicht aus Debian-Paketen stammen, von apt / aptitude nicht angerührt werden. Du behältst also die volle Kontrolle über das Geschehen.