Wayland + Cage + Squeekboard ist für genau deinen Use-Case (Touch, Kiosk, Hochkant, OSK nur bei Bedarf) die sauberste und stabilste Lösung auf dem Raspberry Pi 5. Ich gebe dir jetzt eine komplett frische, lineare Anleitung → danach bootet der Pi direkt ins Home-Assistant-Dashboard, inkl. automatischer On-Screen-Tastatur, WLAN und Portrait-Modus. 🎯 Zielsetup (Wayland-Kiosk) ✔ Raspberry Pi 5 ✔ Raspberry Pi OS Lite 64-bit ✔ Wayland (kein X11) ✔ Cage (Kiosk-Compositor) ✔ Chromium im Kiosk ✔ Squeekboard (On-Screen-Tastatur, automatisch) ✔ Display hochkant ✔ Touch & WLAN 1️⃣ Raspberry Pi OS Lite installieren Mit Raspberry Pi Imager: OS: Raspberry Pi OS Lite (64-bit) ⚙️ Erweiterte Optionen: ✅ WLAN konfigurieren ✅ SSH aktivieren ✅ Locale + Tastatur DE Hostname z. B. ha-kiosk Booten & per SSH einloggen. 2️⃣ System vorbereiten sudo apt update && sudo apt upgrade -y Wayland-Pakete installieren: sudo apt install -y \ cage \ chromium-browser \ squeekboard \ network-manager \ seatd \ unclutter 3️⃣ Seat-Zugriff erlauben (wichtig!) sudo usermod -aG video,input,render,seat $USER sudo systemctl enable seatd sudo reboot 4️⃣ Bildschirm hochkant drehen (Pi 5 korrekt) sudo nano /boot/firmware/config.txt Am Ende einfügen: display_rotate=1 💡 Falls falsch herum → 3 statt 1. Reboot: sudo reboot 5️⃣ Squeekboard konfigurieren (deutsche Tastatur) mkdir -p ~/.config/squeekboard nano ~/.config/squeekboard/squeekboard.conf Inhalt: [default] layout=de 👉 Wichtig: Squeekboard erscheint automatisch, sobald ein Eingabefeld Fokus bekommt – und verschwindet wieder. Kein Script. Kein Hack. ❤️ 6️⃣ Cage-Kiosk starten Autostart beim Login nano ~/.bash_profile Inhalt: if [ -z "$WAYLAND_DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then exec cage -- \ chromium-browser \ --kiosk \ --noerrdialogs \ --disable-infobars \ --disable-session-crashed-bubble \ --disable-translate \ --disable-features=TranslateUI \ --overscroll-history-navigation=0 \ https://homeassistant.m4me.de/dashboard-screenmirror fi 7️⃣ Automatischer Login (kein User-Login nötig) sudo raspi-config System Options Boot / Auto Login Console Autologin 8️⃣ Touch & Stromsparfunktionen abschalten sudo nano /etc/systemd/logind.conf Ändern: HandlePowerKey=ignore HandleSuspendKey=ignore HandleHibernateKey=ignore HandleLidSwitch=ignore Optional: Display nie schlafen lassen: sudo nano /boot/firmware/config.txt hdmi_blanking=0 ✅ Ergebnis (nach Reboot) 🔹 Boot 🔹 kein Login 🔹 kein Desktop 🔹 Chromium im Vollbild 🔹 Home Assistant Dashboard 🔹 Touch funktioniert 🔹 Tastatur erscheint nur bei Eingabefeldern 🔹 Monitor hochkant 🔹 monatelang stabil 🧠 Warum das besser ist als X11 Feature X11 Wayland OSK Auto ❌ ✅ Touch UX 😐 😍 Kiosk ⚠️ ✅ Wartung höher minimal Stabilität gut sehr gut 🔥 Optional (sag Bescheid) Ich kann dir noch einbauen: 🔄 Auto-Reload, wenn HA nicht erreichbar 🌙 Nacht-Dimming 🧠 Watchdog (Chromium neu starten) 🧼 RAM-Cleanup 🔐 Zertifikats-Pinning 📶 WLAN-Fallback / Reconnect 🪟 Soft-Button zum Beenden (Admin-Modus) Wenn du willst, sag einfach: „Feinschliff bitte“ 😄 feinschliff bitte Nachgedacht für 48s Alles klar – hier ist der Feinschliff, so dass dein Pi 5 Kiosk monatelang stabil läuft: Watchdog, Auto-Restart, Netz-Check, kein Screen-Blanking, sauberer Chromium-Profilordner, optional Nacht-Reboot. Ich baue das so, dass du nicht von .bash_profile abhängst, sondern eine systemd-Unit hast (sauber + restartbar). 1) Chromium-Kiosk “sauber” starten (Profil, First-Run weg) Script: Session (startet OSK + Chromium) sudo tee /usr/local/bin/ha-session.sh >/dev/null <<'EOF' #!/usr/bin/env bash set -e # On-screen keyboard (Wayland) squeekboard & # Chromium Kiosk exec chromium-browser \ --kiosk \ --noerrdialogs \ --disable-infobars \ --disable-session-crashed-bubble \ --disable-translate \ --disable-features=TranslateUI \ --overscroll-history-navigation=0 \ --no-first-run \ --disable-features=UseOzonePlatform \ --user-data-dir=/home/pi/.config/chromium-kiosk \ https://homeassistant.m4me.de/dashboard-screenmirror EOF sudo chmod +x /usr/local/bin/ha-session.sh Falls dein User nicht pi heißt: ersetze /home/pi entsprechend. 2) Kiosk-Compositor + Restart-Loop (Cage) als systemd Service Wrapper, der Cage startet und bei Exit neu startet sudo tee /usr/local/bin/ha-kiosk.sh >/dev/null <<'EOF' #!/usr/bin/env bash set -e # Konsole soll nicht blanken (nur zur Sicherheit) setterm -blank 0 -powerdown 0 >/dev/tty1 2>/dev/null || true # Endlosschleife: wenn Chromium/Cage crasht → Neustart while true; do cage -- /usr/local/bin/ha-session.sh || true sleep 2 done EOF sudo chmod +x /usr/local/bin/ha-kiosk.sh systemd Unit sudo tee /etc/systemd/system/ha-kiosk.service >/dev/null <<'EOF' [Unit] Description=Home Assistant Kiosk (Wayland/Cage/Chromium + OSK) After=network-online.target seatd.service Wants=network-online.target [Service] User=pi PAMName=login TTYPath=/dev/tty1 TTYReset=yes TTYVHangup=yes TTYVTDisallocate=yes StandardInput=tty StandardOutput=journal StandardError=journal Environment=XDG_RUNTIME_DIR=/run/user/1000 ExecStart=/usr/local/bin/ha-kiosk.sh Restart=always RestartSec=2 [Install] WantedBy=multi-user.target EOF Aktivieren: sudo systemctl daemon-reload sudo systemctl enable --now ha-kiosk.service Logs anschauen: journalctl -u ha-kiosk.service -f 3) “Hard Watchdog”: Wenn HA nicht erreichbar → Service neu starten Das fängt WLAN-Hänger / DNS-Zicken / HA-Aussetzer ab. Check-Script sudo tee /usr/local/bin/ha-healthcheck.sh >/dev/null <<'EOF' #!/usr/bin/env bash set -e URL="https://homeassistant.m4me.de" FAILFILE="/run/ha-kiosk-fails" MAXFAIL=5 if curl -fsS --max-time 5 "$URL" >/dev/null; then rm -f "$FAILFILE" exit 0 fi n=$(cat "$FAILFILE" 2>/dev/null || echo 0) n=$((n+1)) echo "$n" > "$FAILFILE" if [ "$n" -ge "$MAXFAIL" ]; then rm -f "$FAILFILE" systemctl restart ha-kiosk.service fi EOF sudo chmod +x /usr/local/bin/ha-healthcheck.sh systemd Timer (alle 60 Sekunden) sudo tee /etc/systemd/system/ha-healthcheck.service >/dev/null <<'EOF' [Unit] Description=Healthcheck for HA Kiosk [Service] Type=oneshot ExecStart=/usr/local/bin/ha-healthcheck.sh EOF sudo tee /etc/systemd/system/ha-healthcheck.timer >/dev/null <<'EOF' [Unit] Description=Run HA kiosk healthcheck every minute [Timer] OnBootSec=60 OnUnitActiveSec=60 AccuracySec=5s [Install] WantedBy=timers.target EOF sudo systemctl daemon-reload sudo systemctl enable --now ha-healthcheck.timer 4) Screen-Blanking sicher ausschalten Kernel Console Blank aus sudo sed -i 's/$/ consoleblank=0/' /boot/firmware/cmdline.txt Reboot: sudo reboot Das verhindert, dass die Konsole “im Hintergrund” den Bildschirm dunkel macht. 5) Optional: Nacht-Reboot (wenn du’s ganz “unkaputtbar” willst) sudo tee /etc/systemd/system/nightly-reboot.service >/dev/null <<'EOF' [Unit] Description=Nightly reboot [Service] Type=oneshot ExecStart=/sbin/reboot EOF sudo tee /etc/systemd/system/nightly-reboot.timer >/dev/null <<'EOF' [Unit] Description=Reboot every night at 04:00 [Timer] OnCalendar=*-*-* 04:00:00 Persistent=true [Install] WantedBy=timers.target EOF sudo systemctl daemon-reload sudo systemctl enable --now nightly-reboot.timer 6) Wichtiger Hinweis: Hochkant + Touch Rotation hast du schon via display_rotate=1 in /boot/firmware/config.txt. Touch-Mapping ist je nach Touch-Controller manchmal “mitgedreht”, manchmal nicht. Wenn dein Touch nach der Rotation “falsch” ist, sag kurz welcher Touch-Monitor (Modell) oder poste cat /proc/bus/input/devices (nur den Namen-Block) – dann gebe ich dir die korrekte Wayland/Libinput-Option. Wenn du mir 2 Ausgaben gibst, kann ich’s 100% passend finalisieren echo $USER (damit ich pi ggf. anpasse) ls /run/user/ (damit wir die richtige UID für XDG_RUNTIME_DIR fix machen) Bis dahin läuft das Setup in den meisten Pi-OS-Lite-Installationen direkt durch.