Ubuntu每一次版本更新都伴随着大量的系统依赖的更新,常常会导致很多原来能用的软件更新后就用不了了,尤其是对于一些更新不频繁的商业软件。这次更新之后我发现连接学校VPN的EasyConnect打不开了,在命令行中执行显示如下的错误:
$ /usr/share/sangfor/EasyConnect/EasyConnect
(EasyConnect:71583): Pango-ERROR **: 15:11:47.910: Harfbuzz version too old (1.3.1)
寻找问题根源
简单搜索发现,已经有人在easyconnect论坛上提出过这个问题,不过并没有工作人员回应:
不过好在这个问题并不是easyconnect独有的,通过谷歌搜索发现这是一个比较常见的错误,很有可能是electron框架版本太老的问题,然而electron开发者表示无能为力。
一个workaround
幸运的是,有网友发现可以通过降级pango等依赖解决问题。错误信息提示Harfbuzz版本太旧了,实际上是因为pango版本太新了。需要做的不是升级Harfbuzz,而是降级pango。为了防止修改系统库带来的风险,直接将相关的so库文件解压到easyconnect同目录下即可。具体来说,涉及的so文件为:
$ ldd EasyConnect | grep pango
libpangocairo-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007f9713518000)
libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007f971337e000)
libpangoft2-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007f97116d8000)
相关的包可以到ubuntu packages网站上下载,例如https://packages.ubuntu.com/eoan/libpango-1.0-0。另外两个也需要下载。将下载的deb文件解压,放到/usr/share/sangfor/EasyConnect目录下。现在ldd输出变为:
$ ldd EasyConnect | grep pango
libpangocairo-1.0.so.0 => /usr/share/sangfor/EasyConnect/./libpangocairo-1.0.so.0 (0x00007f16ce009000)
libpango-1.0.so.0 => /usr/share/sangfor/EasyConnect/./libpango-1.0.so.0 (0x00007f16cde72000)
libpangoft2-1.0.so.0 => /usr/share/sangfor/EasyConnect/./libpangoft2-1.0.so.0 (0x00007f16cc1cb000)
问题解决
再次打开EasyConnect客户端,已经能够正常启动。
这个方法虽然充满了妥协,但是毕竟是在客户端没有及时更新的情况下一种有效的解决方法。同时也避免了降级系统的pango库,带来更多问题。当然,等待网站更新才是最终解决之道。