基于原生Wine6.0.2稳定版打补丁解决ukylin-wine图标显示异常和deepin-wine闪退的问题,运行QQ接近完美(附补丁)。
作者:互联网
在之前的文章介绍了我使用deepin-wine和ukylin-QQ相结合获得更佳的使用体验,但是毕竟闪退的问题还没有得到彻底解决,因此还是心有不甘,想通过自身查看Wine或窗口管理器的源代码来解决deepin-wine运行QQ闪退的问题。
在最初我还以为ukylin-wine运行QQ图标显示异常是由于窗口管理器(如Xfce、Cinnamon等)提供的托盘管理小程序的问题,我还查看了Xfce和Cinnamon的systray小程序源代码,Xfce的systray是由C代码编制,看了一阵子没有下手的地方,就暂时放弃;由于Cinnamon的systray小程序是由JavaScript编写而成,相对比较容易修改,/usr/share/cinnamon/applets/systray@cinnamon.org中的applet.js文件的图标Click事件中增加了刷新图标的语句on_applet_clicked(event) { Main.statusIconDispatcher.redisplay(); },可以手工临时解决QQ图标与其他图标残留叠加显示的问题。但这个始终没有找到问题的根源,想到原来的Deepin-wine QQ在同样的窗口管理中能够正常的显示,我几乎可以肯定问题就是来源于Wine server。
在确定是Wine server是缺陷存在的地点后,就将注意力转向Wine本身,由于ukylin-wine和deepin-wine都不提供源代码,因此只能从开源社区寻求解决方法,首先安装最新稳定版的Wine6.0.2可执行程序,然后就到www.winehq.org下载最新发布的稳定版Wine 6.0.2版本的源代码压缩包,最后就是修改源代码编译并进行测试直到满意为止。
第一步是安装原生的Wine6.0.2稳定版的可执行程序。
1、首先在系统上启用32位支持,运行命令:sudo dpkg --add-architecture i386
2、添加正式的Wine仓库密钥:
wget -nc https://dl.winehq.org/wine-builds/winehq.key
sudo apt-key add winehq.key
3、添加Wine仓库本身,不同的ubuntu版本是不同的执行命令,可以直接到官网查看,下面是ubuntu 20.04及其衍生版的:
sudo add-apt-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ focal main'
sudo apt-get update
4、安装Wine 6.0稳定版(其他版本请查看官网的相应命令):
sudo apt install --install-recommends winehq-stable
以上步骤执行完成后在/opt目录中就增加了wine-stable目录,在/usr/bin目录中wine可执行脚本指向这个目录中的可执行文件。
第二步是下载原生的Wine6.0.2稳定版的源代码并进行编译并打补丁。
1、在wine官网上下载源代码压缩包,下载地址为:https://dl.winehq.org/wine/source/6.0/wine-6.0.2.tar.xz
2、将该压缩包解压至用户主目录中,所有文件位于wine-6.0.2中。
3、进入wine-6.0.2目录中,执行./congfigure
4、根据要解决的核心问题是图标显示异常问题,通过查看源代码目录,发现在/dlls/winex11.drv目录中包含含显示托盘图标的systray.c源代码文件。限定了问题范围就可以针对winex11.drv单独编译了,这样非常快速看到修改后的运行效果,便于快速发现和解决问题。
5、进入dlls/winex11.drv目录执行make命令就可以生成winex11.drv.so共享链接库文件。此文件需要去覆盖/opt/wine-stable/lib/wine目录下的winex11.drv.so文件。
6、后面的补丁工作就是在这个模块中不断地修改代码,重新make编译,重新替换,查看运行效果到满意为止。
(备注:使用同为wine6大版本的deepin-wine中包含的winex11.drv.so文件进行替换是不行的,替换以后,QQ窗口显示异常,光标进入以后会消失,所以只能使用自己编译的版本。以下为我修改编译后的winex11.drv.so文件:
winex11.drv.so
)
第三部就是安装QQ的容器及启动脚本。
1、为了避免不必要的重复工作,我们就使用比较好的ukylin QQ安装包,进行安装执行,产生一个QQ容器和启动脚本,以及完成开始菜单的生成等。下载地址为:
http://archive.ubuntukylin.com/software/pool/partner/ukylin-qq_1.0_amd64.deb
2、通过修改ukylin QQ的启动脚本文件(/opt/ukylin-wine/apps/wine-qq/run.sh),将“/usr/bin/ukylin-wine”修改为调用原生wine-6.0.2程序的的“wine”语句。
3、重启系统就可以在开始菜单中接近完美的运行QQ了,和ukylin-wine QQ一样的稳定运行,系统托盘中的QQ图标干净了没有其它图标残影的叠加了,而且新消息来了,有消息图标会正常脉动闪烁,总之我关心的问题已经全部解决完成了。
标签:QQ,ukylin,打补丁,wine,Wine,源代码,图标 来源: https://blog.csdn.net/ericden/article/details/121818332