I've been running into this ubuntu-frame bug:
2026-01-16T11:38:04-07:00 systemd[1]: Started Service for snap application ubuntu-frame.daemon.
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849434]: ++ snapctl get display
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: + '[' -z 'layouts:
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: # keys here are layout labels (used for atomically switching between them).
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: # The yaml anchor '\''the_default'\'' is used to alias the '\''default'\'' label
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: default:
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: cards:
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: # a list of cards (currently matched by card-id)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: - card-id: 0
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: HDMI-A-1:
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: # (disconnected)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: HDMI-A-2:
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: # (disconnected)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: side_by_side:
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: cards:
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: # a list of cards (currently matched by card-id)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: - card-id: 0
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: HDMI-A-1:
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: # (disconnected)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: HDMI-A-2:
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: # (disconnected)' ']'
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: + disown
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849440]: + sh -c 'sleep 5; mkdir "/run/user/007"; rmdir "/run/user/007"'
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: + exec nohup /snap/ubuntu-frame/15404/bin/run-frame /snap/ubuntu-frame/15404/bin/graphics-core22-wrapper /snap/ubuntu-frame/15404/usr/local/bin/frame
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: + [ /snap/ubuntu-frame/15404/bin/graphics-core22-wrapper = --help ]
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849442]: + dirname /run/user/0/snap.ubuntu-frame
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: + XDG_RUNTIME_DIR=/run/user/0
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: + export XDG_RUNTIME_DIR
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: + mkdir -p /run/user/0 -m 700
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: + [ -n ]
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: + exec /snap/ubuntu-frame/15404/bin/graphics-core22-wrapper /snap/ubuntu-frame/15404/usr/local/bin/frame
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.469940] < - debug - > miral: Loaded display configuration file: /var/snap/ubuntu-frame/15404/frame.display
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.522608] <information> mirserver: Starting
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.523833] < - debug - > mirserver: Using Linux VT subsystem for session management
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.524709] <information> mircommon: Loading modules from: /snap/ubuntu-frame/15404/usr/lib/aarch64-linux-gnu/mir/server-platform
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.525181] <information> mircommon: Loading module: /snap/ubuntu-frame/15404/usr/lib/aarch64-linux-gnu/mir/server-platform/graphics-eglstream-kms.so.22
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.525371] <information> mircommon: Loading module: /snap/ubuntu-frame/15404/usr/lib/aarch64-linux-gnu/mir/server-platform/graphics-gbm-kms.so.22
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.525456] <information> mircommon: Loading module: /snap/ubuntu-frame/15404/usr/lib/aarch64-linux-gnu/mir/server-platform/renderer-egl-generic.so.22
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.525525] <information> mircommon: Loading module: /snap/ubuntu-frame/15404/usr/lib/aarch64-linux-gnu/mir/server-platform/server-x11.so.22
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.525593] <information> mircommon: Loading module: /snap/ubuntu-frame/15404/usr/lib/aarch64-linux-gnu/mir/server-platform/input-evdev.so.9
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.531147] <information> mirserver: Found display driver: mir:x11 (version 2.17.2)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.531417] <information> mirserver: (Unsupported by system environment)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.531491] <information> mirserver: Found display driver: mir:egl-generic (version 2.17.2)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.531721] <information> mirserver: Found display driver: mir:gbm-kms (version 2.17.2)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.545484] < - debug - > gbm-kms: Quirks: checking device with devnode: /dev/dri/card1, driver vc4-drm
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.546562] <information> gbm-kms: Failed to probe DRM device: ./src/server/console/linux_virtual_terminal.cpp(167): Throw in function {anonymous}::DRMDevice::DRMDevice(mir::VTFileOperations&, const char*, std::unique_ptr<mir::Device::Observer>, const std::shared_ptr<mir::LinuxVirtualTerminal::DeviceList>&)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: Dynamic exception type: boost::wrapexcept<boost::exception_detail::error_info_injector<std::system_error> >
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: std::exception::what: Failed to claim DRM master: Device or resource busy
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [boost::errinfo_file_name_*] = /dev/dri/card1
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.547634] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.548537] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.549405] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.550625] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.551858] < - debug - > gbm-kms: Quirks: checking device with devnode: /dev/dri/card0, driver v3d
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: Failed to create /root/.cache/mesa_shader_cache for shader cache (Permission denied)---disabling.
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.677089] <information> gbm-kms: Failed to probe DRM device: ./src/platforms/common/server/kms-utils/drm_mode_resources.cpp(39): Throw in function mir::graphics::kms::DRMModeResUPtr {anonymous}::resources_for_drm_node(int)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: Dynamic exception type: boost::wrapexcept<std::system_error>
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: std::exception::what: Couldn't get DRM resources: Operation not supported
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.677474] <information> mirserver: Driver supports:
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.677632] <information> mirserver: /devices/platform/v3dbus/fec00000.v3d/drm/card0 (priority 0)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.677736] <information> mirserver: Found display driver: mir:eglstream-kms (version 2.17.2)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.683771] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_EXT_device_drm EGL_EXT_device_drm_render_node
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.684913] < -warning- > eglstream: Failed to check DRM modesetting support for device fec00000.v3d: Invalid argument (22)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.685222] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_MESA_device_software EGL_EXT_device_drm_render_node
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.685470] <information> eglstream: Failed to query DRM node for EGLDevice: Failed to determine DRM device node path from EGLDevice: EGL_BAD_PARAMETER (0x300c)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.685552] <information> mirserver: Driver supports:
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: [2026-01-16 11:38:05.685594] <information> mirserver: /devices/platform/v3dbus/fec00000.v3d/drm/card0 (priority 0)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: ERROR: ./src/server/graphics/default_configuration.cpp(198): Throw in function virtual const std::vector<std::shared_ptr<mir::graphics::DisplayPlatform> >& mir::DefaultServerConfiguration::the_display_platforms()
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: Dynamic exception type: boost::wrapexcept<std::runtime_error>
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: std::exception::what: Exception while creating graphics platform
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: ERROR: ./src/server/graphics/platform_probe.cpp(232): Throw in function std::vector<std::pair<mir::graphics::SupportedDevice, std::shared_ptr<mir::SharedLibrary> > > mir::graphics::modules_for_device(const std::function<std::vector<mir::graphics::SupportedDevice>(const mir::SharedLibrary&)>&, const std::vector<std::shared_ptr<mir::SharedLibrary> >&, mir::graphics::TypePreference)
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: Dynamic exception type: boost::wrapexcept<std::runtime_error>
2026-01-16T11:38:05-07:00 ubuntu-frame.daemon[849404]: std::exception::what: Failed to find any platforms for current system
2026-01-16T11:38:05-07:00 systemd[1]: snap.ubuntu-frame.daemon.service: Main process exited, code=exited, status=1/FAILURE
2026-01-16T11:38:35-07:00 systemd[1]: snap.ubuntu-frame.daemon.service: State 'stop-sigterm' timed out. Killing.
2026-01-16T11:38:35-07:00 systemd[1]: snap.ubuntu-frame.daemon.service: Killing process 5131 (frame) with signal SIGKILL.
When I reboot it works for a while, then freezes after a couple of hours. When I restart ubuntu-frame I get this issue.
I have another machine set up in the exact same way (as far as I can tell) and it is not having any problems.
:~$ snap info ubuntu-frame ubuntu-frame-osk
name: ubuntu-frame
summary: The foundation for many embedded graphical display implementations
publisher: Canonical✓
store-url: https://snapcraft.io/ubuntu-frame
contact: https://github.com/MirServer/ubuntu-frame/issues
license: GPL-3.0
description: |
Ubuntu Frame is an easy-to-use, reliable and secure display server for embedded Linux devices
allowing developers to deploy graphic applications for kiosks, digital signage, IoT, robotics and
more.
With Ubuntu Frame, the graphic application you choose or design gets a fullscreen kiosk window. It
enables windows behaviours, input from touch, keyboard, and mouse, on-screen keyboard, power
saving and more.
Ubuntu Frame streamlines the build and development of products that need graphical output.
**Benefits**
* Create maintainable images for kiosks and digital signage solutions in under an hour.
* Out of the box features such as kiosk mode, on-screen keyboard and power saving for your
devices.
* Less code for you to integrate and maintain as it bundles communication protocols, input
protocols, and security policies into a single kit
* Compatible with popular toolkits for creating graphical user interfaces like Qt, Flutter,
electron, and also html5 and java.
* Built-in security and long-term supported by Canonical.
If you want to enable **Ubuntu Frame's on-screen keyboard**, please install ubuntu-frame-osk:
https://snapcraft.io/ubuntu-frame-osk
To get started with Ubuntu Frame please read the documentation: https://mir-server.io/docs
Ubuntu Frame is open source, free to use, and long-term supported by Canonical, and will continue
to be our recommended way to enable embedded graphics on Ubuntu Core.
commands:
- ubuntu-frame.screenshot
- ubuntu-frame
services:
ubuntu-frame.daemon: simple, enabled, inactive
snap-id: BPZbvWzvoMTrpec4goCXlckLe2IhfthK
tracking: 22/stable
refresh-date: 2025-10-13
channels:
24/stable: 406-mir2.23.0 2025-12-05 (17658) 38MB -
24/candidate: 406-mir2.25.2 2026-01-07 (17878) 38MB -
24/beta: 409-mir2.25.2 2026-01-08 (18953) 38MB -
24/edge: 409-mir2.26.0~dev182 2026-01-08 (18952) 38MB -
latest/stable: 99-mir2.13.0 2023-10-05 (5795) 8MB -
latest/candidate: ↑
latest/beta: ↑
latest/edge: ↑
22/stable: 147-mir2.17.2 2025-10-13 (15404) 6MB -
22/candidate: ↑
22/beta: 147-mir2.17.2 2025-08-20 (15404) 6MB -
22/edge: ↑
20/stable: 106-mir2.13.1 2025-10-13 (15406) 8MB -
20/candidate: ↑
20/beta: 106-mir2.13.1 2026-01-07 (18896) 8MB -
20/edge: ↑
installed: 147-mir2.17.2 (15404) 6MB -
---
name: ubuntu-frame-osk
summary: On-screen keyboard for Ubuntu Frame, based on Squeekboard
publisher: Canonical✓
store-url: https://snapcraft.io/ubuntu-frame-osk
contact: https://github.com/MirServer/ubuntu-frame-osk/issues
license: GPL-3.0
description: |
This snap contains the Wayland on-screen keyboard Squeekboard, modified and packaged such that it
can run on Ubuntu Frame.
For more information please read the [documentation]
(https://discourse.ubuntu.com/t/ubuntu-frame-osk-documentation/27568)
* If you do not require an on-screen keyboard, or you want to learn more about Ubuntu Frame,
please visit [Frame's home page](https://snapcraft.io/ubuntu-frame)
commands:
- ubuntu-frame-osk.list-layouts
- ubuntu-frame-osk
services:
ubuntu-frame-osk.daemon: simple, enabled, active
snap-id: UaV8aeiyZzQMgUyRCwuJma4Q2IuxA99t
tracking: 22/stable
refresh-date: 9 days ago, at 11:36 MST
channels:
24/stable: 107-sb1.43.1 2026-01-07 (1299) 95MB -
24/candidate: ↑
24/beta: 107-sb1.43.1 2026-01-06 (1299) 95MB -
24/edge: 108-sb1.43.1 2026-01-06 (1302) 95MB -
latest/stable: 44-squeekboard-v1.17.1 2023-10-05 (375) 81MB -
latest/candidate: ↑
latest/beta: ↑
latest/edge: 107-sb1.43.1 2025-12-18 (1293) 95MB -
22/stable: 75-squeekboard-v1.17.1 2026-01-07 (1298) 88MB -
22/candidate: ↑
22/beta: 75-squeekboard-v1.17.1 2026-01-06 (1298) 88MB -
22/edge: ↑
20/stable: 51-squeekboard-v1.17.1 2026-01-07 (1280) 80MB -
20/candidate: ↑
20/beta: 51-squeekboard-v1.17.1 2025-12-11 (1280) 80MB -
20/edge: ↑
installed: 75-squeekboard-v1.17.1 (1298) 88MB -
I've been running into this ubuntu-frame bug:
When I reboot it works for a while, then freezes after a couple of hours. When I restart ubuntu-frame I get this issue.
I have another machine set up in the exact same way (as far as I can tell) and it is not having any problems.