# Bildschirm-Dimmung – Labor23-Terminal Dokumentation des Lösungswegs. ## Ausgangslage - Anzeige: greetd → labwc (Wayland) → Ungoogled-Chromium im Kiosk-Modus (User `kiosk`, UID 1001), zeigt eine Home-Assistant-Seite --- ## Diagnose – was NICHT funktioniert (und warum) ### 1. Hardware-Backlight – kein Device vorhanden ```bash ls /sys/class/backlight/ # leer ``` ### 2. DDC/CI – kein Monitor antwortet (bei internem LVDS nicht vorgesehen) ```bash sudo apt install ddcutil sudo modprobe i2c-dev sudo ddcutil detect # -> No displays found ddcutil environment # bestätigt: Konfiguration ok, trotzdem kein Display ``` ### 3. Anschluss-Prüfung – Panel ist intern (LVDS) ```bash grep -r . /sys/class/drm/*/status 2>/dev/null # card0-LVDS-1: connected lsmod | grep -iE 'video|backlight' # 'video' geladen, kein backlight echo $XDG_SESSION_TYPE # leer (Befehl lief auf Konsole/SSH) ``` ### 4. Kernel-Parameter erzwingen – brachte ebenfalls kein Backlight-Device Datei `/etc/default/grub`, Zeile `GRUB_CMDLINE_LINUX_DEFAULT` nacheinander mit `acpi_backlight=vendor`, `acpi_backlight=native`, `acpi_backlight=video` getestet: ```bash sudo cp /etc/default/grub /etc/default/grub.backup sudo nano /etc/default/grub sudo update-grub sudo reboot # nach jedem Reboot: ls /sys/class/backlight/ # blieb leer dmesg | grep -iE 'backlight|acpi_video' # keine Ausgabe ``` ### 5. BIOS – keine Helligkeitsoption vorhanden Phoenix AwardBIOS V6.00PG bietet keinerlei Brightness-/Backlight-/LVDS-Einstellung. **Fazit der Diagnose:** Die Hintergrundbeleuchtung dieses Panels lässt sich vom System aus nicht ansteuern (Hardware-/Firmware-Grenze). Lösung ist daher **Software-Dimmen** über das Wayland-Gamma-Protokoll (labwc/wlroots unterstützt `wlr-gamma-control-unstable-v1`). --- ## Lösung – Software-Dimmen über Wayland ### Schritt 1: Sitzung identifizieren ```bash ps -eo user,pid,cmd | grep -iE 'labwc|chromium' | grep -v grep ls -la /run/user/ # kiosk = UID 1001 loginctl list-sessions ls -l /run/user/1001/wayland-* # -> wayland-0 ``` ### Schritt 2: Funktionstest mit gammastep (setzt nur festen Wert) ```bash sudo apt install gammastep # Test direkt mit Sitzungs-Umgebung: XDG_RUNTIME_DIR=/run/user/1001 WAYLAND_DISPLAY=wayland-0 \ gammastep -m wayland -O 6500 -b 0.6 ``` Bestätigte: Dimmen funktioniert grundsätzlich. Für dynamische/externe Steuerung aber ungeeignet (kein Live-Ändern), daher wl-gammarelay-rs. ### Schritt 3: wl-gammarelay-rs installieren (Vorkompilierte statische Binärdatei – kein Rust/Compiler auf dem Gerät nötig.) [wl-gammarelay-rs](./wl-gammarelay-rs) ```bash install -m 755 wl-gammarelay-rs /usr/local/bin/wl-gammarelay-rs /usr/local/bin/wl-gammarelay-rs --version ``` ### Schritt 4: Daemon in der kiosk-Sitzung starten ```bash runuser -u kiosk -- env XDG_RUNTIME_DIR=/run/user/1001 WAYLAND_DISPLAY=wayland-0 \ /usr/local/bin/wl-gammarelay-rs & ``` ### Schritt 5: Helligkeit live setzen (funktionierender Steuerbefehl, als root) ```bash busctl --machine=kiosk@.host --user \ set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.5 # weitere Werte: busctl --machine=kiosk@.host --user \ set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.3 # dunkler busctl --machine=kiosk@.host --user \ set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 1 # voll ``` > Hinweis: `busctl --user` allein scheitert als root, weil `XDG_RUNTIME_DIR` > fehlt. Deshalb `--machine=kiosk@.host` (greift auf den User-Bus von kiosk zu). **Stand jetzt: Dimmen funktioniert flackerfrei und live. ✅** --- ## HTTP-Schnittstelle (für externe Steuerung / Home Assistant) Skript `brightness-server.py` (reines Python, Standardbibliothek) – läuft in der kiosk-Sitzung und nimmt Web-Anfragen entgegen. [brightness-server.py](./brightness-server.py) ```bash install -m 755 brightness-server.py /opt/kiosk/brightness-server.py # Test (Daemon muss laufen): runuser -u kiosk -- env XDG_RUNTIME_DIR=/run/user/1001 \ python3 /opt/kiosk/brightness-server.py # von einem anderen Gerät testen (IP anpassen): curl "http://192.168.x.x:8080/set?b=0.3" curl "http://192.168.x.x:8080/set?b=1" curl "http://192.168.x.x:8080/get" ``` --- ## Autostart & Kiosk-Absicherung (dauerhaft, erledigt ✅) ### Daemon-Startskript mit Warte-Schleife `wl-gammarelay-rs` startet beim Booten sonst **zu früh** (bevor labwc den Wayland-Socket bereit hat) und beendet sich. Ein kleines Wrapper-Skript wartet auf den Socket und startet den Daemon erst dann. `/usr/local/bin/start-gammarelay.sh`: ```sh #!/bin/sh # wartet auf den Wayland-Socket und startet dann den Dimmer-Daemon for i in $(seq 1 30); do [ -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ] && break sleep 0.5 done exec /usr/local/bin/wl-gammarelay-rs ``` ```bash chmod 755 /usr/local/bin/start-gammarelay.sh chown kiosk:kiosk /usr/local/bin/start-gammarelay.sh ``` ### labwc-Autostart `/home/kiosk/.config/labwc/autostart`: ```sh /usr/local/bin/start-gammarelay.sh & python3 /opt/kiosk/brightness-server.py & /usr/local/bin/ha-kiosk.sh & wvkbd-mobintl --hidden -L 280 & waybar & ``` > In der Autostart-Datei läuft alles bereits als `kiosk` in der Sitzung – daher > KEIN `runuser`/`XDG_RUNTIME_DIR`/`WAYLAND_DISPLAY` nötig, und der Server kann > intern `busctl --user` ohne `--machine` verwenden. Das `&` ist Pflicht, sonst > blockiert labwc. ### Chromium-Neustart-Schleife (gegen Alt+F4 / Absturz) In `/usr/local/bin/ha-kiosk.sh` ist der Chromium-Aufruf in eine Schleife gewickelt: Schließt sich der Browser (Alt+F4, Crash), startet er nach 2 s neu. ```sh while true; do flatpak run io.github.ungoogled_software.ungoogled_chromium "${FLAGS[@]}" \ > /home/kiosk/kiosk.log 2>&1 echo "$(date '+%F %T') Chromium beendet (Exit $?), Neustart in 2s" >> /home/kiosk/kiosk.log sleep 2 done ``` > `ydotoold` bleibt VOR der Schleife (nur einmal starten). Alt+F4 wurde bewusst > NICHT in labwc deaktiviert – dient als Notausstieg fürs Warten. --- ## Noch offen (nächste Schritte) - [ ] Home Assistant: `rest_command` in `configuration.yaml` + Automationen - [ ] Optional: Zugriffsschutz (Token im Server aktivieren) --- ## Kurz-Spickzettel (das Wesentliche) | Zweck | Befehl | |---|---| | Daemon starten | `runuser -u kiosk -- env XDG_RUNTIME_DIR=/run/user/1001 WAYLAND_DISPLAY=wayland-0 /usr/local/bin/wl-gammarelay-rs &` | | Helligkeit setzen | `busctl --machine=kiosk@.host --user set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.5` | | Helligkeit abfragen | `busctl --machine=kiosk@.host --user get-property rs.wl-gammarelay / rs.wl.gammarelay Brightness` |