Blame
|
1 | # Bildschirm-Dimmung – Labor23-Terminal |
||||||
| 2 | ||||||||
| 3 | Dokumentation des Lösungswegs. |
|||||||
| 4 | ||||||||
| 5 | ## Ausgangslage |
|||||||
| 6 | ||||||||
| 7 | - Anzeige: greetd → labwc (Wayland) → Ungoogled-Chromium im Kiosk-Modus |
|||||||
| 8 | (User `kiosk`, UID 1001), zeigt eine Home-Assistant-Seite |
|||||||
| 9 | ||||||||
| 10 | --- |
|||||||
| 11 | ||||||||
| 12 | ## Diagnose – was NICHT funktioniert (und warum) |
|||||||
| 13 | ||||||||
| 14 | ### 1. Hardware-Backlight – kein Device vorhanden |
|||||||
| 15 | ```bash |
|||||||
| 16 | ls /sys/class/backlight/ # leer |
|||||||
| 17 | ``` |
|||||||
| 18 | ||||||||
| 19 | ### 2. DDC/CI – kein Monitor antwortet (bei internem LVDS nicht vorgesehen) |
|||||||
| 20 | ```bash |
|||||||
| 21 | sudo apt install ddcutil |
|||||||
| 22 | sudo modprobe i2c-dev |
|||||||
| 23 | sudo ddcutil detect # -> No displays found |
|||||||
| 24 | ddcutil environment # bestätigt: Konfiguration ok, trotzdem kein Display |
|||||||
| 25 | ``` |
|||||||
| 26 | ||||||||
| 27 | ### 3. Anschluss-Prüfung – Panel ist intern (LVDS) |
|||||||
| 28 | ```bash |
|||||||
| 29 | grep -r . /sys/class/drm/*/status 2>/dev/null # card0-LVDS-1: connected |
|||||||
| 30 | lsmod | grep -iE 'video|backlight' # 'video' geladen, kein backlight |
|||||||
| 31 | echo $XDG_SESSION_TYPE # leer (Befehl lief auf Konsole/SSH) |
|||||||
| 32 | ``` |
|||||||
| 33 | ||||||||
| 34 | ### 4. Kernel-Parameter erzwingen – brachte ebenfalls kein Backlight-Device |
|||||||
| 35 | Datei `/etc/default/grub`, Zeile `GRUB_CMDLINE_LINUX_DEFAULT` nacheinander mit |
|||||||
| 36 | `acpi_backlight=vendor`, `acpi_backlight=native`, `acpi_backlight=video` getestet: |
|||||||
| 37 | ```bash |
|||||||
| 38 | sudo cp /etc/default/grub /etc/default/grub.backup |
|||||||
| 39 | sudo nano /etc/default/grub |
|||||||
| 40 | sudo update-grub |
|||||||
| 41 | sudo reboot |
|||||||
| 42 | # nach jedem Reboot: |
|||||||
| 43 | ls /sys/class/backlight/ # blieb leer |
|||||||
| 44 | dmesg | grep -iE 'backlight|acpi_video' # keine Ausgabe |
|||||||
| 45 | ``` |
|||||||
| 46 | ||||||||
| 47 | ### 5. BIOS – keine Helligkeitsoption vorhanden |
|||||||
| 48 | Phoenix AwardBIOS V6.00PG bietet keinerlei Brightness-/Backlight-/LVDS-Einstellung. |
|||||||
| 49 | ||||||||
| 50 | **Fazit der Diagnose:** Die Hintergrundbeleuchtung dieses Panels lässt sich vom |
|||||||
| 51 | System aus nicht ansteuern (Hardware-/Firmware-Grenze). Lösung ist daher |
|||||||
| 52 | **Software-Dimmen** über das Wayland-Gamma-Protokoll (labwc/wlroots unterstützt |
|||||||
| 53 | `wlr-gamma-control-unstable-v1`). |
|||||||
| 54 | ||||||||
| 55 | --- |
|||||||
| 56 | ||||||||
| 57 | ## Lösung – Software-Dimmen über Wayland |
|||||||
| 58 | ||||||||
| 59 | ### Schritt 1: Sitzung identifizieren |
|||||||
| 60 | ```bash |
|||||||
| 61 | ps -eo user,pid,cmd | grep -iE 'labwc|chromium' | grep -v grep |
|||||||
| 62 | ls -la /run/user/ # kiosk = UID 1001 |
|||||||
| 63 | loginctl list-sessions |
|||||||
| 64 | ls -l /run/user/1001/wayland-* # -> wayland-0 |
|||||||
| 65 | ``` |
|||||||
| 66 | ||||||||
| 67 | ### Schritt 2: Funktionstest mit gammastep (setzt nur festen Wert) |
|||||||
| 68 | ```bash |
|||||||
| 69 | sudo apt install gammastep |
|||||||
| 70 | # Test direkt mit Sitzungs-Umgebung: |
|||||||
| 71 | XDG_RUNTIME_DIR=/run/user/1001 WAYLAND_DISPLAY=wayland-0 \ |
|||||||
| 72 | gammastep -m wayland -O 6500 -b 0.6 |
|||||||
| 73 | ``` |
|||||||
| 74 | Bestätigte: Dimmen funktioniert grundsätzlich. Für dynamische/externe Steuerung |
|||||||
| 75 | aber ungeeignet (kein Live-Ändern), daher wl-gammarelay-rs. |
|||||||
| 76 | ||||||||
| 77 | ### Schritt 3: wl-gammarelay-rs installieren |
|||||||
| 78 | (Vorkompilierte statische Binärdatei – kein Rust/Compiler auf dem Gerät nötig.) |
|||||||
| 79 | ||||||||
| 80 | ```bash |
|||||||
| 81 | install -m 755 wl-gammarelay-rs /usr/local/bin/wl-gammarelay-rs |
|||||||
| 82 | /usr/local/bin/wl-gammarelay-rs --version |
|||||||
| 83 | ``` |
|||||||
| 84 | ||||||||
| 85 | ### Schritt 4: Daemon in der kiosk-Sitzung starten |
|||||||
| 86 | ```bash |
|||||||
| 87 | runuser -u kiosk -- env XDG_RUNTIME_DIR=/run/user/1001 WAYLAND_DISPLAY=wayland-0 \ |
|||||||
| 88 | /usr/local/bin/wl-gammarelay-rs & |
|||||||
| 89 | ``` |
|||||||
| 90 | ||||||||
| 91 | ### Schritt 5: Helligkeit live setzen (funktionierender Steuerbefehl, als root) |
|||||||
| 92 | ```bash |
|||||||
| 93 | busctl --machine=kiosk@.host --user \ |
|||||||
| 94 | set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.5 |
|||||||
| 95 | # weitere Werte: |
|||||||
| 96 | busctl --machine=kiosk@.host --user \ |
|||||||
| 97 | set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.3 # dunkler |
|||||||
| 98 | busctl --machine=kiosk@.host --user \ |
|||||||
| 99 | set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 1 # voll |
|||||||
| 100 | ``` |
|||||||
| 101 | > Hinweis: `busctl --user` allein scheitert als root, weil `XDG_RUNTIME_DIR` |
|||||||
| 102 | > fehlt. Deshalb `--machine=kiosk@.host` (greift auf den User-Bus von kiosk zu). |
|||||||
| 103 | ||||||||
| 104 | **Stand jetzt: Dimmen funktioniert flackerfrei und live. ✅** |
|||||||
| 105 | ||||||||
| 106 | --- |
|||||||
| 107 | ||||||||
| 108 | ## HTTP-Schnittstelle (für externe Steuerung / Home Assistant) |
|||||||
| 109 | ||||||||
| 110 | Skript `brightness-server.py` (reines Python, Standardbibliothek) – läuft in der |
|||||||
| 111 | kiosk-Sitzung und nimmt Web-Anfragen entgegen. |
|||||||
| 112 | ||||||||
| 113 | ```bash |
|||||||
| 114 | install -m 755 brightness-server.py /opt/kiosk/brightness-server.py |
|||||||
| 115 | ||||||||
| 116 | # Test (Daemon muss laufen): |
|||||||
| 117 | runuser -u kiosk -- env XDG_RUNTIME_DIR=/run/user/1001 \ |
|||||||
| 118 | python3 /opt/kiosk/brightness-server.py |
|||||||
| 119 | ||||||||
| 120 | # von einem anderen Gerät testen (IP anpassen): |
|||||||
| 121 | curl "http://192.168.x.x:8080/set?b=0.3" |
|||||||
| 122 | curl "http://192.168.x.x:8080/set?b=1" |
|||||||
| 123 | curl "http://192.168.x.x:8080/get" |
|||||||
| 124 | ``` |
|||||||
| 125 | ||||||||
| 126 | --- |
|||||||
| 127 | ||||||||
| 128 | ## Noch offen (nächste Schritte) |
|||||||
| 129 | ||||||||
| 130 | - [ ] wl-gammarelay-rs **und** brightness-server.py dauerhaft per labwc-Autostart |
|||||||
| 131 | starten: `/home/kiosk/.config/labwc/autostart` |
|||||||
| 132 | - [ ] Home Assistant: `rest_command` in `configuration.yaml` + Automationen |
|||||||
| 133 | - [ ] Optional: Zugriffsschutz (Token im Server aktivieren) |
|||||||
| 134 | ||||||||
| 135 | --- |
|||||||
| 136 | ||||||||
| 137 | ## Kurz-Spickzettel (das Wesentliche) |
|||||||
| 138 | ||||||||
| 139 | | Zweck | Befehl | |
|||||||
| 140 | |---|---| |
|||||||
| 141 | | Daemon starten | `runuser -u kiosk -- env XDG_RUNTIME_DIR=/run/user/1001 WAYLAND_DISPLAY=wayland-0 /usr/local/bin/wl-gammarelay-rs &` | |
|||||||
| 142 | | Helligkeit setzen | `busctl --machine=kiosk@.host --user set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.5` | |
|||||||
| 143 | | Helligkeit abfragen | `busctl --machine=kiosk@.host --user get-property rs.wl-gammarelay / rs.wl.gammarelay Brightness` | |
|||||||