本座记得很清楚,一个星期之前,为咯安装tracker而升级咯glib2,当时是用源代码编译安装咯glib2的,与系统里面用RPM包安装的glib2的路径不一样。而问题就是由这一点导致的。
安装新版glib2之后,下次开机登录的时候就感觉到不对劲咯。fcitx无法正常工作,每当要输入中文,切换到中文输入法,开始输入时,fcitx就卡在那里,然后不得不手动杀掉。从命令行的输出来看,像是某种死锁。当时猜测可能是系统里面存在多个glib2的实例导致的,但是要试用tracker,所以没清除新版的glib2。而老版的glib2是通过RPM安装的,被大部分软件所依赖,由此也不能删除。于是就这么憋咯一个星期,不能输入中文。
试用完咯tracker之后,发现它不适合本座,于是找咯替代品recoll,这东西比tracker好用多咯。所以就不用管tracker咯。检查一下系统里面的共享庫记录,把新版glib2相关的庫都删除,再更新一下链接器的数据缓存,重启fcitx。果然好咯。至于其中的原理,还需研究,看樣子是這樣的:当有程序需要通过glib2加锁时,所有的程序都必须通过同一个glib2实例(libgthread-2.0.so)加锁,這裏的同一個實例指的是硬盤上的同一個文件(或符號鏈接,其絕對路徑是唯一的),甚至連指向同一個文件的兩個不同的符號鏈接也不行。
HxLauncher: Launch Android applications by voice commands