• Monitor "Power off" unter bookworm und wayland klappt nicht (per motion

    From =?UTF-8?Q?Heiko_Wei=C3=9F?=@21:1/5 to All on Fri Mar 29 20:40:01 2024
    Hallo nette Leute,

    ich würde gern meine alte Installation von buster auf bookworm (mit
    neuem libcamera Code) updaten, aber an einer Kleinigkeit scheitert das
    ganze aktuell.
    Daher hoffe ich auf Eure Erfahrungen und Ideen :-)

    Hintergrund: es läuft MagicMirror, wobei der Monitor aus
    Stromspargründen nur eingeschalten wird, wenn das motion Programm eine Bewegung registriert. Bisher habe ich das recht einfach und zuverlässig mittels Befehl in motion gesteuert:
    on_event_end /usr/bin/vcgencmd display_power 1
    bzw.
    on_event_end /usr/bin/vcgencmd display_power 0

    Leider gibt es unter bookworm keine Möglichkeit mehr, damit den Monitor auszuschalten. /usr/bin/vcgencmd display_power 0 bewirkt nichts mehr :-(
    Meldet aber immer "vcgencmd display_power 1" zurück ...
    Alternativ cec-ctl kommt nicht in Frage, da mein Monitor kein cec
    unterstützt. Auch tvservice wird unter bookworm nicht mehr unterstützt.

    Was funktioniert ist folgender Befehl in der bash (per ssh getestet) zum
    Aus- und Einschalten:
    WAYLAND_DISPLAY="wayland-1" wlr-randr --output HDMI-A-1 --off
    bzw.
    WAYLAND_DISPLAY="wayland-1" wlr-randr --output HDMI-A-1 --on


    Da mein User per Autologin in die GUI startet, muss das Kommando unter
    seiner Kennung ausgeführt werden.

    Verschiedene Versuche wie:

    sudo su -u Autologin-User WAYLAND_DISPLAY="wayland-1" wlr-randr --output HDMI-A-1 --off

    haben erwartungsgemäß nicht funktioniert. Fehlermeldung:
    error: XDG_RUNTIME_DIR is invalid or not set in the environment.
    failed to connect to display

    Ich habe testweise auch den motion Dienst mal auf den Autologin-User umkonfiguriert und gestartet, aber es hat nicht funktioniert, auch wenn
    ich im Log gesehen habe, dass der Befehl abgesetzt wurde:

    [1:ml1] [DBG] [EVT] [Mär 29 19:55:17] exec_command: Externes Kommando ' WAYLAND_DISPLAY="wayland-1" wlr-randr --output HDMI-A-1 --off' ausführen

    Wie bekomme ich es hin, dass der Dienst das Kommando erfolgreich
    absetzt? Wayland ist für mich ziemliches Neuland.
    Oder gibt es noch andere Steuerungs Möglichkeiten, die ich übersehen habe?

    technische Infos:
    echo $XDG_SESSION_TYPE liefert -> wayland

    Linux raspberrypi 6.6.20+rpt-rpi-v8 #1 SMP PREEMPT Debian
    1:6.6.20-1+rpt1 (2024-03-07) aarch64 GNU/Linux

    kmsprint
    Connector 0 (32) HDMI-A-1 (connected)
    Encoder 0 (31) TMDS
    Crtc 3 (94) 1280x1024@60.02 108.000 1280/48/112/248/+ 1024/1/3/38/+ 60
    (60.02) P|D
    Plane 3 (84) fb-id: 337 (crtcs: 3) 0,0 1280x1024 -> 0,0 1280x1024 (XR24
    AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU24 YV24 YU12
    YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12
    XB12 AB12 BX12 BA12 RX12 RA12)
    FB 337 1280x1024 XR24
    Plane 25 (307) fb-id: 341 (crtcs: 3) 0,0 64x64 -> -2,-2 64x64 (XR24 AR24
    AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU24 YV24 YU12 YV12
    NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12
    AB12 BX12 BA12 RX12 RA12)
    FB 341 64x64 AR24
    Connector 1 (41) HDMI-A-2 (disconnected)
    Encoder 1 (40) TMDS

    WAYLAND_DISPLAY="wayland-1" wlr-randr
    HDMI-A-2 "(null) (null) (HDMI-A-2)"
    Enabled: yes
    Modes:
    1200x720 px, 59.868000 Hz (current)
    Position: 1280,0
    Transform: normal
    Scale: 1.000000
    HDMI-A-1 "Eizo Nanao Corporation S1910 40057115 (HDMI-A-1)"
    Physical size: 380x300 mm
    Enabled: yes
    Modes:
    720x400 px, 70.082001 Hz
    640x480 px, 59.939999 Hz
    800x600 px, 60.317001 Hz
    1024x768 px, 60.004002 Hz
    1280x1024 px, 60.020000 Hz (preferred, current)
    Position: 0,0
    Transform: normal
    Scale: 1.000000


    Falls das Forum hier nicht so der beste Platz ist, bin ich für andere
    Ideen offen
    vielen Dank für Eure Unterstützung

    Heiko

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ulf Volmer@21:1/5 to All on Fri Mar 29 21:50:01 2024
    Am 29.03.24 um 20:32 schrieb Heiko Weiß:

    sudo su -u Autologin-User WAYLAND_DISPLAY="wayland-1" wlr-randr --output HDMI-A-1 --off

    haben erwartungsgemäß nicht funktioniert. Fehlermeldung:
    error: XDG_RUNTIME_DIR is invalid or not set in the environment.
    failed to connect to display

    Vermutlich habe ich ein zu schlichtes Bild der Situation, aber spricht irgendetwas dagegen, $XDG_RUNTIME_DIR passend zu setzen?

    Viele GTrüße
    Ulf

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Heiko_Wei=C3=9F?=@21:1/5 to All on Sun Mar 31 12:30:01 2024
    Am 29.03.24 um 21:43 schrieb Ulf Volmer:
    Am 29.03.24 um 20:32 schrieb Heiko Weiß:

    sudo su -u Autologin-User WAYLAND_DISPLAY="wayland-1" wlr-randr --output
    HDMI-A-1 --off

    haben erwartungsgemäß nicht funktioniert. Fehlermeldung:
    error: XDG_RUNTIME_DIR is invalid or not set in the environment.
    failed to connect to display

    Vermutlich habe ich ein zu schlichtes Bild der Situation, aber spricht irgendetwas dagegen, $XDG_RUNTIME_DIR passend zu setzen?

    Viele GTrüße
    Ulf


    Danke für die Idee Ulf

    Ich habe mich dazu an folgendem Artikel orientiert, da mir bei dem Thema
    auch die Erfahrung fehlt: https://askubuntu.com/questions/538416/how-to-set-xdg-runtime-dir

    In meinem System hat aber nur ein User eine Loginshell:

    ls -al /run/user/
    insgesamt 0
    drwxr-xr-x 3 root root 60 29. Mär 20:34 .
    drwxr-xr-x 29 root root 820 31. Mär 11:53 ..
    drwx------ 12 pi pi 400 29. Mär 20:34 1000

    Der Prozess/Dienst, welcher das Display schalten soll, läuft mit dem
    motion User:
    getent passwd motion
    motion:x:112:122::/var/lib/motionplus:/usr/sbin/nologin
    getent group motion
    motion:x:122:

    Greift da denn überhaupt eine Umgebungsvariable, wenn der motion user
    nicht mal eine Loginshell hat? Und leztendlich ist auch nur der User pi
    per GUI eingeloggt...

    Wäre trotzdem als Lösung solch ein Cronjob unter dem motion user denkbar ? @reboot echo "export XDG_RUNTIME_DIR=/run/user/122" >> /home/motion/.bashrc source /home/motion/.bashrc

    Habs mal durchgespielt, komme da aber nicht weiter :-(
    motion Loginshell gegeben:
    getent passwd motion
    motion:x:112:122::/var/lib/motionplus:/bin/bash

    manuell erstellt: /run/user/122
    ls -al /run/user
    insgesamt 0
    drwxr-xr-x 4 root root 80 31. Mär 12:21 .
    drwxr-xr-x 29 root root 820 31. Mär 11:53 ..
    drwx------ 12 pi pi 400 29. Mär 20:34 1000
    drwx------ 2 motion motion 40 31. Mär 12:21 122


    motion@raspberrypi:~$ export XDG_RUNTIME_DIR=/run/user/122
    Kontrolle:
    env|grep XDG liefert
    XDG_RUNTIME_DIR=/run/user/122

    motion@raspberrypi:~$ WAYLAND_DISPLAY="wayland-1" wlr-randr --output
    HDMI-A-1 --off
    failed to connect to display


    Ich komme da gedanklich nicht weiter und kann auch nicht einschätzen, ob
    ich auf dem richtigen Weg bin.

    Hat noch jemand eine Idee?

    schöne Ostern
    Heiko

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ulf Volmer@21:1/5 to All on Sat Apr 6 09:51:02 2024
    Am 31.03.24 um 12:25 schrieb Heiko Weiß:

    Greift da denn überhaupt eine Umgebungsvariable, wenn der motion user
    nicht mal eine Loginshell hat? Und leztendlich ist auch nur der User pi
    per GUI eingeloggt...

    Wenn die GUI unter dem User pi läuft, ist es hilfreich, wenn Du Dein
    kommando auch unter dem User ausführst. Ob jetzt per ssh, cron und so
    ist erst mal egal.

    Du bruachst beide Variablen mit passendem Inhalt. Bei meiner Debian VM
    tut z.B.

    WAYLAND_DISPLAY="wayland-1" XDG_RUNTIME_DIR=/run/user/1000 wlr-randr
    --output Virtual-1 --on

    (eine Zeile)

    Viele Grüße
    Ulf

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?Q?Heiko_Wei=C3=9F?=@21:1/5 to All on Thu Apr 11 18:40:02 2024
    Am 01.04.24 um 22:24 schrieb Ulf Volmer:
    Am 31.03.24 um 12:25 schrieb Heiko Weiß:

    Greift da denn überhaupt eine Umgebungsvariable, wenn der motion user
    nicht mal eine Loginshell hat? Und leztendlich ist auch nur der User pi
    per GUI eingeloggt...

    Wenn die GUI unter dem User pi läuft, ist es hilfreich, wenn Du Dein kommando auch unter dem User ausführst. Ob jetzt per ssh, cron und so
    ist erst mal egal.

    Du bruachst beide Variablen mit passendem Inhalt. Bei meiner Debian VM
    tut z.B.

    WAYLAND_DISPLAY="wayland-1" XDG_RUNTIME_DIR=/run/user/1000 wlr-randr
    --output Virtual-1 --on

    (eine Zeile)

    Viele Grüße
    Ulf


    Hallo Ulf,

    danke für deine Antwort. Im Prinzip konnte ich mir das ja schon nach den fehlgeschlagenen Test denken. Dein Beitrag hat mich dann auf die
    richtige Idee gebracht:

    /etc/motion/motion.conf
    ...
    on_event_start sudo -u pi WAYLAND_DISPLAY="wayland-1" XDG_RUNTIME_DIR=/run/user/1000 wlr-randr --output HDMI-A-1 --on
    on_event_end sudo -u pi WAYLAND_DISPLAY="wayland-1" XDG_RUNTIME_DIR=/run/user/1000 wlr-randr --output HDMI-A-1 --off
    ...

    Damit funktioniert das ganze wieder so perfekt wie vorher :-)

    Viele Grüße
    Heiko

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)