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庫,帶來更多問題。當然,等待網站更新才是最終解決之道。