Files
ansible/roles/pi_slint_frontend
Martin Bauer cb0ece0478 Keep the media-pi roles working on trixie
- pi_hifiberry_amp: the boot config lives at /boot/firmware/config.txt.
- pi_sysdweb: install python3-dbus and python3-systemd from apt, which trixie ships at
  the versions sysdweb needs; bookworm gets the headers pip needs to build dbus-python
  1.4 itself.
- pi_squeezeserver: trixie images have no iptables, and so cannot have the port 80
  redirect that absent.yml removes - skip that step there instead of failing.
- pi_modern_shell_env, pi_slint_frontend: read facts through `ansible_facts` rather than
  the deprecated injected `ansible_*` variables.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 23:14:18 +02:00
..

pi_slint_frontend

Builds and installs slint-frontend/ from the app repo - the native front-end that exists because the React UI is sluggish on the kiosk. Installed alongside the web UI, never instead of it, and the systemd unit is installed but not enabled: the device still boots into the kiosk browser.

systemctl start musikdelfin     # takes over the screen
systemctl stop  musikdelfin     # back to the browser underneath

or over SSH, DISPLAY=:0 /usr/local/bin/musikdelfin.

Why this builds on the device

pi_musicmouse builds the web front-end on the control machine and rsyncs dist/, because npm output is portable and npm is not installed on the Pis. A Rust binary is not portable, so this role has a harder choice.

The Pis run 32-bit armhf Raspbian on a 64-bit kernel - uname -m says aarch64 and dpkg --print-architecture says armhf, and the second one is the one that matters. The target is armv7-unknown-linux-gnueabihf. Cross-compiling to it from the control machine needs a sysroot, and the devices carry no -dev packages to build one out of, so it would have to be reconstructed from the Debian archive - and then kept in step with the devices' glibc forever. Spending the device's own CPU once is the smaller liability. A rebuild only happens when the commit changes.

The same fact rules out the Skia renderer: rust-skia publishes no prebuilt binaries for armhf, so --features kiosk would mean compiling Skia from source on a Pi. This role builds --features desktop - winit, FemtoVG and the software renderer - and runs as an X client in the existing session rather than taking over KMS.

SLINT_BACKEND=winit-software musikdelfin switches renderer without a rebuild, which is the thing to try first if the GPU path misbehaves. The FemtoVG bug that makes kiosk use Skia upstream (slint-ui/slint#11785) was reported on a Pi 5 with a 64-bit userland, so it may well not apply here - but it is worth checking that album covers actually appear before drawing conclusions about frame rate.

First run

Roughly 40 minutes: 570 crates on two cores. Later runs are incremental and usually seconds. The build is niced and limited to two jobs, which bounds peak memory on musicdolphin's 1.8 GB.