Nvidia drivers on core 24?

We have an x86_64 PC with Intel Core i9 and an NVIDIA GA104GL (RTX A4000) GPU. We are experimenting with Ubuntu Core 24, custom gadget snap, and ubuntu-frame.

ubuntu-frame runs if the display is connected to a port on the PC’s integrated GPU.

However, if the display is connected to a port on the Nvidia GPU, ubuntu-frame fails to run. I assume this is because we don’t have Nvidia drivers installed, but I’m not sure.

Does core 24 support proprietary Nvidia drivers? Can the proprietary drivers be installed?

Here is a snippet from the snap logs:

2025-10-22T19:42:12Z ubuntu-frame.daemon[14079]: [2025-10-22 19:42:12.140048] <information> mirserver: Found display driver: mir:eglstream-kms (version 2.20.1)
2025-10-22T19:42:12Z ubuntu-frame.daemon[14079]: [2025-10-22 19:42:12.140180] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_MESA_device_software EGL_EXT_device_drm_render_node
2025-10-22T19:42:12Z ubuntu-frame.daemon[14079]: [2025-10-22 19:42:12.140196] <information> eglstream: Failed to query DRM node for EGLDevice: Failed to determine DRM device node path from EGLDevice: EGL_BAD_PARAMETER (0x300c)
2025-10-22T19:42:12Z ubuntu-frame.daemon[14079]: [2025-10-22 19:42:12.140199] < - debug - > eglstream: EGLDeviceEXTs found, but none are suitable for Mir
2025-10-22T19:42:12Z ubuntu-frame.daemon[14079]: [2025-10-22 19:42:12.140201] <information> mirserver: (Unsupported by system environment)
2025-10-22T19:42:12Z ubuntu-frame.daemon[14079]: 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()
2025-10-22T19:42:12Z ubuntu-frame.daemon[14079]: Dynamic exception type: boost::wrapexcept<std::runtime_error>
2025-10-22T19:42:12Z ubuntu-frame.daemon[14079]: std::exception::what: Exception while creating graphics platform
2025-10-22T19:42:12Z ubuntu-frame.daemon[14079]: ERROR: ./src/server/graphics/platform_probe.cpp(250): 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<SupportedDevice>(const mir::SharedLibrary&)>&, const std::vector<std::shared_ptr<mir::SharedLibrary> >&, TypePreference)
2025-10-22T19:42:12Z ubuntu-frame.daemon[14079]: Dynamic exception type: boost::wrapexcept<std::runtime_error>
2025-10-22T19:42:12Z ubuntu-frame.daemon[14079]: std::exception::what: Failed to find any platforms for current system
2025-10-22T19:42:12Z systemd[1]: snap.ubuntu-frame.daemon.service: Main process exited, code=exited, status=1/FAILURE
2025-10-22T19:42:12Z systemd[1]: snap.ubuntu-frame.daemon.service: Failed with result 'exit-code'.

The nvidia proprietary drivers come in the form of snap components. You can see them with the snap components command.

To install them, use snap install pc-kernel+nvidia-570-erd-user pc-kernel+nvidia-570-erd-ko

Thank you, that helped. After installing and then rebooting, I now see /dev/ populated with nvidia devices, and lsmod shows several nvidia modules.

When I run ubuntu-frame, I no longer get the Failed to find any platforms for current system error. However, I still only see a black screen with a blinking cursor, even though snap services shows that ubuntu-frame.daemon is active. I don’t see ubuntu-frame’s gray gradient screen.

What am I missing?

Do you see anything interesting in the journal? @Saviq might be able to help you with this

1 Like

In sudo snap logs -n1000 ubuntu-frame.daemon I do see libEGL warnings/failures:

...
<information> mirserver: Found rendering driver: mir:egl-generic (version 2.20.1)
2025-10-25T16:51:20Z ubuntu-frame.daemon[2834]: libEGL warning: egl: failed to create dri2 screen
2025-10-25T16:51:20Z ubuntu-frame.daemon[2834]: libEGL warning: egl: failed to create dri2 screen
2025-10-25T16:51:20Z ubuntu-frame.daemon[2834]: [2025-10-25 16:51:20.803352] <information> mirserver: Driver supports:
...

If I instead plug the display into the Intel integrated GPU port, ubuntu-frame runs correctly, I see the gray gradient, and I don’t see those libEGL warnings/failures in the logs.

Maybe this is relevant, maybe a red herring, I don’t know.

Have you tried to turn off the integrated GPU in the BIOS/UEFI ?

I was wrong about what made the “Failed to find any platforms for current system” go away. I had previously thought installing the nvidia drivers made that error go away, but it was actually enabling the integrated GPU in the BIOS that made it go away.

If the integrated GPU is disabled, I get the “Failed to find any platforms for current system” error whether nvidia drivers are installed or not.

With nvidia drivers installed, and integrated GPU disabled, here are the ubuntu-frame.daemon logs:

sudo snap logs -n1000 ubuntu-frame.daemon
...
2025-10-25T22:26:41Z systemd[1]: Started snap.ubuntu-frame.daemon.service - Service for snap application ubuntu-frame.daemon.
2025-10-25T22:26:41Z ubuntu-frame.daemon[2255]: ++ snapctl get display
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: + '[' -z 'layouts:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: # keys here are layout labels (used for atomically switching between them).
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: # The yaml anchor '\''the_default'\'' is used to alias the '\''default'\'' label
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:   default:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:     cards:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:     # a list of cards (currently matched by card-id)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:     - card-id: 0
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       DisplayPort-1:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       HDMI-A-1:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       DisplayPort-2:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       HDMI-A-2:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       DisplayPort-3:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       HDMI-A-3:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       DisplayPort-4:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       HDMI-A-4:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:   side_by_side:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:     cards:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:     # a list of cards (currently matched by card-id)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:     - card-id: 0
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       DisplayPort-1:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       HDMI-A-1:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       DisplayPort-2:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       HDMI-A-2:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       DisplayPort-3:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       HDMI-A-3:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       DisplayPort-4:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:       HDMI-A-4:
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]:         # (disconnected)' ']'
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: + disown
2025-10-25T22:26:41Z ubuntu-frame.daemon[2260]: + sh -c 'sleep 5; mkdir "/run/user/007"; rmdir "/run/user/007"'
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: + exec nohup /snap/ubuntu-frame/12495/bin/run-frame /snap/ubuntu-frame/12495/bin/gpu-2404-wrapper /snap/ubuntu-frame/12495/usr/local/bin/frame
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: + [ /snap/ubuntu-frame/12495/bin/gpu-2404-wrapper = --help ]
2025-10-25T22:26:41Z ubuntu-frame.daemon[2262]: + dirname /run/user/0/snap.ubuntu-frame
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: + XDG_RUNTIME_DIR=/run/user/0
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: + export XDG_RUNTIME_DIR
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: + mkdir -p /run/user/0 -m 700
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: + [ -n  ]
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: + exec /snap/ubuntu-frame/12495/bin/gpu-2404-wrapper /snap/ubuntu-frame/12495/usr/local/bin/frame
2025-10-25T22:26:41Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:41.960550] < - debug - > miral: Loaded display configuration file: /var/snap/ubuntu-frame/12495/frame.display
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.070679] <information> mirserver: Starting
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.073093] < - debug - > mirserver: Using Linux VT subsystem for session management
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.073193] <information> mircommon: Loading modules from: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.073217] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-eglstream-kms.so.23
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.073222] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-gbm-kms.so.23
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.073225] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/renderer-egl-generic.so.23
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.073230] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/server-x11.so.23
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.073234] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/input-evdev.so.10
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.074145] <information> mirserver: Found display driver: mir:x11 (version 2.20.1)
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.074589] <information> mirserver: (Unsupported by system environment)
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.074735] <information> mirserver: Found display driver: mir:egl-generic (version 2.20.1)
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.074882] <information> mirserver: Found display driver: mir:gbm-kms (version 2.20.1)
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.076483] < - debug - > gbm-kms: Quirks: checking device with devnode: /dev/dri/card1, driver nvidia
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.076490] <information> gbm-kms: Quirks: skipping device /dev/dri/card1 (matches driver quirk nvidia)
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.076493] <information> gbm-kms: Not probing device /dev/dri/card1 due to specified quirk
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.076531] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.076567] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.076601] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.076635] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.076642] <information> mirserver: (Unsupported by system environment)
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.076793] <information> mirserver: Found display driver: mir:eglstream-kms (version 2.20.1)
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.077304] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_EXT_device_drm EGL_EXT_device_drm_render_node
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: libEGL warning: egl: failed to create dri2 screen
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: libEGL warning: egl: failed to create dri2 screen
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: libEGL warning: egl: failed to create dri2 screen
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.083648] < - debug - > eglstream: Failed to initialise EGL: EGL_NOT_INITIALIZED (0x3001)
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.084130] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_MESA_device_software EGL_EXT_device_drm_render_node
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.084147] <information> eglstream: Failed to query DRM node for EGLDevice: Failed to determine DRM device node path from EGLDevice: EGL_BAD_PARAMETER (0x300c)
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.084151] <information> mirserver: Driver supports:
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: [2025-10-25 22:26:42.084155] <information> mirserver:   /devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 (priority 0)
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: 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()
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: Dynamic exception type: boost::wrapexcept<std::runtime_error>
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: std::exception::what: Exception while creating graphics platform
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: ERROR: ./src/server/graphics/platform_probe.cpp(250): 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<SupportedDevice>(const mir::SharedLibrary&)>&, const std::vector<std::shared_ptr<mir::SharedLibrary> >&, TypePreference)
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: Dynamic exception type: boost::wrapexcept<std::runtime_error>
2025-10-25T22:26:42Z ubuntu-frame.daemon[2223]: std::exception::what: Failed to find any platforms for current system
2025-10-25T22:26:42Z systemd[1]: snap.ubuntu-frame.daemon.service: Main process exited, code=exited, status=1/FAILURE
2025-10-25T22:26:42Z systemd[1]: snap.ubuntu-frame.daemon.service: Failed with result 'exit-code'.
2025-10-25T22:26:45Z systemd[1]: snap.ubuntu-frame.daemon.service: Scheduled restart job, restart counter is at 1.
2025-10-25T22:26:45Z systemd[1]: Started snap.ubuntu-frame.daemon.service - Service for snap application ubuntu-frame.daemon.
2025-10-25T22:26:45Z ubuntu-frame.daemon[2318]: ++ snapctl get display
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: + '[' -z 'layouts:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: # keys here are layout labels (used for atomically switching between them).
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: # The yaml anchor '\''the_default'\'' is used to alias the '\''default'\'' label
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:   default:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:     cards:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:     # a list of cards (currently matched by card-id)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:     - card-id: 0
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       DisplayPort-1:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       HDMI-A-1:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       DisplayPort-2:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       HDMI-A-2:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       DisplayPort-3:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       HDMI-A-3:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       DisplayPort-4:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       HDMI-A-4:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:   side_by_side:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:     cards:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:     # a list of cards (currently matched by card-id)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:     - card-id: 0
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       DisplayPort-1:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       HDMI-A-1:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       DisplayPort-2:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       HDMI-A-2:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       DisplayPort-3:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       HDMI-A-3:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       DisplayPort-4:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:       HDMI-A-4:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]:         # (disconnected)' ']'
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: + disown
2025-10-25T22:26:45Z ubuntu-frame.daemon[2323]: + sh -c 'sleep 5; mkdir "/run/user/007"; rmdir "/run/user/007"'
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: + exec nohup /snap/ubuntu-frame/12495/bin/run-frame /snap/ubuntu-frame/12495/bin/gpu-2404-wrapper /snap/ubuntu-frame/12495/usr/local/bin/frame
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: + [ /snap/ubuntu-frame/12495/bin/gpu-2404-wrapper = --help ]
2025-10-25T22:26:45Z ubuntu-frame.daemon[2325]: + dirname /run/user/0/snap.ubuntu-frame
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: + XDG_RUNTIME_DIR=/run/user/0
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: + export XDG_RUNTIME_DIR
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: + mkdir -p /run/user/0 -m 700
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: + [ -n  ]
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: + exec /snap/ubuntu-frame/12495/bin/gpu-2404-wrapper /snap/ubuntu-frame/12495/usr/local/bin/frame
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.341719] < - debug - > miral: Loaded display configuration file: /var/snap/ubuntu-frame/12495/frame.display
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.356902] <information> mirserver: Starting
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.357063] < - debug - > mirserver: Using Linux VT subsystem for session management
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.357118] <information> mircommon: Loading modules from: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.357134] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-eglstream-kms.so.23
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.357139] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-gbm-kms.so.23
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.357142] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/renderer-egl-generic.so.23
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.357146] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/server-x11.so.23
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.357149] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/input-evdev.so.10
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.357777] <information> mirserver: Found display driver: mir:x11 (version 2.20.1)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.357789] <information> mirserver: (Unsupported by system environment)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.357920] <information> mirserver: Found display driver: mir:egl-generic (version 2.20.1)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.358067] <information> mirserver: Found display driver: mir:gbm-kms (version 2.20.1)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.358690] < - debug - > gbm-kms: Quirks: checking device with devnode: /dev/dri/card1, driver nvidia
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.358695] <information> gbm-kms: Quirks: skipping device /dev/dri/card1 (matches driver quirk nvidia)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.358698] <information> gbm-kms: Not probing device /dev/dri/card1 due to specified quirk
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.358735] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.358770] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.358803] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.358837] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.358843] <information> mirserver: (Unsupported by system environment)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.358992] <information> mirserver: Found display driver: mir:eglstream-kms (version 2.20.1)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.359239] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_EXT_device_drm EGL_EXT_device_drm_render_node
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: libEGL warning: egl: failed to create dri2 screen
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: libEGL warning: egl: failed to create dri2 screen
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: libEGL warning: egl: failed to create dri2 screen
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.362763] < - debug - > eglstream: Failed to initialise EGL: EGL_NOT_INITIALIZED (0x3001)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.363287] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_MESA_device_software EGL_EXT_device_drm_render_node
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.363312] <information> eglstream: Failed to query DRM node for EGLDevice: Failed to determine DRM device node path from EGLDevice: EGL_BAD_PARAMETER (0x300c)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.363316] <information> mirserver: Driver supports:
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: [2025-10-25 22:26:45.363320] <information> mirserver:   /devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 (priority 0)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: 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()
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: Dynamic exception type: boost::wrapexcept<std::runtime_error>
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: std::exception::what: Exception while creating graphics platform
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: ERROR: ./src/server/graphics/platform_probe.cpp(250): 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<SupportedDevice>(const mir::SharedLibrary&)>&, const std::vector<std::shared_ptr<mir::SharedLibrary> >&, TypePreference)
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: Dynamic exception type: boost::wrapexcept<std::runtime_error>
2025-10-25T22:26:45Z ubuntu-frame.daemon[2291]: std::exception::what: Failed to find any platforms for current system
2025-10-25T22:26:45Z systemd[1]: snap.ubuntu-frame.daemon.service: Main process exited, code=exited, status=1/FAILURE
2025-10-25T22:26:45Z systemd[1]: snap.ubuntu-frame.daemon.service: Failed with result 'exit-code'.
2025-10-25T22:26:48Z systemd[1]: snap.ubuntu-frame.daemon.service: Scheduled restart job, restart counter is at 2.
2025-10-25T22:26:48Z systemd[1]: Started snap.ubuntu-frame.daemon.service - Service for snap application ubuntu-frame.daemon.
2025-10-25T22:26:48Z ubuntu-frame.daemon[2371]: ++ snapctl get display
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: + '[' -z 'layouts:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: # keys here are layout labels (used for atomically switching between them).
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: # The yaml anchor '\''the_default'\'' is used to alias the '\''default'\'' label
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:   default:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:     cards:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:     # a list of cards (currently matched by card-id)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:     - card-id: 0
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       DisplayPort-1:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       HDMI-A-1:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       DisplayPort-2:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       HDMI-A-2:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       DisplayPort-3:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       HDMI-A-3:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       DisplayPort-4:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       HDMI-A-4:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:   side_by_side:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:     cards:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:     # a list of cards (currently matched by card-id)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:     - card-id: 0
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       DisplayPort-1:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       HDMI-A-1:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       DisplayPort-2:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       HDMI-A-2:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       DisplayPort-3:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       HDMI-A-3:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       DisplayPort-4:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:       HDMI-A-4:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]:         # (disconnected)' ']'
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: + disown
2025-10-25T22:26:48Z ubuntu-frame.daemon[2376]: + sh -c 'sleep 5; mkdir "/run/user/007"; rmdir "/run/user/007"'
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: + exec nohup /snap/ubuntu-frame/12495/bin/run-frame /snap/ubuntu-frame/12495/bin/gpu-2404-wrapper /snap/ubuntu-frame/12495/usr/local/bin/frame
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: + [ /snap/ubuntu-frame/12495/bin/gpu-2404-wrapper = --help ]
2025-10-25T22:26:48Z ubuntu-frame.daemon[2378]: + dirname /run/user/0/snap.ubuntu-frame
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: + XDG_RUNTIME_DIR=/run/user/0
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: + export XDG_RUNTIME_DIR
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: + mkdir -p /run/user/0 -m 700
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: + [ -n  ]
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: + exec /snap/ubuntu-frame/12495/bin/gpu-2404-wrapper /snap/ubuntu-frame/12495/usr/local/bin/frame
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.587881] < - debug - > miral: Loaded display configuration file: /var/snap/ubuntu-frame/12495/frame.display
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.602979] <information> mirserver: Starting
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.603136] < - debug - > mirserver: Using Linux VT subsystem for session management
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.603187] <information> mircommon: Loading modules from: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.603203] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-eglstream-kms.so.23
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.603207] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/graphics-gbm-kms.so.23
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.603211] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/renderer-egl-generic.so.23
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.603215] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/server-x11.so.23
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.603218] <information> mircommon: Loading module: /snap/ubuntu-frame/12495/usr/lib/x86_64-linux-gnu/mir/server-platform/input-evdev.so.10
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.603776] <information> mirserver: Found display driver: mir:x11 (version 2.20.1)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.603788] <information> mirserver: (Unsupported by system environment)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.603928] <information> mirserver: Found display driver: mir:egl-generic (version 2.20.1)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.604074] <information> mirserver: Found display driver: mir:gbm-kms (version 2.20.1)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.604700] < - debug - > gbm-kms: Quirks: checking device with devnode: /dev/dri/card1, driver nvidia
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.604706] <information> gbm-kms: Quirks: skipping device /dev/dri/card1 (matches driver quirk nvidia)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.604708] <information> gbm-kms: Not probing device /dev/dri/card1 due to specified quirk
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.604745] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.604782] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.604816] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.604850] < - debug - > gbm-kms: Quirks: checking device with devnode: (null), driver
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.604856] <information> mirserver: (Unsupported by system environment)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.605007] <information> mirserver: Found display driver: mir:eglstream-kms (version 2.20.1)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.605246] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_EXT_device_drm EGL_EXT_device_drm_render_node
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: libEGL warning: egl: failed to create dri2 screen
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: libEGL warning: egl: failed to create dri2 screen
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: libEGL warning: egl: failed to create dri2 screen
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.608766] < - debug - > eglstream: Failed to initialise EGL: EGL_NOT_INITIALIZED (0x3001)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.609295] < - debug - > eglstream: Found EGLDeviceEXT with device extensions: EGL_MESA_device_software EGL_EXT_device_drm_render_node
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.609309] <information> eglstream: Failed to query DRM node for EGLDevice: Failed to determine DRM device node path from EGLDevice: EGL_BAD_PARAMETER (0x300c)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.609312] <information> mirserver: Driver supports:
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: [2025-10-25 22:26:48.609316] <information> mirserver:   /devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 (priority 0)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: 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()
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: Dynamic exception type: boost::wrapexcept<std::runtime_error>
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: std::exception::what: Exception while creating graphics platform
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: ERROR: ./src/server/graphics/platform_probe.cpp(250): 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<SupportedDevice>(const mir::SharedLibrary&)>&, const std::vector<std::shared_ptr<mir::SharedLibrary> >&, TypePreference)
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: Dynamic exception type: boost::wrapexcept<std::runtime_error>
2025-10-25T22:26:48Z ubuntu-frame.daemon[2344]: std::exception::what: Failed to find any platforms for current system
2025-10-25T22:26:48Z systemd[1]: snap.ubuntu-frame.daemon.service: Main process exited, code=exited, status=1/FAILURE
2025-10-25T22:26:48Z systemd[1]: snap.ubuntu-frame.daemon.service: Failed with result 'exit-code'.

Hi,

I think you have to also install the mesa-2024 snap. I believe that is how ubuntu-frame would get hold of the relevant userspace libs required. They are shared from the kernel snap to the mesa snap via content interface, which in turn provides them to ubuntu-frame via a content interface , along with some wrappers to help prepare the env for finding the libs.

Not sure if there’s a good doc for this or not.

Cheers, Just

Not much mention of nvidia, but this give quite a bit of info about the mesa-2404 snap itself.

Cheers, Just

Yes, I already installed mesa–2024 previously, as ubuntu-image will not allow you to install ubuntu-frame otherwise.

I’ve verified that ubuntu-frame works on my machine via the nvidia GPU on core 22, using these steps, plus snap connect ubuntu-frame:graphics-core22 nvidia-core22:

But that is on core 22. I’m now trying to get it working on core 24.

What’s the output of this ?

snap connections mesa-2404
$ snap connections mesa-2404
Interface                 Plug                       Slot                       Notes
content[kernel-gpu-2404]  mesa-2404:kernel-gpu-2404  pc-kernel:kernel-gpu-2404  -
content[gpu-2404]         test-app:gpu-2404          mesa-2404:gpu-2404         -
content[gpu-2404]         ubuntu-frame:gpu-2404      mesa-2404:gpu-2404         -

Hmmm, it does look like everything is in place.

I think some input from the Ubuntu Frame guys which be valuable at this point.

Cheers, Just

As a workaround I was able to get my core24 test-app snap to display through the nvidia GPU by installing it onto a core22 base system. I used ubuntu-frame 22/stable, and enabled the nvidia drivers via the method in the github link I posted above.

Installing my test-app snap auto-pulled in the core24 and mesa-2404 snaps, such that they are installed alongside the core22 and mesa-core22 snaps.

Here are my snap connections:

$ snap connections
Interface                 Plug                                    Slot                           Notes
content[gpu-2404]         test-app:gpu-2404                       mesa-2404:gpu-2404             -
content[graphics-core22]  ubuntu-frame:graphics-core22            nvidia-core22:graphics-core22  manual
hardware-observe          ubuntu-frame:hardware-observe           :hardware-observe              -
kernel-module-load        nvidia-assemble:modprobe-nvidia         :kernel-module-load            -
network-bind              ubuntu-frame:network-bind               :network-bind                  -
nvidia-drivers-support    nvidia-assemble:nvidia-drivers-support  :nvidia-drivers-support        -
opengl                    nvidia-core22:opengl                    :opengl                        -
opengl                    test-app:opengl                         :opengl                        -
opengl                    ubuntu-frame:opengl                     :opengl                        -
wayland                   test-app:wayland                        ubuntu-frame:wayland    

And here is my snap list:

$ snap list
Name             Version                      Rev    Tracking       Publisher    Notes
core22           20250923                     2139   latest/stable  canonical**  base
core24           20251001                     1225   latest/stable  canonical**  base
mesa-2404        25.0.7-snap207               1110   latest/stable  canonical**  -
mesa-core22      23.2.1                       498    latest/stable  canonical**  -
nvidia-assemble  3-36-gb8b0680                62     22/stable      canonical**  -
nvidia-core22    535.247.01+mesa23.2.1        138    latest/stable  canonical**  -
pc               22-0.4                       x1     -              -            gadget
pc-kernel        5.15.0-156.166.1+535.247.01  2783   22/stable      canonical**  kernel
snapd            2.71                         25202  latest/stable  canonical**  snapd
test-app         0.1                          x1     -              -            devmode
ubuntu-frame     147-mir2.17.2                15403  22/stable      canonical**  -

It seems to work, but is this valid?