Skip to content

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 26 Sep 12:51
· 3 commits to main since this release
8a75fb9

v2.0.0

The kiosk is odio-kiosk now, built on Qt 6 / Chromium 122, and runs one
instance per screen
. An installed node migrates on apt upgrade, but the unit
changed name and shape — see Upgrading below.

✨ Features

  • Qt 6 instead of Qt 5.15: the engine is Chromium 122, not Chromium 87 from
    late 2020. :where(), accent-color, container queries, unprefixed mask-*
    and Object.hasOwn all work, so the odio UI stops losing whole stylesheet
    rules to an unknown pseudo-class and library code stops tripping on missing
    built-ins.

  • One kiosk per screen: the unit is a template, odio-kiosk@.service. Each
    instance names the page it shows, and its framebuffer if it is not the first,
    in ~/.config/odio-kiosk/<instance>.conf:

    URL=http://localhost:8018/ui
    FB=/dev/fb1
    
  • The node's Qt environment is a conffile: /etc/default/odio-kiosk holds
    the default framebuffer, the QT_QPA_FB_* settings and the Chromium flags —
    editable in place, with no drop-in and no quoting, and preserved on upgrade.

  • The unit names no server: which one to wait for, and be restarted with, is
    deployment configuration, so it goes in a drop-in:

    # ~/.config/systemd/user/odio-kiosk@main.service.d/wait-for.conf
    [Unit]
    After=default.target my-server.service
    PartOf=my-server.service

    The health check waits on ${URL} regardless, so a kiosk with no drop-in
    still comes up once its server answers.

🐛 Fixes

  • An instance with no URL says which file to write, instead of dying on a
    missing environment file that names neither the file nor the instance.
  • A stopped kiosk is inactive, not failed: SuccessExitStatus=1 is gone —
    this binary exits 143 on SIGTERM, which systemd already counts as a clean
    stop. It also no longer turned a browser that cannot open its framebuffer into
    a unit going quietly inactive behind a blank screen.
  • The current URL is no longer written on close: it went through a
    QSettings pointer that was never allocated.
  • The user agent is honest: Qt's own, naming QtWebEngine and its Chromium
    with an odio-kiosk suffix. It used to claim to be Firefox 89, which made
    every server log line about this browser misleading.

⬆️ Upgrading from fbrowser-kiosk

The package Provides/Replaces/Breaks fbrowser-kiosk, so apt upgrade
migrates the node by itself. The unit does not come along: odio-screen.service
is gone, and no instance of the template is enabled on install.

systemctl --user disable --now odio-screen.service
mkdir -p ~/.config/odio-kiosk
printf 'URL=http://localhost:8018/ui\n' > ~/.config/odio-kiosk/main.conf
systemctl --user enable --now odio-kiosk@main.service

📦 Install

curl -fsSL https://apt.odio.love/key.gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/odio.gpg
echo "deb [signed-by=/usr/share/keyrings/odio.gpg] https://apt.odio.love stable main" \
  | sudo tee /etc/apt/sources.list.d/odio.list
sudo apt update && sudo apt install odio-kiosk

First run, on a node that has never shown a screen:

sudo usermod -aG tty,video,input $USER     # then log in again
sudo loginctl enable-linger $USER

amd64 and arm64, Debian trixie / Raspberry Pi OS trixie. No armhf: Pi OS
armhf is Raspbian, which publishes no qt6-webengine binary for it, exactly as
it published no Qt 5 one.

What's Changed

Full Changelog: v1.0.0+git20260210.4213a69...v2.0.0