QT5.12.0 程序在中标麒麟(neokylin)系统问题处理

前段时间我们的项目想要运行在麒麟系统上,但直接运行不起来,项目以前是支持运行在 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

如有帮助,请多多点赞支持哦

猜你喜欢

转载自blog.csdn.net/u012534831/article/details/106526498