我在Qt 5.15.2中创建了一个Linux应用程序,并用
linuxdeployqt
.我是在Ubuntu 18.04虚拟机上做的。创建的AppImage在我迄今为止尝试过的任何Linux发行版上运行都没有任何问题。除了Fedora 34和Ubuntu21.10,这两个版本都有Gnome 4。这个问题显然与Gnome 4有关,它可能会困扰许多开发人员,因为Gnome 4在不久的将来将变得越来越普遍。但我还没有找到任何令人满意的解决方案。。。
当我试图在任何基于Gnome 4的发行版上从终端运行我的应用程序时,它会显示以下错误:
./MyApp.AppImage
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
(MyApp.AppImage:2747): GLib-GIO-ERROR **: 08:56:35.632: Settings schema 'org.gnome.settings-daemon.plugins.xsettings' does not contain a key named 'antialiasing'
经过反复试验,我发现只有在添加插件时才会出现这种情况
platformthemes/libqgtk3.so
使用linuxdeployqt部署AppImage时。如果我不捆绑这个库,那么最终的AppImage在Gnome 4中运行良好。但另一方面,如果没有这个GTK3插件,应用程序在基于al Gnome 3和4的发行版上看起来就不好(主题、颜色、图标等)。
我在谷歌上搜索了这个错误的根本原因和可能的解决方案,我发现最有用的信息是:
https://bugs.launchpad.net/ubuntu/+source/gtk+3.0/+bug/1922464
因此,它似乎与旧的GTK版本(早于3.24.26)和新的Gnome 4有一些冲突。所以我假设我们在所有基于Gnome 40的发行版上都会遇到同样的问题。我在Ubuntu18.04(虚拟)机器上用linuxdeployqt构建和部署我的应用程序,这台机器有GTK 3.22.30,太旧了。解决方案可能是在更新版本的Ubuntu上编译并部署我的应用程序。但问题是,linuxdeployqt不允许使用比最早受支持的Ubuntu LTS版本更新的版本部署AppImages。
不幸的是,我不是一名Linux专家,我一直在为Windows开发,大约两年前就开始部分使用Linux。所以我不确定我的选择是什么。
A) 有可能在Ubuntu 18.04上安装更新的GTK版本吗?
B) 有没有可能强迫linuxdeployqt在更新的Ubuntu上工作?
C) 我应该放弃并创建两个版本的AppImages吗
libqgtk3.so
现在有插件(除了基于Gnome40的发行版外,它可以在任何地方使用)和其他没有这个插件的AppImage,它可以在基于Gnome40的发行版上使用吗?
D) 还有别的办法吗?
关于A和B:我不确定这是否可能,如何做到这一点,我会担心在Ubuntu 18.04上运行时的向后兼容性,例如最古老的LTE。
关于C:似乎可行,但它打破了一个通用AppImages的魔力,它应该适用于所有地方。。。另一个问题是,例如在Ubuntu21.10上,如果没有这个GTK3插件,应用程序看起来很难看。。。
关于D:有D吗?