自从在公司的开发环境切换到Manjaro(2018-12-15)已经有两个月了。除了Dock 老是 屏幕锁定时不正确的被显示出来(参见连接)之外,基本没有任何问题了。

事发

刚过完年,下午上班划水发现PackManager又有更新了,随手就是“Apply”一点,就切到后台开始忙工作上的事情了,没一会就完全把后台正在滚动升级这事给忘记了。大概十几分钟后,正调着BUG呢,电脑突然就当机了,Alt+F2也完全没有响应。因为BUG正调到关键时候,没多想脑一抽就按了重启键。

重启过后问题就来了,显示器上有鼠标显示,但一直卡在黑屏界面,进不了桌面。当时才一下反应过来,我貌似是正在更新呢,这突然重启不得GG了!

尝试解决

先试了下Alt+F2,能进入tty界面。但是上面有一行报错提示:

error while loading shared libraries: libidn2.so.4: cannot open shared object file: No such file or directory.

这报错我也先不管了,感觉能进tty应该没太大问题。

网上搜索

看来问题的症结就在这个 libidn2.so.4 上了,果断在手机上一搜 manjaro+libidn2.so.4 关键词:

第一个不就是跟我一样的问题吗?进去一看,果然,是因为不正常的升级导致旧版本libidn2 库文件中的 /usr/lib/libidn2.so.4 文件不见了。

解决

既然缺这个文件,那我们就把它找回来。

我们到 pacman 升级下载的缓存里去找看看有没有 libidn2 的旧包:

[kaka@kaka-pc ~]$ ls -al /var/cache/pacman/pkg/libidn2*
-rw-r--r-- 1 root root 113244 1月  24 17:10 /var/cache/pacman/pkg/libidn2-2.1.0-1-x86_64.pkg.tar.xz
-rw-r--r-- 1 root root 114976 2月  20 15:38 /var/cache/pacman/pkg/libidn2-2.1.1-2-x86_64.pkg.tar.xz

这里我们看到有两个 libidn2 包,第二个应该是今天更新时刚下载下来的,第一个就是上一次更新的旧版本包了。

我们把这个旧包 copy 到临时目录,解压并搜索 libidn2.so.4 这个文件: