Blame

68ae00 Carsten 2026-06-06 15:26:22
new
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.)
1f7cfe Carsten 2026-06-06 17:36:12
"Dienste" hinzugefügt
79
[wl-gammarelay-rs](./wl-gammarelay-rs)
68ae00 Carsten 2026-06-06 15:26:22
new
80
81
```bash
82
install -m 755 wl-gammarelay-rs /usr/local/bin/wl-gammarelay-rs
83
/usr/local/bin/wl-gammarelay-rs --version
84
```
85
86
### Schritt 4: Daemon in der kiosk-Sitzung starten
87
```bash
88
runuser -u kiosk -- env XDG_RUNTIME_DIR=/run/user/1001 WAYLAND_DISPLAY=wayland-0 \
89
/usr/local/bin/wl-gammarelay-rs &
90
```
91
92
### Schritt 5: Helligkeit live setzen (funktionierender Steuerbefehl, als root)
93
```bash
94
busctl --machine=kiosk@.host --user \
95
set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.5
96
# weitere Werte:
97
busctl --machine=kiosk@.host --user \
98
set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.3 # dunkler
99
busctl --machine=kiosk@.host --user \
100
set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 1 # voll
101
```
102
> Hinweis: `busctl --user` allein scheitert als root, weil `XDG_RUNTIME_DIR`
103
> fehlt. Deshalb `--machine=kiosk@.host` (greift auf den User-Bus von kiosk zu).
104
105
**Stand jetzt: Dimmen funktioniert flackerfrei und live. ✅**
106
107
---
108
109
## HTTP-Schnittstelle (für externe Steuerung / Home Assistant)
110
111
Skript `brightness-server.py` (reines Python, Standardbibliothek) – läuft in der
112
kiosk-Sitzung und nimmt Web-Anfragen entgegen.
1f7cfe Carsten 2026-06-06 17:36:12
"Dienste" hinzugefügt
113
[brightness-server.py](./brightness-server.py)
68ae00 Carsten 2026-06-06 15:26:22
new
114
115
```bash
116
install -m 755 brightness-server.py /opt/kiosk/brightness-server.py
117
118
# Test (Daemon muss laufen):
119
runuser -u kiosk -- env XDG_RUNTIME_DIR=/run/user/1001 \
120
python3 /opt/kiosk/brightness-server.py
121
122
# von einem anderen Gerät testen (IP anpassen):
123
curl "http://192.168.x.x:8080/set?b=0.3"
124
curl "http://192.168.x.x:8080/set?b=1"
125
curl "http://192.168.x.x:8080/get"
126
```
127
1f7cfe Carsten 2026-06-06 17:36:12
"Dienste" hinzugefügt
128
---
129
## Autostart & Kiosk-Absicherung (dauerhaft, erledigt ✅)
130
131
### Daemon-Startskript mit Warte-Schleife
132
`wl-gammarelay-rs` startet beim Booten sonst **zu früh** (bevor labwc den
133
Wayland-Socket bereit hat) und beendet sich. Ein kleines Wrapper-Skript wartet
134
auf den Socket und startet den Daemon erst dann.
135
136
`/usr/local/bin/start-gammarelay.sh`:
137
```sh
138
#!/bin/sh
139
# wartet auf den Wayland-Socket und startet dann den Dimmer-Daemon
140
for i in $(seq 1 30); do
141
[ -S "$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" ] && break
142
sleep 0.5
143
done
144
exec /usr/local/bin/wl-gammarelay-rs
145
```
146
```bash
147
chmod 755 /usr/local/bin/start-gammarelay.sh
148
chown kiosk:kiosk /usr/local/bin/start-gammarelay.sh
149
```
150
151
### labwc-Autostart
152
`/home/kiosk/.config/labwc/autostart`:
153
```sh
154
/usr/local/bin/start-gammarelay.sh &
155
python3 /opt/kiosk/brightness-server.py &
156
/usr/local/bin/ha-kiosk.sh &
157
wvkbd-mobintl --hidden -L 280 &
158
waybar &
159
```
160
> In der Autostart-Datei läuft alles bereits als `kiosk` in der Sitzung – daher
161
> KEIN `runuser`/`XDG_RUNTIME_DIR`/`WAYLAND_DISPLAY` nötig, und der Server kann
162
> intern `busctl --user` ohne `--machine` verwenden. Das `&` ist Pflicht, sonst
163
> blockiert labwc.
164
165
### Chromium-Neustart-Schleife (gegen Alt+F4 / Absturz)
166
In `/usr/local/bin/ha-kiosk.sh` ist der Chromium-Aufruf in eine Schleife
167
gewickelt: Schließt sich der Browser (Alt+F4, Crash), startet er nach 2 s neu.
168
```sh
169
while true; do
170
flatpak run io.github.ungoogled_software.ungoogled_chromium "${FLAGS[@]}" \
171
> /home/kiosk/kiosk.log 2>&1
172
echo "$(date '+%F %T') Chromium beendet (Exit $?), Neustart in 2s" >> /home/kiosk/kiosk.log
173
sleep 2
174
done
175
```
176
> `ydotoold` bleibt VOR der Schleife (nur einmal starten). Alt+F4 wurde bewusst
177
> NICHT in labwc deaktiviert – dient als Notausstieg fürs Warten.
178
68ae00 Carsten 2026-06-06 15:26:22
new
179
---
180
181
## Noch offen (nächste Schritte)
182
183
- [ ] Home Assistant: `rest_command` in `configuration.yaml` + Automationen
184
- [ ] Optional: Zugriffsschutz (Token im Server aktivieren)
185
186
---
187
188
## Kurz-Spickzettel (das Wesentliche)
189
190
| Zweck | Befehl |
191
|---|---|
192
| Daemon starten | `runuser -u kiosk -- env XDG_RUNTIME_DIR=/run/user/1001 WAYLAND_DISPLAY=wayland-0 /usr/local/bin/wl-gammarelay-rs &` |
193
| Helligkeit setzen | `busctl --machine=kiosk@.host --user set-property rs.wl-gammarelay / rs.wl.gammarelay Brightness d 0.5` |
194
| Helligkeit abfragen | `busctl --machine=kiosk@.host --user get-property rs.wl-gammarelay / rs.wl.gammarelay Brightness` |