Commit 68ae00
2026-06-06 15:26:22 Carsten: new| /dev/null .. labor23/01_infrastruktur/terminal/bildschirm-dimmung.md | |
| @@ 0,0 1,143 @@ | |
| + | # 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.) |
| + | |
| + | ```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. |
| + | |
| + | ```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" |
| + | ``` |
| + | |
| + | --- |
| + | |
| + | ## Noch offen (nächste Schritte) |
| + | |
| + | - [ ] wl-gammarelay-rs **und** brightness-server.py dauerhaft per labwc-Autostart |
| + | starten: `/home/kiosk/.config/labwc/autostart` |
| + | - [ ] 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` | |