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 \
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=$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.