Gnome Desktop Bildschirm aufwecken/einschlafen per Befehl?

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
alex0801
Beiträge: 195
Registriert: 16.10.2005 19:46:48

Gnome Desktop Bildschirm aufwecken/einschlafen per Befehl?

Beitrag von alex0801 » 01.11.2022 17:08:50

Hallo zusammen,

ich hab für meine Hausautomation mein Display an der Wand von Android auf ein Debian (11) Gnome umgestellt. Läuft mit Touch prima. Bin begeistert.
Das einzige was mir noch fehlt: Das Display per Kommando aufwecken und einschlafen lassen.

Ich hab überall KNX Präsenzmelder mit denen ich das Display ausschalten will wenn keiner mehr in Sichtweite ist und wieder einschaltet, wenn jemand in die Nähe kommt.
Ich hab bereits eine Logik, die mir bei Präsenz/wegfallender Präsenz ein TCP Befehl auf meine Wand-Display-Linuxkiste an ein dort lauschendes Netcat senden kann. Das Senden und Empfangen des Befehls funktioniert prima. Aber ich scheitere kläglich am Befehl zum Display einschlafen und wieder aufwecken lassen.

Hab schon probiert mit

Code: Alles auswählen

xset dpms force on ...
xset dpms force off ...
xrandr --outpout ... --auto 
xrandr --outpout ... --off
...
Nix funktioniert. Befehl wird einfach geschluckt ohne dass sich irgendwas ändert.

Hat jemand noch einen heißen Tipp für mich?

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Gnome Desktop Bildschirm aufwecken/einschlafen per Befehl?

Beitrag von JTH » 01.11.2022 17:21:08

Mit xset oder xrandr hab ich nie großartig was zu tun gehabt, vielleicht hat da jemand anderes noch ne Anregung für dich. Ein anderer Weg wäre, das Gewollte über D-Bus auszulösen:

Als User, in dessen Namen die Gnome-Session läuft:

Code: Alles auswählen

dbus-send --session --dest=org.gnome.ScreenSaver --type=method_call --print-reply /org/gnome/ScreenSaver org.gnome.ScreenSaver.SetActive boolean:true
Evtl. braucht das passende Einstellungen unter Gnome, dass der Monitor bei Inaktivität ausgeschaltet werden darf. Bin ich mir grad nicht ganz sicher, im Zweifelsfall einfach mal so ausprobieren.

Der Monitor lässt sich mit einem false am Ende wieder „anschalten“:

Code: Alles auswählen

dbus-send --session --dest=org.gnome.ScreenSaver --type=method_call --print-reply /org/gnome/ScreenSaver org.gnome.ScreenSaver.SetActive boolean:false

Die Benutzung von D-Bus lässt sich auch in diversen Skript- oder Programmiersprachen mit den jeweiligen Bindings integrieren, falls notwendig.
Manchmal bekannt als Just (another) Terminal Hacker.

alex0801
Beiträge: 195
Registriert: 16.10.2005 19:46:48

Re: Gnome Desktop Bildschirm aufwecken/einschlafen per Befehl?

Beitrag von alex0801 » 01.11.2022 18:08:30

Eben ausprobiert. Das funktioniert prima. Vielen herzlichen Dank.

alex0801
Beiträge: 195
Registriert: 16.10.2005 19:46:48

Re: Gnome Desktop Bildschirm aufwecken/einschlafen per Befehl?

Beitrag von alex0801 » 01.11.2022 20:23:51

Hab doch noch eine Rückfrage.

Also das Ein/Ausschalten funktioniert prinzipiell. Hab in den Energieeinstellungen eingestellt, dass er NIE das Display abschaltet. Wird ja jetzt von extern gesteuert und schaltet den Screensaver ein/aus.

ABER da funkt was dazwischen das meint den Monitor ausschalten zu müssen: Mit dem dbus-monitor hab ich gefunden:

Code: Alles auswählen

signal time=1667330147.109900 sender=:1.34 -> destination=(null destination) serial=1498 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
   string "org.gnome.Mutter.DisplayConfig"
   array [
      dict entry(
         string "PowerSaveMode"
         variant             int32 3
      )
   ]
   array [
   ]
Finde in den Einstellungen keine weiteren Settings die ich anpassen kann. Wo finde ich denn diesen PowerSaveMode in Gnome/Mutter?

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Gnome Desktop Bildschirm aufwecken/einschlafen per Befehl?

Beitrag von JTH » 02.11.2022 09:43:31

alex0801 hat geschrieben: ↑ zum Beitrag ↑
01.11.2022 20:23:51
ABER da funkt was dazwischen das meint den Monitor ausschalten zu müssen:
Wird der Monitor denn von etwas anderem tatsächlich ausgeschaltet? Das was du hier gefunden hast
alex0801 hat geschrieben: ↑ zum Beitrag ↑
01.11.2022 20:23:51
Mit dem dbus-monitor hab ich gefunden:

Code: Alles auswählen

signal time=1667330147.109900 sender=:1.34 -> destination=(null destination) serial=1498 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
   string "org.gnome.Mutter.DisplayConfig"
   array [
      dict entry(
         string "PowerSaveMode"
         variant             int32 3
      )
   ]
   array [
   ]
ist nur eine Benachrichtigung, dass sich ein Wert (PowerSaveMode) geändert hat (PropertiesChanged). Das ist keine auslösende D-Bus-Method. Findest du die evtl. direkt über diesem Abschnitt?

alex0801 hat geschrieben: ↑ zum Beitrag ↑
01.11.2022 20:23:51
Finde in den Einstellungen keine weiteren Settings die ich anpassen kann. Wo finde ich denn diesen PowerSaveMode in Gnome/Mutter?
Da bin ich mir so aus dem Stand auch nicht ganz sicher. Dies hier

Code: Alles auswählen

gsettings get org.gnome.desktop.session idle-delay
gibt erstmal eine Null aus?
Manchmal bekannt als Just (another) Terminal Hacker.

alex0801
Beiträge: 195
Registriert: 16.10.2005 19:46:48

Re: Gnome Desktop Bildschirm aufwecken/einschlafen per Befehl?

Beitrag von alex0801 » 02.11.2022 10:04:17

Ja, der Monitor wird ausgeschaltet. Der Monitor blendet nur kurz ein "No Signal" und geht dann aus.

Code: Alles auswählen

gsettings get org.gnome.desktop.session idle-delay
ergibt 0:
$ gsettings get org.gnome.desktop.session idle-delay
uint32 0
Und zum Zeitpunkt des "aus gehens" kommt die gesagte Meldung bzgl. PowerSaveMode.

Am Bildschirm selbst hab ich schon geschaut ob es da noch irgend etwas gibt das ich ausschalten kann. Da ist aber auch nix. Hätte mich auch gewundert.

In der Tat kommt vor dem PropertiesChanged noch ein

Code: Alles auswählen

method call time=1667379532.125793 sender=:1.64 -> destination=:1.34 serial=154 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=
Set
   string "org.gnome.Mutter.DisplayConfig"
   string "PowerSaveMode"
   variant       int32 3
Wer oder was und wieso und warum: Kein Plan.
Es dauert recht genau 15sek nach dem abschalten des Screensaver via dbus bis der Bildschirm wieder aus geht. Das lässt sich auch 1a reproduzieren

Mein "on" Script ist ja recht simpel:

Code: Alles auswählen

$ cat on.sh
#!/bin/sh
dbus-send --session --dest=org.gnome.ScreenSaver --type=method_call --print-reply /org/gnome/ScreenSaver org.gnome.ScreenSaver.SetActive boolean:false
Mir fällt auch kein Szenario ein bei dem ein abschalten des Screensavers gleich nach 15sek den Energiesparmodus Sinn ergeben würde.

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Gnome Desktop Bildschirm aufwecken/einschlafen per Befehl?

Beitrag von JTH » 02.11.2022 10:48:53

alex0801 hat geschrieben: ↑ zum Beitrag ↑
02.11.2022 10:04:17
In der Tat kommt vor dem PropertiesChanged noch ein

Code: Alles auswählen

method call time=1667379532.125793 sender=:1.64 -> destination=:1.34 serial=154 path=/org/gnome/Mutter/DisplayConfig; interface=org.freedesktop.DBus.Properties; member=
Set
   string "org.gnome.Mutter.DisplayConfig"
   string "PowerSaveMode"
   variant       int32 3
Da könnte man jetzt mal gucken, wer dieser anonyme Sender :1.64 ist. D-Bus und seine Teilnehmer lassen sich ja gut unter die Lupe nehmen (braucht Debianjq):

Code: Alles auswählen

who_are_you=":1.64"; cat /proc/$(busctl -j --user call org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus GetConnectionCredentials s "$who_are_you" | jq .data[0].ProcessID.data)/cmdline; echo

alex0801 hat geschrieben: ↑ zum Beitrag ↑
02.11.2022 10:04:17
Mein "on" Script ist ja recht simpel:

Code: Alles auswählen

$ cat on.sh
#!/bin/sh
dbus-send --session --dest=org.gnome.ScreenSaver --type=method_call --print-reply /org/gnome/ScreenSaver org.gnome.ScreenSaver.SetActive boolean:false
Das sollt so reichen. Aber ich schiebe nochmal ein, dass mein Vorschlag gestern nicht unbedingt weiter durchdacht war. Evtl. umgeht man da einen oder zwei (notwendige) Schritte, wenn man das Aktivieren auf diesem Weg macht. Oder sollte nach dem wieder Anschalten noch was anderes zusätzlich tun. Mal schauen.

alex0801 hat geschrieben: ↑ zum Beitrag ↑
02.11.2022 10:04:17
Mir fällt auch kein Szenario ein bei dem ein abschalten des Screensavers gleich nach 15sek den Energiesparmodus Sinn ergeben würde.
So sehr ich fürs Energiesparen bin, 15s sind schon recht radikal ;)


Nochmal als Ergänzung:
alex0801 hat geschrieben: ↑ zum Beitrag ↑
01.11.2022 17:08:50
Hab schon probiert mit

Code: Alles auswählen

xset dpms force on ...
xset dpms force off ...
xrandr --outpout ... --auto 
xrandr --outpout ... --off
...
Nix funktioniert. Befehl wird einfach geschluckt ohne dass sich irgendwas ändert.
Läuft bei dir evtl. eine Wayland-Session?

Code: Alles auswählen

echo $XDG_SESSION_TYPE
Funktionieren xset und xrandr dort vllt einfach nicht?
Manchmal bekannt als Just (another) Terminal Hacker.

alex0801
Beiträge: 195
Registriert: 16.10.2005 19:46:48

Re: Gnome Desktop Bildschirm aufwecken/einschlafen per Befehl?

Beitrag von alex0801 » 02.11.2022 11:05:24

Ich denke ich konnte es in der zwischenezeit alleine hinbiegen..

Da der Monitor als Display für die Heimaiutomatisierung dient, brauch ich keine Anmeldung und dergleichen. Hatte zwar eingerichtet das der User autom. angemeldet wird. Aber dieses Energiespar-Ding schien wohl vom GDM3 zu kommen. Hab mittlerweile "nodm" als Display-Manager und den eingerichtet auf den User den ich verwenden möchte.

Damit ist der Energiesparwahn nun "weg".

Display schlafen legen/aufwecken tu ich nun mit:

Code: Alles auswählen

busctl --user set-property org.gnome.Mutter.DisplayConfig /org/gnome/Mutter/DisplayConfig org.gnome.Mutter.DisplayConfig PowerSaveMode i 0
bzw:

Code: Alles auswählen

busctl --user set-property org.gnome.Mutter.DisplayConfig /org/gnome/Mutter/DisplayConfig org.gnome.Mutter.DisplayConfig PowerSaveMode i 1
Die Screensaver-Option will er mit "nodm" nicht mehr. Stört mich aber auch nicht. SO ist es sogar "direkter" gesteuert, weil direkt der PowerSafeMode gesteuert wird (hab ich vorher auch schon probiert, geht jetzt aber erst richtig mit nodm). Ziel erreicht: Rechner bootet direkt in den eingeloggten User (musste noch im Schlüsselbund ein leeres Passwort hinterlegen, sonst hat er auch das beim Start erfragt) und startet die gewünschte Anwendung.

Display ein/ausschalten läuft nun über mein KNX System und dessen Präsenzmelder, sowie NodeRed für die "Logik". Von da aus geht's per TCP Befehl an Netcat auf dem Display-Rechner, der dann das Display aufweckt oder schlafen legt.

P.S. Ja, da läuft schon per Default eine Wayland-Session. Hab ich dann auch rausgefunden... :-)

Benutzeravatar
debilian
Beiträge: 1162
Registriert: 21.05.2004 14:03:04
Wohnort: 192.168.43.7
Kontaktdaten:

Re: Gnome Desktop Bildschirm aufwecken/einschlafen per Befehl?

Beitrag von debilian » 02.11.2022 13:50:01

ich mach das immer so;
remote einloggen und:

Code: Alles auswählen

vbetool dpms off /on
-- nichts bewegt Sie wie ein GNU --

Antworten