Blame

1ab972 Carsten 2026-06-06 15:25:00
new
1
# HA-Kiosk-Einrichtung – Labor23-Terminal
2
3
Home-Assistant-Kiosk auf Debian 13 (Trixie) – vom blanken Minimal-Debian bis zum aktuellen Stand.
4
5
## Überblick
6
7
**Ziel:** Ein schwacher Rechner zeigt dauerhaft das Home-Assistant-Dashboard auf einem Touch-Panel an.
8
9
**Boot-Kette:** `systemd → greetd (Autologin) → labwc (Wayland-Compositor) → ungoogled-chromium (Flatpak) → home-assistant-boot.html → HA-Dashboard`
10
11
**Touch-Hardware:** eGalax / D-WAV Titan6001 (USB-ID `0eef:0001`)
12
13
**Hinweise zur Nutzung dieser Anleitung:**
14
- Alle Befehle werden **als root** ausgeführt (auf dem System ist `sudo` nicht zwingend nötig).
15
- Die Touch-Kalibrierungswerte (`0eef:0001`, Bereichsgrenzen) stammen von genau dieser Hardware. Bei anderem Panel neu ermitteln (siehe Abschnitt „Diagnose").
16
- **Wichtig:** Die Kiosk-Sitzung startet nur bei einem **echten Reboot**, nicht bei `systemctl restart greetd` (das landet im Greeter/Konsole).
17
18
---
19
20
## 1. APT-Quellen prüfen
21
22
```bash
23
apt-get update
24
apt-get full-upgrade -y
25
```
26
27
---
28
29
## 2. Grundpakete
30
31
```bash
32
apt install -y sudo labwc greetd
33
```
34
35
(`labwc` ist der Compositor, `greetd` der Login-/Autologin-Daemon.)
36
37
---
38
39
## 3. Browser: ungoogled-chromium via Flatpak
40
41
ungoogled-chromium ist nicht in den Debian-Repos, und das OBS-apt-Repo baut nur gegen Sid (scheitert auf Trixie an `libre2-9`). Sauberer Weg ist Flathub. `dbus-user-session` und die Portale verhindern, dass der Flatpak-Browser in der Kiosk-Sitzung sofort wieder verschwindet.
42
43
```bash
44
apt install -y flatpak dbus-user-session xdg-desktop-portal xdg-desktop-portal-wlr
45
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
46
flatpak install -y flathub io.github.ungoogled_software.ungoogled_chromium
47
flatpak override io.github.ungoogled_software.ungoogled_chromium --filesystem=home:ro
48
```
49
50
---
51
52
## 4. Kiosk-Benutzer anlegen
53
54
Der Browser läuft nicht als root. Der User wird per Autologin gestartet (kein Passwort nötig).
55
56
```bash
57
useradd -m -s /bin/bash kiosk
58
usermod -aG video,render,input kiosk
59
```
60
61
---
62
63
## 5. Mauszeiger-Werkzeug (ydotool)
64
65
Der Cursor wird beim Start kurz angezeigt und verschwindet, sobald das Panel per Touch bedient wird. `ydotool` (Kernel-Ebene, uinput) parkt ihn beim Start zusätzlich in der Ecke.
66
67
```bash
68
apt install -y ydotool
69
echo uinput > /etc/modules-load.d/uinput.conf
70
echo 'KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"' > /etc/udev/rules.d/99-uinput.rules
71
udevadm control --reload
72
udevadm trigger
73
modprobe uinput
74
```
75
76
---
77
78
## 6. Touchscreen – Klassifizierung
79
80
Der eGalax meldet fälschlich Stylus/Tablet- und Maus-Eigenschaften. Diese Regel zwingt das System, ihn als reinen Touchscreen zu behandeln.
81
82
```bash
83
cat > /etc/udev/rules.d/99-egalax-touchscreen.rules <<'EOF'
84
SUBSYSTEM=="input", ATTRS{idVendor}=="0eef", ATTRS{idProduct}=="0001", ENV{ID_INPUT_TABLET}="", ENV{ID_INPUT_TABLET_PAD}="", ENV{ID_INPUT_MOUSE}="", ENV{ID_INPUT_POINTINGSTICK}="", ENV{ID_INPUT_TOUCHSCREEN}="1"
85
EOF
86
```
87
88
---
89
90
## 7. Touchscreen – Kalibrierung
91
92
### 7a. Orientierung (Links/Rechts war gespiegelt)
93
94
libinput-Kalibrierungsmatrix per udev. Der Wert `-1 0 1 0 1 0` spiegelt die X-Achse (Links/Rechts).
95
96
```bash
97
cat > /etc/udev/rules.d/99-egalax-calibration.rules <<'EOF'
98
SUBSYSTEM=="input", ATTRS{idVendor}=="0eef", ATTRS{idProduct}=="0001", ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 1 0"
99
EOF
100
```
101
102
Mögliche Matrix-Werte je nach Panel-Montage:
103
104
| Korrektur | Matrix |
105
|---|---|
106
| Normal (keine) | `1 0 0 0 1 0` |
107
| Links/Rechts spiegeln | `-1 0 1 0 1 0` |
108
| Oben/Unten spiegeln | `1 0 0 0 -1 1` |
109
| 180° drehen | `-1 0 1 0 -1 1` |
110
111
### 7b. Wertebereich (Ränder waren nicht erreichbar)
112
113
Der Controller meldet einen größeren Bereich, als physisch erreichbar ist. Per hwdb bekommt der Kernel die echten Grenzen. **Einrückung der `EVDEV_ABS`-Zeilen mit genau einem Leerzeichen ist Pflicht.**
114
115
```bash
116
cat > /etc/udev/hwdb.d/61-egalax-calibration.hwdb <<'EOF'
117
evdev:input:b0003v0EEFp0001*
118
EVDEV_ABS_00=361:3763
119
EVDEV_ABS_01=608:3456
120
EOF
121
systemd-hwdb update
122
udevadm trigger
123
```
124
125
(`EVDEV_ABS_00` = X-Achse, `01` = Y-Achse, Format `min:max`. Werte aus der evtest-Messung – siehe „Diagnose". Erreichst du die Ränder noch nicht ganz, den Bereich enger ziehen, z. B. `400:3720`.)
126
127
---
128
129
## 8. Bildschirmtastatur (wvkbd) + Umschalt-Button (waybar)
130
131
`wvkbd` legt sich über das Layer-Shell-Protokoll als Tastatur über den Bildschirm (das kann labwc, Cage konnte es nicht). Sie startet versteckt und wird per Button umgeschaltet.
132
133
```bash
134
apt install -y wvkbd waybar
135
```
136
137
Umschalt-Skript (SIGRTMIN schaltet wvkbd um):
138
139
```bash
140
cat > /usr/local/bin/toggle-kbd.sh <<'EOF'
141
#!/bin/sh
142
pkill --signal SIGRTMIN wvkbd-mobintl
143
EOF
144
chmod +x /usr/local/bin/toggle-kbd.sh
145
```
146
147
waybar als kleiner, schwebender Button unten rechts:
148
149
```bash
150
mkdir -p /home/kiosk/.config/waybar
151
152
cat > /home/kiosk/.config/waybar/config.jsonc <<'EOF'
153
{
154
"layer": "top",
155
"position": "bottom",
156
"height": 44,
157
"exclusive": false,
158
"modules-right": ["custom/kbd"],
159
"custom/kbd": {
160
"format": "⌨",
161
"tooltip": false,
162
"on-click": "/usr/local/bin/toggle-kbd.sh"
163
}
164
}
165
EOF
166
167
cat > /home/kiosk/.config/waybar/style.css <<'EOF'
168
* { font-size: 22px; border: none; }
169
window#waybar { background: transparent; }
170
#custom-kbd {
171
background: rgba(3,169,244,0.9); color: #fff;
172
padding: 2px 20px; margin: 8px; border-radius: 12px;
173
}
174
EOF
175
```
176
177
> **Wichtig:** Damit Tastatur und Button nicht hinter dem Browser verschwinden, läuft der Browser als **maximiertes Fenster** (`--start-maximized`) statt im echten Vollbild (`--kiosk`). Mit dieser Einstellung erscheinen Button und Tastatur korrekt über dem Dashboard.
178
179
---
180
181
## 9. Start-Skript `/usr/local/bin/ha-kiosk.sh`
182
183
```bash
184
cat > /usr/local/bin/ha-kiosk.sh <<'EOF'
185
#!/bin/bash
186
export YDOTOOL_SOCKET="$XDG_RUNTIME_DIR/.ydotool_socket"
187
ydotoold --socket-path="$YDOTOOL_SOCKET" --socket-own="$(id -u):$(id -g)" &
188
sleep 2
189
190
#BOOT="file:///home/kiosk/.var/app/io.github.ungoogled_software.ungoogled_chromium/data/boot.html"
191
BOOT="file:///opt/kiosk/home-assistant-boot.html"
192
193
FLAGS=(
194
--ozone-platform=wayland
195
# --kiosk
196
--start-maximized
197
--disable-gpu
198
--disable-gpu-compositing
199
--disable-features=VaapiVideoDecoder,VaapiVideoEncoder,UseChromeOSDirectVideoDecoder,InfiniteSessionRestore
200
--no-first-run
201
--no-default-browser-check
202
--disable-infobars
203
--disable-session-crashed-bubble
204
--hide-crash-restore-bubble
205
--app="$BOOT"
206
)
207
208
flatpak run io.github.ungoogled_software.ungoogled_chromium "${FLAGS[@]}" \
209
> /home/kiosk/kiosk.log 2>&1
210
EOF
211
chmod +x /usr/local/bin/ha-kiosk.sh
212
```
213
214
Boot-HTML nach `/opt/kiosk/` kopieren (Datei liegt im Wiki):
215
216
```bash
217
mkdir -p /opt/kiosk
218
cp home-assistant-boot.html /opt/kiosk/home-assistant-boot.html
219
```
220
221
**Änderungen gegenüber der ersten Version:**
222
- `#!/bin/bash` statt `#!/bin/sh` (Bash-Array `FLAGS` benötigt Bash)
223
- HA-URL nicht mehr direkt eingebettet – stattdessen lokale Boot-HTML als Startseite; diese leitet zu HA weiter (→ [[01_infrastruktur/terminal/home-assistant-boot|home-assistant-boot.html]])
224
- `--disable-gpu` / `--disable-gpu-compositing` stabilisieren Chromium auf der schwachen Intel-945-Grafik
225
- `--disable-features=VaapiVideoDecoder,...` deaktiviert VA-API-Pfade, die auf GMA 950 nicht funktionieren
226
- `--hide-crash-restore-bubble` unterdrückt den Wiederherstellungs-Dialog nach unsauberem Herunterfahren
227
- stdout + stderr landen gemeinsam in `/home/kiosk/kiosk.log`
228
229
Syntax-Check:
230
231
```bash
232
bash -n /usr/local/bin/ha-kiosk.sh && echo "Syntax OK"
233
```
234
235
---
236
237
## 10. labwc-Autostart `/home/kiosk/.config/labwc/autostart`
238
239
```bash
240
mkdir -p /home/kiosk/.config/labwc
241
242
cat > /home/kiosk/.config/labwc/autostart <<'EOF'
243
/usr/local/bin/ha-kiosk.sh &
244
wvkbd-mobintl --hidden -L 280 &
245
waybar &
246
EOF
247
```
248
249
Besitzrechte für alle als root angelegten Konfig-Dateien korrigieren:
250
251
```bash
252
chown -R kiosk:kiosk /home/kiosk
253
```
254
255
---
256
257
## 11. greetd – Autologin `/etc/greetd/config.toml`
258
259
```bash
260
cat > /etc/greetd/config.toml <<'EOF'
261
[terminal]
262
vt = 7
263
264
[default_session]
265
command = "/usr/sbin/agreety --cmd /bin/bash"
266
user = "_greetd"
267
268
[initial_session]
269
command = "labwc"
270
user = "kiosk"
271
EOF
272
```
273
274
**Erklärung der Blöcke:**
275
- `[initial_session]` = Autologin, läuft **genau einmal beim Booten** ohne Passwort → startet labwc als `kiosk`.
276
- `[default_session]` = Greeter (Fallback), erscheint nur, wenn die Kiosk-Sitzung beendet wird.
277
278
(Pfad von `agreety` ggf. prüfen: `ls -l /usr/sbin/agreety /usr/bin/agreety`)
279
280
---
281
282
## 12. Aktivieren und neu starten
283
284
```bash
285
systemctl enable greetd
286
reboot
287
```
288
289
Nach dem Reboot startet das Panel direkt ins HA-Dashboard. Einmalig in HA anmelden (physische Tastatur reicht), „Angemeldet bleiben" anhaken – das Flatpak-Profil bleibt erhalten.
290
291
---
292
293
## Diagnose – wie die Werte ermittelt wurden
294
295
Touch-Controller und USB-ID finden:
296
297
```bash
298
apt install -y usbutils libinput-tools evtest
299
lsusb
300
libinput list-devices
301
```
302
303
Roh-Koordinaten / Achsen-Bereich messen (für die Kalibrierung in Abschnitt 7):
304
305
```bash
306
evtest /dev/input/event2
307
```
308
309
In jede Ecke tippen, dann `ABS_X`/`ABS_Y` ablesen. Bei uns ergab das: erreichbar X `361–3763`, Y `608–3456` (gemeldet war X `30–4040`, Y `60–4035`) – daher die hwdb-Korrektur.
310
311
Kontrollieren, ob die hwdb-Korrektur aktiv ist:
312
313
```bash
314
udevadm info /dev/input/event2 | grep EVDEV_ABS
315
```
316
317
---
318
319
## Wartung (alles über SSH)
320
321
| Aufgabe | Befehl |
322
|---|---|
323
| Logs der Sitzung ansehen | `journalctl -u greetd -b` |
324
| Kiosk-Logs (Browser + Fehler) | `cat /home/kiosk/kiosk.log` |
325
| HA-URL ändern | `/opt/kiosk/home-assistant-boot.html` editieren, dann `reboot` |
326
| Kiosk wirklich neu starten | `reboot` (nicht `systemctl restart greetd`!) |
327
328
---
329
330
## Bekannte Einschränkungen
331
332
- **Auto-Start der Tastatur bei Textfeld-Fokus:** Mit Chromium auf Wayland nicht zuverlässig möglich – daher der manuelle Umschalt-Button unten rechts.
333
334
---
335
336
## Automatischer Neustart bei Absturz (Empfehlung, noch nicht umgesetzt)
337
338
`initial_session` startet nur einmal beim Boot. Stürzt der Kiosk ab, landet das Gerät im Greeter statt zurück im Dashboard. Robuster wäre, den Kiosk als eigenen systemd-Dienst mit `Restart=always` zu betreiben statt über greetds Einmal-Autologin.