前段时间我们的项目想要运行在麒麟系统上,但直接运行不起来,项目以前是支持运行在 ubuntu 18.04 上的,因此遇到一些坑,特此记录一下。
问题汇总:
窗口不透明
非root用户下输入如下命令,并回车
marco -c --replace&
命令解释:marco 是系统采用的窗口管理器 - c 是打开复合效果
软件安装完没有图标
之前使用 QT Install FramWork 打包脚本,关于创建桌面图标是这样的:
component.addElevatedOperation("CreateDesktopEntry","/usr/share/applications/VPlayer.desktop","Exec=sudo VPlayer");
在麒麟系统上只在 /usr/share/applications 目录下创建了图标,桌面上没有软件的图标。ubuntu 也不会在桌面上创建图标,但是 ubuntu 有 show applications 按钮。
解决方案:
在打包 installscript.qs 脚本里面新增执行脚本 desktop.sh,desktop.sh 和 VPlayer 可执行文件处于同级目录。
installscript.qs 如下:
Component.prototype.installationFinished = function()
{
......
installer.executeDetached("sh",installer.value("TargetDir")+"/desktop.sh",installer.value("TargetDir"));
}
desktop.sh 脚本如下:
#!/bin/bash
. ~/.config/user-dirs.dirs
cp /usr/share/applications/VPlayer.desktop $SDG_DESKTOP_DIR/VPlayer.desktop
echo $XDG_DESKTOP_DIR >> desktoppath.txt
user-dirs.dirs 文件里面包含了“桌面”的绝对路径,然后把它保存下来到 desktoppath.txt。
为什么要从这儿获取路径,因为不同的系统语言关于“桌面”的命名是“桌面”或者“Desktop”;
user-dirs.dirs 文件如下:
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"
这个时候当软件安装完成后桌面上已经创建出了图标。但是我们还需要在卸载时移出这个图标。
installscript.qs 增加命令:
component.addElevatedOperation("UNDOEXECUTE","sudo","sh","@TargetDir@/deldesktop.sh");
deldesktop.sh 脚本内容如下:

#!/bin/bash
read path < desktoppath.txt
if [[ "$path" != "" ]];then
rm $path/VPlayer.desktop
fi
双击软件图标不能启动
从“Exec=sudo VPlayer”可以看出我们的软件需要以 root 权限运行,而 root 权限运行时需要输入密码的,但双击的时候没法输入密码,因此软件肯定不能启动了。
解决方案:
我们需要设置无密码使用 sudo 命令,脚本如下:双击执行即可
#!/bin/bash
wholestring=`who`
name=`echo $wholestring|awk '{print $1}'`
sudo sed -i "/Same thing without a password/a\ $name ALL=(ALL) NOPASSWD: ALL" "/etc/sudoers"
执行后双击图标即可打开软件。
运行报错libc.so.6:version’GLIBC_2.25’-not-found
原因:
./VPlayer: /usr/lib64/libc.so.6: version `GLIBC_2.27’ not found (required by /home/admin/VPlayer/libeffectdisplay.so)
./VPlayer: /usr/lib64/libdbus-1.so.3: no version information available (required by /home/admin/VPlayer/lib/libQt5WebEngineCore.so.5)
libeffectdisplay 这个库依赖的 libc 版本要求是2.27以上。
libQt5WebEngineCore 这个库依赖的 libdbus-1.so.3 版本也太低,需要升级(因为我们的项目基于 QT5.12 构建)。
解决方案:
下载 glibc-2.27 和 dbus-1.13.10 ,或者自己在 linux 下编译。下载地址(0积分):
glibc-2.27
dbus-1.13.10
1、下载并解压 glibc-2.27 后,拷贝里面的 libm-2.27.so 到软件的 lib 目录下,并生成软链接:
ln -s libm-2.27.so libm.so.6
ln -s libm-2.27.so libm.so
2、 下载并解压 dbus-1.13.10 后,拷贝里面的 libdbus-1.so.3.26.0 到软件的 lib 目录下,并生成软链接:
libdbus-1.so.3.26.0 -> libdbus-1.so.3
再次运行软件,如果还报错 libdbus-1.so.3 的问题,则将 libdbus-1.so.3.26.0 拷贝到系统目录(usr/lib64)下,并生成软链接即可。
csdn地址:http://blog.csdn.net/u012534831
github地址:https://github.com/qht1003077897
如有帮助,请多多点赞支持哦