近日我将主力操作系统换为了Ubuntu 20.04,总体体验还是不错的,但最大的一个问题就是华南理工大学的VPN客户端EasyConnect运行时会闪退。无法连入学校内网还是有诸多不便,本文就记录下该问题的解决方案。这个解决方案应该也适用于很多基于electron的应用程序在Ubuntu 20.04下闪退的问题。
故障描述
点击桌面图标后弹出“错误报告”对话框。在命令行运行时出现以下错误:
$ /usr/share/sangfor/EasyConnect/EasyConnect
Gtk-Message: 14:54:34.831: Failed to load module "canberra-gtk-module"
(EasyConnect:14016): Pango-ERROR **: 14:54:35.047: Harfbuzz version too old (1.3.1)
追踪与中断点陷阱 (核心已转储)
解决方案
基于该GitHub issue中的内容,本问题是由于electron版本太老,而系统中某些库(libpango)的版本太新导致的不兼容现象。
那要解决该问题,首先要安装旧版本的库文件(.so文件)。但Ubuntu 20.04的apt源中并没有旧版本。所以我们只能安装Ubuntu 18.04的包,但最好要以一种不会影响其他程序的方式。首先,去packages.ubuntu.com搜索并下载如下软件包:libpango-1.0-0,libpangocairo-1.0-0,libpangoft2-1.0-0,将其中的动态库文件解压至/usr/local/lib/easyconnect
,完成后,其中应包含以下内容:
$ ls -l /usr/local/lib/easyconnect
总用量 448
lrwxrwxrwx 1 root root 25 7月 24 15:11 libpango-1.0.so.0 -> libpango-1.0.so.0.4000.14
-rw-r--r-- 1 root root 313264 8月 22 2018 libpango-1.0.so.0.4000.14
lrwxrwxrwx 1 root root 30 7月 24 15:19 libpangocairo-1.0.so.0 -> libpangocairo-1.0.so.0.4000.14
-rw-r--r-- 1 root root 51096 8月 22 2018 libpangocairo-1.0.so.0.4000.14
lrwxrwxrwx 1 root root 28 7月 24 15:16 libpangoft2-1.0.so.0 -> libpangoft2-1.0.so.0.4000.14
-rw-r--r-- 1 root root 87904 8月 22 2018 libpangoft2-1.0.so.0.4000.14
然后创建一个脚本代替原来EasyConnect的可执行文件,使其使用我们准备的这些库。在/usr/local/bin/easyconnect
文件中写入以下内容,并为此文件添加执行权限。
#!/bin/bash
export LD_LIBRARY_PATH=/usr/local/lib/easyconnect:$LD_LIBRARY_PATH
/usr/share/sangfor/EasyConnect/EasyConnect "$@"
那么现在在命令行使用/usr/local/bin/easyconnect
就应该能正常打开EasyConnect啦。但为了方便,我们再更改下桌面图标启动的文件。将/usr/share/applications/EasyConnect.desktop
复制一份到/usr/local/share/applications/
中,并Exec
选项中的可执行文件替换为我们创建的脚本即可。
其他小问题
- 关闭时进程不能正常退出。可使用kill或htop等命令向最顶层的进程发送sigterm信号即可使其退出。
- DNS问题。有时EasyConnect会导致系统的DNS不可用,原因未知,但重启EasyConnect可以解决。另外,EasyConnect会每5秒覆盖一次
/etc/resolv.conf
文件,任何自定义设置都会被覆盖(太沙雕了)。它似乎有自己的DNS服务器,但没能成功启动。我尝试过将系统服务systemd-resolve
停止以让出53端口,但这样会导致EasyConnect的服务报错,然后VPN连接会在不久后自动中断。
当然,本文所述方案也只是权宜之计。还希望学校能早日更新客户端,以彻底解决此问题。