最近装了Win11和Ubuntu双系统,为了能更方便地和朋友交流,遂决定在Ubuntu下安装微信。
首先要去网上找教程,经过一番搜索,正当我在wine和deepin-wine之间犹豫不定之时,忽然发现了GitHub上的这个仓库zq1997/deepin-wine
据其README描述:
deepin-wine环境与应用在Debian/Ubuntu上的移植仓库
使用deepin官方原版软件包
安装QQ/微信只需要两条命令
居然还有这么方便的事情?那必须得是选择这种方式啊!
殊不知,README中还藏着一段文字,被我所忽视,而它将为后文的一切埋下深深的伏笔……
Linux不是Windows,Wine也不是Windows,不要期待100%丝滑享受。
依赖问题
在依据其README完成setup之后,使用apt安装微信,出现类似下面的依赖问题:
(因为当时自己这边的信息找不到了,所以用了GitHub上别人的)
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:下列软件包有未满足的依赖关系:
libsane : 依赖: libsane-common (= 1.0.27.2-3.2+deepin) 但是 1.2.1-7build4 正要被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
因为有很多已安装的包依赖于1.2.1版本的libsane-common,所以只能尝试提高deepin版微信依赖的libsane-common的版本。
因此需要修改deb包中的依赖信息并重新打包。
但是由于不是很懂Ubuntu的包管理机制,只好在这个仓库的issues里搜索sane关键词,最终找到了这篇博文——解决向日葵软件在Ubuntu 20.04依赖libwebkitgtk-3.0-0等问题
通过aptitude可以发现,是com.qq.weixin.deepin包依赖的deepin-wine8-stable包依赖了libsane,所以需要修改deepin-wine8-stable包的deb。
先下载对应的deb文件,
apt download deepin-wine8-stable
然后参照这篇博文去修改即可。
由于我才疏学浅,不知道怎么指定版本为>=1.2.1(试过了修改版本号但是有问题,睡了一觉忘记问题是啥了),为了快速解决问题,用了个简单粗暴的方法——直接去掉libsane这个依赖项。
安装上述博文中的方法修改,然后重新打包,再使用
apt install ./xxx.deb
安装即可(install后面要写一个路径,否则apt会认为是包名从而到仓库中去找)
接着再使用
sudo apt-get install com.qq.weixin.deepin
来安装微信就没有问题了,安装好之后可能需要注销再重新登陆(或者重启)才能看到微信的图标。
高兴得太早
正当高兴之时,打开微信,发现居然提示解压错误了。
不过好在,在GitHub Issues里找到了适配的解决方案:微信解压失败,files.7z的md5值不正确 #378
按照上图方法修改后,终于可以打开微信了……
后记
探究解压失败的原因
在run_v4.sh中找到相关代码,发现其逻辑是这样的:
如果7z解压文件后返回的状态码不是0,则认为是解压失败。
ExtractApp()
{$SHELL_DIR/deepin-wine-banner unpack &mkdir -p "$1"7z x "$APPDIR/$APPTAR" -o"$1"if [ $? != 0 ];then$SHELL_DIR/deepin-wine-banner info "解压失败"rm -rf "$1"exit 1fimv "$1/drive_c/users/@current_user@" "$1/drive_c/users/$USER"sed -i "s#@current_user@#$USER#" $1/*.regFixLink$SHELL_DIR/deepin-wine-banner unpacked
}
而在7z命令后面加上 || true
之后,这条命令的返回值就一定是0了,也就是忽略7z解压错误,继续执行后面的代码。
可是为什么明明解压发生错误了,还能正常启动呢?
我尝试自己执行了run脚本中的解压命令,发现里面是有一些危险的链接被忽略了,从而导致了ERROR。
例如:
ERROR: Dangerous link path was ignored : drive_c/windows/winhlp32.exe : /opt/deepin-wine8-stable/lib/wine/i386-windows/winhlp32.exe
除了这些链接以外的文件似乎都被正确地解压出来了,但是我不太理解为什么没有这些链接,应用也能正常运行,也许是实际运行时没有用到,或者deepin-wine(或wine)对此有fallback机制?
待解决的托盘问题
deepin-tool中修改托盘的脚本在Ubuntu中无法生效,从而导致微信窗口关闭之后无法再打开。重新点击微信图标则会造成前一个窗口的crash,然后又得重新登陆。
后面有空看看能不能修改一下托盘相关脚本,让它能够正常运行。