From e9ef477e623a397c3cae8e1e2d676046069cbb01 Mon Sep 17 00:00:00 2001 From: unitexe Date: Fri, 6 Feb 2026 09:09:11 -0600 Subject: Boot to flutter app using ivi-homescreen embedder - Introduce meta-unit-graphics layer - Flutter app is run under the kiosk user - Added weston.ini specific to raspberrypi3-64 LCD screen - Move linger class to meta-unit-users layer so it can be used by meta-unit-graphics and meta-unit-core - Update svc and unitexe user UIDs so they dont clash with the weston user --- .../recipes-core/systemd/systemd-flutter-kiosk.bb | 37 ++++++++++++++++++++++ .../systemd/systemd-flutter-kiosk/kiosk.service | 15 +++++++++ .../flutter-apps/flutter-sample-no-material.bb | 17 ++++++++++ .../packagegroups/packagegroup-unit-kiosk.bb | 7 ++++ 4 files changed, 76 insertions(+) create mode 100644 meta-unit-graphics/dynamic-layers/flutter-layer/recipes-core/systemd/systemd-flutter-kiosk.bb create mode 100644 meta-unit-graphics/dynamic-layers/flutter-layer/recipes-core/systemd/systemd-flutter-kiosk/kiosk.service create mode 100644 meta-unit-graphics/dynamic-layers/flutter-layer/recipes-graphics/flutter-apps/flutter-sample-no-material.bb create mode 100644 meta-unit-graphics/dynamic-layers/flutter-layer/recipes-graphics/packagegroups/packagegroup-unit-kiosk.bb (limited to 'meta-unit-graphics/dynamic-layers/flutter-layer') diff --git a/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-core/systemd/systemd-flutter-kiosk.bb b/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-core/systemd/systemd-flutter-kiosk.bb new file mode 100644 index 0000000..9aa8d71 --- /dev/null +++ b/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-core/systemd/systemd-flutter-kiosk.bb @@ -0,0 +1,37 @@ +SUMMARY = "Systemd service for launching kiosk application" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${UNIT_GRAPHICS_LAYERDIR}/LICENSE;md5=a77c12e0c0e8a14cebb1494195720ccc" + +inherit systemd + +require conf/include/flutter-version.inc + +SRC_URI = "file://kiosk.service" + +RDEPENDS:${PN}:append = " flutter-sample-no-material" +RDEPENDS:${PN}:append = " ivi-homescreen" +RDEPENDS:${PN}:append = " weston" +RDEPENDS:${PN}:append = " weston-init" +RDEPENDS:${PN}:append = " add-user-kiosk" + +S = "${UNPACKDIR}" + +SYSTEMD_USER = "kiosk" +SYSTEMD_USER_UNITDIR = "/home/${SYSTEMD_USER}/.config/systemd/user" + +do_install() { + install -D -p -m0644 ${S}/kiosk.service ${D}${SYSTEMD_USER_UNITDIR}/kiosk.service + + # Variable substitution. + sed -i 's|@@FLUTTER_SDK_TAG@@|${FLUTTER_SDK_TAG}|g' ${D}${SYSTEMD_USER_UNITDIR}/kiosk.service + sed -i 's|@@KIOSK_APPLICATION_NAME@@|flutter_sample_no_material|g' ${D}${SYSTEMD_USER_UNITDIR}/kiosk.service + + # Auto-enable systemd unit by creating the appropriate symlink + install -d ${D}${SYSTEMD_USER_UNITDIR}/default.target.wants + ln -sf ${SYSTEMD_USER_UNITDIR}/kiosk.service ${D}${SYSTEMD_USER_UNITDIR}/default.target.wants/kiosk.service +} + +FILES:${PN} = "\ + ${SYSTEMD_USER_UNITDIR}/kiosk.service \ + ${SYSTEMD_USER_UNITDIR}/default.target.wants/kiosk.service \ +" diff --git a/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-core/systemd/systemd-flutter-kiosk/kiosk.service b/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-core/systemd/systemd-flutter-kiosk/kiosk.service new file mode 100644 index 0000000..3534eed --- /dev/null +++ b/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-core/systemd/systemd-flutter-kiosk/kiosk.service @@ -0,0 +1,15 @@ +[Unit] +Description=Kiosk Application + +[Service] +Type=simple +Environment="WAYLAND_DISPLAY=/run/wayland-0" +ExecStart=/usr/bin/homescreen --bundle /usr/share/flutter/@@KIOSK_APPLICATION_NAME@@/@@FLUTTER_SDK_TAG@@/release/ --fullscreen +Restart=on-failure +RestartSec=2s +RestartSteps=5 +RestartMaxDelaySec=10s +TimeoutStartSec=15min + +[Install] +WantedBy=graphical.target diff --git a/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-graphics/flutter-apps/flutter-sample-no-material.bb b/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-graphics/flutter-apps/flutter-sample-no-material.bb new file mode 100644 index 0000000..403786b --- /dev/null +++ b/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-graphics/flutter-apps/flutter-sample-no-material.bb @@ -0,0 +1,17 @@ +SUMMARY = "flutter_sample_no_material" +DESCRIPTION = "A sample that shows a Flutter app without material widgets." +AUTHOR = "unitexe" +HOMEPAGE = "https://github.com/unitexe/flutter_sample_no_material" +BUGTRACKER = "None" +SECTION = "graphics" + +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=38bf13be5d6979b28bd8adddb2f2f9b3" + +SRCREV = "e34c7c4ca151d6ca5282176cdbbe8f9d1844c9ae" +SRC_URI = "git://git.closedcircuitconsulting.com/flutter_sample_no_material;branch=main;protocol=https" + +PUBSPEC_APPNAME = "flutter_sample_no_material" +PUBSPEC_IGNORE_LOCKFILE = "1" + +inherit flutter-app diff --git a/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-graphics/packagegroups/packagegroup-unit-kiosk.bb b/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-graphics/packagegroups/packagegroup-unit-kiosk.bb new file mode 100644 index 0000000..cbacc24 --- /dev/null +++ b/meta-unit-graphics/dynamic-layers/flutter-layer/recipes-graphics/packagegroups/packagegroup-unit-kiosk.bb @@ -0,0 +1,7 @@ +SUMMARY = "Unit kiosk" + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +inherit packagegroup + +RDEPENDS:${PN}:append = " systemd-flutter-kiosk" -- cgit v1.2.3