Commit a17e00

2026-06-05 23:49:09 Labor: create
/dev/null .. labor23/01_infrastruktur/hardware-inventar/geräteliste/labor23-terminal/grundstruktur.md
@@ 0,0 1,316 @@
+ # Grundstruktur
+
+ # Home-Assistant-Kiosk auf Debian 13 (Trixie)
+
+ Einrichtungs-Dokumentation – vom blanken Minimal-Debian bis zum aktuellen Stand.
+
+ ## Überblick
+
+ **Ziel:** Ein schwacher Rechner zeigt dauerhaft das Home-Assistant-Dashboard auf einem Touch-Panel an.
+
+ **Boot-Kette:** `systemd → greetd (Autologin) → labwc (Wayland-Compositor) → ungoogled-chromium (Flatpak) → HA-Dashboard`
+
+ **Touch-Hardware:** eGalax / D-WAV Titan6001 (USB-ID `0eef:0001`)
+
+ **Hinweise zur Nutzung dieser Anleitung:**
+ - Alle Befehle werden **als root** ausgeführt (auf dem System ist `sudo` nicht zwingend nötig).
+ - Die HA-Adresse ist hier `http:///`.
+ - Die Touch-Kalibrierungswerte (`0eef:0001`, Bereichsgrenzen) stammen von genau dieser Hardware. Bei anderem Panel neu ermitteln (siehe Abschnitt „Diagnose").
+ - **Wichtig:** Die Kiosk-Sitzung startet nur bei einem **echten Reboot**, nicht bei `systemctl restart greetd` (das landet im Greeter/Konsole).
+
+ ---
+
+ ## 1. APT-Quellen prüfen
+ ```
+ apt-get update
+ apt-get full-upgrade -y
+ ```
+
+ ---
+
+ ## 2. Grundpakete
+
+ ```bash
+ apt install -y sudo labwc greetd
+ ```
+
+ (`labwc` ist der Compositor, `greetd` der Login-/Autologin-Daemon.)
+
+ ---
+
+ ## 3. Browser: ungoogled-chromium via Flatpak
+
+ 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.
+
+ ```bash
+ apt install -y flatpak dbus-user-session xdg-desktop-portal xdg-desktop-portal-wlr
+ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
+ flatpak install -y flathub io.github.ungoogled_software.ungoogled_chromium
+ flatpak override io.github.ungoogled_software.ungoogled_chromium --filesystem=home:ro
+ ```
+
+ ---
+
+ ## 4. Kiosk-Benutzer anlegen
+
+ Der Browser läuft nicht als root. Der User wird per Autologin gestartet (kein Passwort nötig).
+
+ ```bash
+ useradd -m -s /bin/bash kiosk
+ usermod -aG video,render,input kiosk
+ ```
+
+ ---
+
+ ## 5. Mauszeiger-Werkzeug (ydotool)
+
+ 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.
+
+
+ ```bash
+ apt install -y ydotool
+ echo uinput > /etc/modules-load.d/uinput.conf
+ echo 'KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"' > /etc/udev/rules.d/99-uinput.rules
+ udevadm control --reload
+ udevadm trigger
+ modprobe uinput
+ ```
+
+ ---
+
+ ## 6. Touchscreen – Klassifizierung
+
+ Der eGalax meldet fälschlich Stylus/Tablet- und Maus-Eigenschaften. Diese Regel zwingt das System, ihn als reinen Touchscreen zu behandeln.
+
+ ```bash
+ cat > /etc/udev/rules.d/99-egalax-touchscreen.rules <<'EOF'
+ 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"
+ EOF
+ ```
+
+ ---
+
+ ## 7. Touchscreen – Kalibrierung
+
+ ### 7a. Orientierung (Links/Rechts war gespiegelt)
+
+ libinput-Kalibrierungsmatrix per udev. Der Wert `-1 0 1 0 1 0` spiegelt die X-Achse (Links/Rechts).
+
+ ```bash
+ cat > /etc/udev/rules.d/99-egalax-calibration.rules <<'EOF'
+ SUBSYSTEM=="input", ATTRS{idVendor}=="0eef", ATTRS{idProduct}=="0001", ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 1 0"
+ EOF
+ ```
+
+ Mögliche Matrix-Werte je nach Panel-Montage:
+
+ | Korrektur | Matrix |
+ |---|---|
+ | Normal (keine) | `1 0 0 0 1 0` |
+ | Links/Rechts spiegeln | `-1 0 1 0 1 0` |
+ | Oben/Unten spiegeln | `1 0 0 0 -1 1` |
+ | 180° drehen | `-1 0 1 0 -1 1` |
+
+ ### 7b. Wertebereich (Ränder waren nicht erreichbar)
+
+ 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.**
+
+ ```bash
+ cat > /etc/udev/hwdb.d/61-egalax-calibration.hwdb <<'EOF'
+ evdev:input:b0003v0EEFp0001*
+ EVDEV_ABS_00=361:3763
+ EVDEV_ABS_01=608:3456
+ EOF
+ systemd-hwdb update
+ udevadm trigger
+ ```
+
+ (`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`.)
+
+ ---
+
+ ## 8. Bildschirmtastatur (wvkbd) + Umschalt-Button (waybar)
+
+ `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.
+
+ ```bash
+ apt install -y wvkbd waybar
+ ```
+
+ Umschalt-Skript (SIGRTMIN schaltet wvkbd um):
+
+ ```bash
+ cat > /usr/local/bin/toggle-kbd.sh <<'EOF'
+ #!/bin/sh
+ pkill --signal SIGRTMIN wvkbd-mobintl
+ EOF
+ chmod +x /usr/local/bin/toggle-kbd.sh
+ ```
+
+ waybar als kleiner, schwebender Button unten rechts:
+
+ ```bash
+ mkdir -p /home/kiosk/.config/waybar
+
+ cat > /home/kiosk/.config/waybar/config.jsonc <<'EOF'
+ {
+ "layer": "top",
+ "position": "bottom",
+ "height": 44,
+ "exclusive": false,
+ "modules-right": ["custom/kbd"],
+ "custom/kbd": {
+ "format": "⌨",
+ "tooltip": false,
+ "on-click": "/usr/local/bin/toggle-kbd.sh"
+ }
+ }
+ EOF
+
+ cat > /home/kiosk/.config/waybar/style.css <<'EOF'
+ * { font-size: 22px; border: none; }
+ window#waybar { background: transparent; }
+ #custom-kbd {
+ background: rgba(3,169,244,0.9); color: #fff;
+ padding: 2px 20px; margin: 8px; border-radius: 12px;
+ }
+ EOF
+ ```
+
+ > **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.
+
+ ---
+
+ ## 9. Start-Skript
+
+ ```bash
+ cat > /usr/local/bin/ha-kiosk.sh <<'EOF'
+ #!/bin/sh
+ # ydotool-Dienst starten und Cursor in die Ecke parken
+ export YDOTOOL_SOCKET="$XDG_RUNTIME_DIR/.ydotool_socket"
+ ydotoold --socket-path="$YDOTOOL_SOCKET" --socket-own="$(id -u):$(id -g)" &
+ sleep 2
+ ydotool mousemove -- -10000 -10000
+
+ exec flatpak run io.github.ungoogled_software.ungoogled_chromium \
+ --ozone-platform=wayland \
+ --start-maximized \
+ --no-first-run --no-default-browser-check \
+ --disable-infobars --disable-session-crashed-bubble \
+ --app="http://192.168.1.226:8123/"
+ EOF
+ chmod +x /usr/local/bin/ha-kiosk.sh
+ ```
+
+ Syntax-Check (sollte „Syntax OK" ausgeben):
+
+ ```bash
+ sh -n /usr/local/bin/ha-kiosk.sh && echo "Syntax OK"
+ ```
+
+ ---
+
+ ## 10. labwc-Autostart
+
+ labwc startet beim Sitzungsstart das Kiosk-Skript, die (versteckte) Tastatur und waybar.
+
+ ```bash
+ mkdir -p /home/kiosk/.config/labwc
+
+ cat > /home/kiosk/.config/labwc/autostart <<'EOF'
+ /usr/local/bin/ha-kiosk.sh &
+ wvkbd-mobintl --hidden -L 280 &
+ waybar &
+ EOF
+ ```
+
+ Besitzrechte für alle als root angelegten Konfig-Dateien korrigieren:
+
+ ```bash
+ chown -R kiosk:kiosk /home/kiosk
+ ```
+
+ ---
+
+ ## 11. greetd – Autologin
+
+ ```bash
+ cat > /etc/greetd/config.toml <<'EOF'
+ [terminal]
+ vt = 7
+
+ [default_session]
+ command = "/usr/sbin/agreety --cmd /bin/bash"
+ user = "_greetd"
+
+ [initial_session]
+ command = "labwc"
+ user = "kiosk"
+ EOF
+ ```
+
+ **Erklärung der Blöcke:**
+ - `[initial_session]` = Autologin, läuft **genau einmal beim Booten** ohne Passwort → startet labwc als `kiosk`.
+ - `[default_session]` = Greeter (Fallback), erscheint nur, wenn die Kiosk-Sitzung beendet wird.
+
+ (Pfad von `agreety` ggf. prüfen: `ls -l /usr/sbin/agreety /usr/bin/agreety`)
+
+ ---
+
+ ## 12. Aktivieren und neu starten
+
+ ```bash
+ systemctl enable greetd
+ reboot
+ ```
+
+ 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.
+
+ ---
+
+ ## Diagnose – wie die Werte ermittelt wurden
+
+ Touch-Controller und USB-ID finden:
+
+ ```bash
+ apt install -y usbutils libinput-tools evtest
+ lsusb
+ libinput list-devices
+ ```
+
+ Roh-Koordinaten / Achsen-Bereich messen (für die Kalibrierung in Abschnitt 7):
+
+ ```bash
+ evtest /dev/input/event2
+ ```
+
+ 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.
+
+ Kontrollieren, ob die hwdb-Korrektur aktiv ist:
+
+ ```bash
+ udevadm info /dev/input/event2 | grep EVDEV_ABS
+ ```
+
+ ---
+
+ ## Wartung (alles über SSH)
+
+ | Aufgabe | Befehl |
+ |---|---|
+ | Logs der Sitzung ansehen | `journalctl -u greetd -b` |
+ | Kiosk-Logs (Browser) | `cat /home/kiosk/kiosk.log` |
+ | HA-URL ändern | `/usr/local/bin/ha-kiosk.sh` editieren, dann `reboot` |
+ | Kiosk wirklich neu starten | `reboot` (nicht `systemctl restart greetd`!) |
+
+ ---
+
+ ## Bekannte Einschränkungen
+
+ - **Auto-Start der Tastatur bei Textfeld-Fokus:** Mit Chromium auf Wayland nicht zuverlässig möglich – daher der manuelle Umschalt-Button unten rechts.
+
+ ---
+
+ ## Automatischer Neustart bei Absturz (Empfehlung, noch nicht umgesetzt)
+
+ `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.
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9