Blame
|
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. |
|||||||