|
Viper73
Anmeldungsdatum: 26. April 2014
Beiträge: 60
|
Hallo zusammen, ich möchte bei Ubuntu 26.04 den Desktop so einrichten, das die WLAN Verbindung deaktiviert wird (oder getrennt wird), sobald das System automatisch nach x Minuten den Sperrbildschirm wg. Inaktivität aktiviert. Verlässt man wieder den Sperrbildschirm - also meldet sich erneut an - soll die WLAN Verbindung wieder hergestellt werden. Ich habe ein bisschen rumgesucht aber bin nicht weiter gekommen. Man kann das wohl in den gsettings mit einem Script machen. Aber das bekomme ich selbst nicht hin, schon weil ich die gsettings noch nie genutzt habe und auch keine Scripte schreiben kann. Was wäre denn die einfachste Möglichkeit das mit dem WLAN so einzustellen wie ich es möchte, und falls es die gsettings mit Script wird, könnte mir da jemand weiterhelfen?
Vielleicht hat ja auch noch jemand eine andere Idee wie man das lösen könnte. Gruß, Viper73
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14656
|
Viper73 schrieb: Vielleicht hat ja auch noch jemand eine andere Idee wie man das lösen könnte.
Du könntest z. B. dbus-monitor benutzen in einem (lauschenden) Script mit while.
Ich haben das mal getestet und folgende Zeilen in der Ausgabe von dbus-monitor bekommen bzw. gefunden (... in Abhängigkeit vom Zustand des Sperrbildschirms):
| :~# dbus-monitor --system "type='signal',interface='org.freedesktop.login1.Session'"
...
signal time=1779272083.828345 sender=:1.1 -> destination=(null destination) serial=126 path=/org/freedesktop/login1/session/_35; interface=org.freedesktop.login1.Session; member=Lock
signal time=1779272478.662694 sender=:1.1 -> destination=(null destination) serial=132 path=/org/freedesktop/login1/session/_35; interface=org.freedesktop.login1.Session; member=Unlock
|
Entscheidend ist "member=Lock" und "member=Unlock", auf die Du mit dem Script permanent filtern musst. Das deaktivieren und aktivieren des Wlans im Script könntest Du dann je nach benutztem Frontend machen. Beim NM mit z. B.:
bzw.
Das getestete und funktionierende Script könntest Du dann auch in einer service-unit "unterbringen". Für die weitere "Feinarbeit", könntest Du jetzt eine geeignete KI benutzen. 😉
|
|
Viper73
(Themenstarter)
Anmeldungsdatum: 26. April 2014
Beiträge: 60
|
@lubux OK, das musste ich jetzt 3x lesen damit ich einigermaßen verstanden habe was du vorschlägst 😬 –- Also, ich lese mit dem Befehl:
dbus-monitor --system "type='signal',interface='org.freedesktop.login1.Session'"
aus wie mein System sich beim Login/Logout verhält. –- Die Befehle:
nmcli radio wifi off (bzw. on)
schalten das WLAN dann aus bzw. ein –- Was du mit der Service Unit meinst verstehe ich leider nicht, dazu bin ich noch nicht weit genug mit Linux befürchte ich.
Ich brauche jetzt also noch das Script das die ganze Sache automatisiert, und dieses kann ich dann in eine "Service Unit" machen damit es immer mitläuft und entsprechend reagiert wenn ab- bzw. angemeldet wird !? Hab ich das richtig verstanden? Sorry falls das blöde (Anfänger-) Fragen sind, aber hier bewege ich mich jetzt schon an der Grenze meines (aktuellen) Linux Wissen.
|
|
HarryD
Anmeldungsdatum: 14. Juni 2006
Beiträge: 2943
Wohnort: Germany - BW
|
Du musst dich mit systemd und systemd/Service Units befassen.
|
|
encbladexp
Ehemaliger
Anmeldungsdatum: 16. Februar 2007
Beiträge: 17666
|
Was ist die Motivation dahinter?
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14656
|
Viper73 schrieb: Ich brauche jetzt also noch das Script das die ganze Sache automatisiert, ...
Ja, ... und dieses Script kannst Du erstmal auch ohne service-unit, testen bzw. benutzen. EDIT: Dieses Script:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | :~$ cat /usr/local/bin/checklock
#!/bin/bash -e
#
dbus-monitor --system "type='signal',interface='org.freedesktop.login1.Session'" | while read -r line; do
if echo "$line" | grep -q -i "Member=Lock"; then
# nmcli radio wifi off
echo Lock: " " $(date) >> /var/log/checklock.log
elif echo "$line" | grep -q -i "Member=Unlock"; then
# nmcli radio wifi on
echo Unlock: " " $(date) >> /var/log/checklock.log
fi
done
#
exit 0
|
funktioniert bei mir so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | :~# bash -x /usr/local/bin/checklock
+ dbus-monitor --system 'type='\''signal'\'',interface='\''org.freedesktop.login1.Session'\'''
+ read -r line
+ echo 'signal time=1779309572.083479 sender=org.freedesktop.DBus -> destination=:1.85 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired'
+ grep -q -i Member=Lock
+ echo 'signal time=1779309572.083479 sender=org.freedesktop.DBus -> destination=:1.85 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired'
+ grep -q -i Member=Unlock
+ read -r line
+ echo 'string ":1.85"'
+ grep -q -i Member=Lock
+ echo 'string ":1.85"'
+ grep -q -i Member=Unlock
+ read -r line
+ echo 'signal time=1779309572.083533 sender=org.freedesktop.DBus -> destination=:1.85 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost'
+ grep -q -i Member=Lock
+ echo 'signal time=1779309572.083533 sender=org.freedesktop.DBus -> destination=:1.85 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost'
+ grep -q -i Member=Unlock
+ read -r line
+ echo 'string ":1.85"'
+ grep -q -i Member=Lock
+ echo 'string ":1.85"'
+ grep -q -i Member=Unlock
+ read -r line
+ echo 'signal time=1779310698.340521 sender=:1.6 -> destination=(null destination) serial=473 path=/org/freedesktop/login1/session/_35; interface=org.freedesktop.login1.Session; member=Lock'
+ grep -q -i Member=Lock
++ date
+ echo Lock: ' ' Mi 20. Mai 22:58:18 CEST 2026
+ read -r line
+ echo 'signal time=1779310730.269308 sender=:1.6 -> destination=(null destination) serial=479 path=/org/freedesktop/login1/session/_35; interface=org.freedesktop.login1.Session; member=Unlock'
+ grep -q -i Member=Lock
+ echo 'signal time=1779310730.269308 sender=:1.6 -> destination=(null destination) serial=479 path=/org/freedesktop/login1/session/_35; interface=org.freedesktop.login1.Session; member=Unlock'
+ grep -q -i Member=Unlock
++ date
+ echo Unlock: ' ' Mi 20. Mai 22:58:50 CEST 2026
+ read -r line
^C
|
Inhalt der "Logdatei":
| :~$ cat /var/log/checklock.log
Lock: Mi 20. Mai 22:58:18 CEST 2026
Unlock: Mi 20. Mai 22:58:50 CEST 2026
|
|
|
Viper73
(Themenstarter)
Anmeldungsdatum: 26. April 2014
Beiträge: 60
|
HarryD schrieb: Du musst dich mit systemd und systemd/Service Units befassen.
Alles klar, da werd ich mich mal etwas einlesen. encbladexp schrieb: Was ist die Motivation dahinter?
Das ist eigentlich gar nicht für mich, jemand hat mich gefragt ob das möglich ist und ob ich schauen kann ob ich das für ihn hinbekomme. Er möchte einfach das die Kiste kein Zugang zum Internet hat, wenn er nicht am PC hockt. Deshalb bin ich am schauen ob ich das hinbekomme (und dabei auch noch was lerne). lubux schrieb: EDIT:
Dieses Script: (...)
Ich werde mal etwas damit rumtesten und schauen wie weit ich komme bzw. ob ich es hinbekomme.
Vielen Dank schonmal für das Script und die Erklärungen. Das hilft mir schonmal weiter!
|
|
Viper73
(Themenstarter)
Anmeldungsdatum: 26. April 2014
Beiträge: 60
|
lubux schrieb: Viper73 schrieb: Vielleicht hat ja auch noch jemand eine andere Idee wie man das lösen könnte.
Du könntest z. B. dbus-monitor benutzen in einem (lauschenden) Script mit while.
Ich haben das mal getestet und folgende Zeilen in der Ausgabe von dbus-monitor bekommen bzw. gefunden (... in Abhängigkeit vom Zustand des Sperrbildschirms):
| :~# dbus-monitor --system "type='signal',interface='org.freedesktop.login1.Session'"
...
signal time=1779272083.828345 sender=:1.1 -> destination=(null destination) serial=126 path=/org/freedesktop/login1/session/_35; interface=org.freedesktop.login1.Session; member=Lock
signal time=1779272478.662694 sender=:1.1 -> destination=(null destination) serial=132 path=/org/freedesktop/login1/session/_35; interface=org.freedesktop.login1.Session; member=Unlock
|
Entscheidend ist "member=Lock" und "member=Unlock", auf die Du mit dem Script permanent filtern musst.
Ich bekomme hier leider kein "Lock" angezeigt, er erkennt nur das Unlock.
Daher klappt das mit dem Script nicht, da er vergelich auf "Lock" wartet: | signal time=1780048315.262623 sender=org.freedesktop.DBus -> destination=:1.315 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
string ":1.315"
signal time=1780048315.262646 sender=org.freedesktop.DBus -> destination=:1.315 serial=4 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
string ":1.315"
signal time=1780048331.645527 sender=:1.2 -> destination=(null destination) serial=1113 path=/org/freedesktop/login1/session/_32; interface=org.freedesktop.login1.Session; member=Unlock
|
Liegt das vielleicht an Wayland oder das ich das aktuell in einer VM teste?
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14656
|
Ich denke es wird an der VM liegen.
|
|
schwarzheit
Supporter
Anmeldungsdatum: 31. Dezember 2007
Beiträge: 8180
|
Hat die VM überhaupt WLan? Normalerweise laufen VMs doch mit einer virtuellen Lan Verbindung zum Host.
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14656
|
@TE: Teste mal in deiner VM, … ob du den Bildschirm mit bzw. aus dem Systemmenü der DE oder/und durch Drücken der Windows-Taste + L, sperren kannst?
|
|
Viper73
(Themenstarter)
Anmeldungsdatum: 26. April 2014
Beiträge: 60
|
schwarzheit schrieb: Hat die VM überhaupt WLan? Normalerweise laufen VMs doch mit einer virtuellen Lan Verbindung zum Host.
Das hatte ich bedacht und das Script so umgeschrieben, das der LAN Adapter deaktiviert werden soll statt des WLAN.
Wobei es erstmal keinen Unterschied macht, da das Script bzw. dbus-monitor das "Unlock" gar nicht registriert/bemerkt und dann eben auch nichts weiter ausführt. lubux schrieb: @TE: Teste mal in deiner VM, … ob du den Bildschirm mit bzw. aus dem Systemmenü der DE oder/und durch Drücken der Windows-Taste + L, sperren kannst?
Ich kann nur in Ubuntu per "Ausschalten-Button" oben rechts, und dann auf das Schloßsymbol klicken, die Session abmelden. Win+L geht direkt zum Host. Aber ich dachte mir durch das Schloß-Symbol sollte er ja eigentlich dennoch mitbekommen das der User in den Sperrbildschirm geht. Ich kann noch testen ob er es bemerkt wenn ich die Zeit auf 1 Minute stelle bis er automatisch in der Lock-Screen geht, vielleicht bemerkt er es ja dann.
|
|
Viper73
(Themenstarter)
Anmeldungsdatum: 26. April 2014
Beiträge: 60
|
lubux schrieb: @TE: Teste mal in deiner VM, … ob du den Bildschirm mit bzw. aus dem Systemmenü der DE oder/und durch Drücken der Windows-Taste + L, sperren kannst?
Also ich habe jetzt Ubuntu auf meinem alten Notebook installiert zum testen in einer echten Umgebung.
Theoretisch würde das Script so funktionieren, aber auch hier wird "Lock" nicht erkannt, nur "Unlock": Befehl:
dbus-monitor --system "type='signal',interface='org.freedesktop.login1.Session'" Ergebnis:
dbus-monitor: unable to enable new-style monitoring: org.freedesktop.DBus.Error.AccessDenied: "Rejected send message, 1 matched rules; type="method_call", sender=":1.206" (uid=1000 pid=29322 comm="dbus-monitor --system type='signal',interface='org" label="unconfined") interface="org.freedesktop.DBus.Monitoring" member="BecomeMonitor" error name="(unset)" requested_reply="0" destination="org.freedesktop.DBus" (bus)". Falling back to eavesdropping.
signal time=1781269474.066108 sender=org.freedesktop.DBus -> destination=:1.206 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
string ":1.206"
signal time=1781269487.649802 sender=:1.2 -> destination=(null destination) serial=875 path=/org/freedesktop/login1/session/_32; interface=org.freedesktop.login1.Session; member=Unlock Hast du hier eine Idee woran das liegen könnte?
|
|
lubux
Anmeldungsdatum: 21. November 2012
Beiträge: 14656
|
Viper73 schrieb: Hast du hier eine Idee ...
Teste mal mit diesem Script:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #!/bin/bash -e
#
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'" | while read -r line; do
if echo "$line" | grep -q "boolean"; then
status=$(echo "$line" | awk '{print $2}')
if [ "$status" = "true" ]; then
# nmcli radio wifi off
echo Lock: " " $(date) >> /var/log/checklock.log
elif [ "$status" = "false" ]; then
# nmcli radio wifi on
echo Unlock: " " $(date) >> /var/log/checklock.log
fi
fi
done
#
exit 0
|
|
|
Maranto
Anmeldungsdatum: 1. Mai 2026
Beiträge: 51
|
Profan, aber sinnvoll.. Um die Status/log Sache einfacher zu machen könnte mglw. spd-say "WLAN ist ausgeschaltet" mit rein.
|