One of the prerequisites to get an application into Snap Store is that it should use a snap confined environment and only use interfaces required for the application functionality. I have made some progress in running a QML application under the snap-confined environment, though with limited success so far.
I am linking the QML application to display drivers and libGL with the snap environment. I do this by using the mesa-core22 content environment library and setting __EGL_VENDOR_LIBRARY_DIRS, LIBGL_DRIVERS_PATH and LD_LIBRARY_PATH environment variables to link to a locally mounted libGL library location resulting in a following snap.yaml configuration:
The result is an application window which opens but does not draw any content shown on the left:
The output of the session I get is:
Qt: Session management error: Could not open network socket
Qt Warning: Unrecognized OpenGL version ((null):0, (null))
Qt Warning: Unrecognized OpenGL version ((null):0, (null))
Qt Warning: Unrecognized OpenGL version ((null):0, (null))
Qt Warning: Unrecognized OpenGL version ((null):0, (null))
Qt Warning: Unrecognized OpenGL version ((null):0, (null))
Qt Warning: Unrecognized OpenGL version ((null):0, (null))
When running under Wayland with QT_QPA_PLATFORM=wayland, I get the same window but without warnings. On the right, I show how the application should look like started outside a confined environment using SNAP=. SNAP_USER_COMMON=. bin/qmlapp-strict from squashfs-root snap directory, which can be obtained from the snap with unsqaushfs.
The warnings led me to test whether OpenGL actually works. I tested that by bundling a simple window with GLAbstractions with the same setup, which draws everything as expected:
Thus, it looks like the issue is on the QML side, and I have no clue how to proceed to resolve it.
The snap is around 200 MB large, available for download from here or can be generated with AppBundler.jl by running examples/qmlapp-strict/meta/build.jl build script.
One of the prerequisites to get an application into Snap Store is that it should use a snap confined environment and only use interfaces required for the application functionality. I have made some progress in running a QML application under the snap-confined environment, though with limited success so far.
I am linking the QML application to display drivers and libGL with the snap environment. I do this by using the
mesa-core22
content environment library and setting__EGL_VENDOR_LIBRARY_DIRS
,LIBGL_DRIVERS_PATH
andLD_LIBRARY_PATH
environment variables to link to a locally mountedlibGL
library location resulting in a followingsnap.yaml
configuration:The result is an application window which opens but does not draw any content shown on the left:
The output of the session I get is:
When running under Wayland with QT_QPA_PLATFORM=wayland, I get the same window but without warnings. On the right, I show how the application should look like started outside a confined environment using
SNAP=. SNAP_USER_COMMON=. bin/qmlapp-strict
fromsquashfs-root
snap directory, which can be obtained from the snap withunsqaushfs
.The warnings led me to test whether OpenGL actually works. I tested that by bundling a simple window with
GLAbstractions
with the same setup, which draws everything as expected:Thus, it looks like the issue is on the QML side, and I have no clue how to proceed to resolve it.
The snap is around 200 MB large, available for download from here or can be generated with
AppBundler.jl
by runningexamples/qmlapp-strict/meta/build.jl
build script.