Zwei Anwendungen nacheinander im Kiosk-Modus unter Raspberry Pi OS Lite (Trixie)

  • Hallo zusammen.

    Ich habe mir ein spannendes, neues Projekt ausgedacht und würde mir gerne einen Raspberry Pi 5 zu einer Art Reisebegleitung ausbauen, um damit WLAN-AP, VPN-Tunnel und Kodi dabei zu haben während Dienstreisen. Aktuell beiße ich mir aber die Zähne aus an ein paar trivialen Dingen, die mich kirre machen. Evtl. hat einer von euch eine gute Idee, wie ich den Fehler eingrenzen kann.

    Ich möchte gerne, folgendes erreichen:

    • Beim Booten wird auf dem TV im Hotel eine Flask-Webseite angezeigt im Browser (Kiosk-Modus)
    • Gesteuert durch ein Skript soll dann später Kodi angezeigt werden.


    Was bereits klappt:

    • Automatischer Login meines Benutzers
    • mit einer --user systemd-unit wird der labwc Window Manager gestartet
    • mit einer zweiten --user systemd-unit wird auch Flask gestartet. (gebunden an 0.0.0.0:5000). Die Webseite ist aus dem Netzwerk erreichbar.
    • es gibt eine dritte --user systemd-unit, welche auch chromium-browser starten kann. Diese funktioniert aber nur manuell, wenn ich sie von SSH oder tty1 aus starte.


    Was aber nicht funktioniert:

    • Ich bekomme chromium-browser nicht automatisch gestartet. Mit der dritten --user systemd-unit klappt es nicht nach dem Booten.
    • Da es ja grundsätzlich klappt wenn ich manuell starte, vermute ich ein Probem mit dem Timing. Aber ich finde keine Ausgaben mit Fehlern irgendwo und stochere gerade im Nebel.
    • Da meine systemd-unit auf eine bash Skript zeigt, habe ich dort auch erst mal ein Delay von 10 Sekunden eingebaut. Aber selbst das scheint nichts zu bringen.


    Das Umschalten auf Kodi habe ich erst mal nach hinten geschoben, da es ja schon mit chromium-browser nicht klappt.


    Gibt es Tools, welche in dem Dickicht an systemd-Units eine Visualisierung der Reihenfolge hin bekommen? Habt ihr eine Idee?

    Danke & Grüße,

    Marcus

  • Zwei Anwendungen nacheinander im Kiosk-Modus unter Raspberry Pi OS Lite (Trixie)? Schau mal ob du hier fündig wirst!

  • Ich bekomme chromium-browser nicht automatisch gestartet. Mit der dritten --user systemd-unit klappt es nicht nach dem Booten.

    Füge in der Datei ~/.config/labwc/autostart folgendes hinzu:

    Code
    nm-online -qt 120 && firefox -new-window https://forum-raspberrypi.de/ &

    Browser und URL musst Du natürlich anpassen!

  • Hi. Und danke!

    nm-online kann ich anfangs noch nicht nutzen. Ich habe ausschließlich den AP auf wlan0 und damit so eine Art "Insel-Netz". Der Flask-Server scannt auf wlan1 die Netzwerke und bietet mir im Web-Frontend dann eine Auswahl ein, inkl. Eingabe des Passworts. Wenn dann über wlan1 eine Verbindung ins Internet besteht soll der wireguard Tunnel aufgebaut werden und danach Kodi gestartet werden.

    Die Anzeige von des Browsers auf HDMIs ist auch eher ein Nebenkriegsschauplatz, weil die Webseite von meinem Handy aus bedient werden soll, wenn ich ohne Maus/Tastatur auf Reisen bin. Das hilft mir nur immens bei der Entwicklung, weil ich dann auch ein Status-Protokoll mit Fehlern anzeigen lassen kann.


    Ich bin gerade nochmal ein Stück weiter gekommen. Und zwar habe ich meine labwc.service zu einer globalen Unit gemacht unterhalb von /etc/systemd/system. Ich wollte gerne so umbauen, wie es auch mit der "Vollversion" von Raspberry OS passiert: Grafische Ausgabe auf TTY7, und die Konsole bleibt auf TTY1. Allerdings eben ohne Display Manager und nur mit dem labwc Window Manager.

    Ergebnis ist "interessant":

    • ich sehe ein Boot-Log auf tty1
    • dann kommt sehr kurz der schwarze Bildschirm des labwc mit einem Mauscursor (vermutlich auf tty7, wie in der Unit-Datei spezifiziert)
    • es geht für 2-3 Sekunden zurück zum tty1, da scheint der Auto-Login zu passieren.
    • und dann geht es wieder zurück zu tty7, dort lädt dann chromium-browser im Vollbild Modus.


    Alles in allem ein wenig wirr, aber zumindest lande ich nun im Browser wie gewünscht. 8o


    Dann bleiben noch 2-3 Baustellen:

    1. Endzustand sollte ein Custom Boot-Splash Bildschirm sein, der angezeigt wird bis zu dem Moment, wo der Browser dargestellt wird. .tga Datei habe ich mir schon generiert, aber damit ist mir vor 2 Tagen der Bootvorgang mit Kernelpanik hängen geblieben. (Fehlermeldung war, dass ich "Type 10" statt "Type 2" verwendet habe, oder umgekehrt.
    2. Sollte der Browser auch über eine globale Unit gestartet werden? -- Dann könnte ich den Auto-Login auf tty1 abschalten und das Geflacker wäre evtl. weg.
    3. Wie kann ich nun auf Kodi umschalten? -- Ausgelöst werden sollte das durch ein Python-Skript in Flask. Ich drücke einen Button, und dann würde Kodi geladen. (erst mal manuell, das soll später automatisiert erfolgen, wenn ich im Hotel an wlan1 eine WLAN-Verbindung mit Internet habe. Brauche ich weitere Units, nach dem Motto "wenn X tot, dann Y starten"? -- Oder alles direkt in Python respektive Bash Skripten?


    VG, Marcus

    Edited once, last by marcuszurhorst (November 2, 2025 at 5:24 PM).

  • Sollte der Browser auch über eine globale Unit gestartet werden? -- Dann könnte ich den Auto-Login auf tty1 abschalten und das Geflacker wäre evtl. weg.

    Das Geflacker könnte vom Start von Labwc kommen, aber versuch macht klug. Wenn der Browser von einer "globalen" Unit gestartet werden soll, muss aber trotzdem der User angegeben werden und ebenso das Display (WAYLAND_DISPLAY=wayland-0) und ggf. auch der Rest des Environments (XDG_RUNTIME_DIR=/run/user/1000). Da wäre mir persönlich die Lösung von oben lieber.

    Wie kann ich nun auf Kodi umschalten?

    Vermutlich wäre das Starten mit subprocess() der einfachste Weg. Mit Flask verwendest Du ja schon Python und wenn Du dort einen Formular-Button und dessen Auswertung dafür verwendest, dürfte nach dessen Start dann Kodi über dem Browser liegen.

  • Mit "Geflacker" meinte ich, dass er nach dem ersten tty7 nochmal zurück auf tty1 springt für ein paar Sekunden.

    Ich glaube, mein größtes Problem ist gerade, dass ich bei systemd den Unterschied zwischen --user Units und den globalen Units noch nicht gut verstanden habe. Die --user Units werden jedenfalls nur bei einem (Auto)Login abgearbeitet.


    Ich mache nun mal einen anderen Versuch: eine einzige globale Unit, welche ein Shell-Skript ausführt. Dort drin rufe ich dann gleichzeitig labwc + Browser auf. Mal gucken, was dann geschieht.

  • Ich mache nun mal einen anderen Versuch: eine einzige globale Unit, welche ein Shell-Skript ausführt. Dort drin rufe ich dann gleichzeitig labwc + Browser auf. Mal gucken, was dann geschieht.

    Vermutlich nicht viel, denn damit wird eine Systemd Unit absurd, weil so eben nicht Programme erst dann gestartet werden, wenn die Abhängigkeiten erfüllt sind, wie z.B. Grafik verfügbar oder User ist eingeloggt.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!