ibus本来是一个非常不错的输入法,但是bug还真不少。
之前很多linux用户反映ibus输入法输入全拼出来的是双拼很混乱,解决方法本来很简单(看这里),但新手没那个耐心找解决方法,导致怨声载道(参考百度贴吧的帖子:1,2,3,4,5,6,7……)。
本来以为我的ibus会一直安然无恙,前几天ArchLinux滚动升级后ibus输入法又出问题了,虽然能输入中文,但候选词界面和通知栏图标都不见了,非常不爽。我真想说:“linux这玩具怎么一直还是这么渣?10几年了,连最基本的中文输入法都这么不让人省心,还谈什么用户和市场??”
不管怎么样,还是不想用其他什么fcitx输入法,于是开始了以下折腾的过程。
第1阶段:通过pacman -Ql ibus命令发现了一个跟ibus输入法界面有关的可执行程序/usr/lib/ibus/ibus-ui-gtk3,这个程序只要在进入桌面之后运行一次即可开启ibus输入法界面。
第2阶段:将/usr/lib/ibus/ibus-ui-gtk3 & ibus restart这个命令加入到~/.config/autostart启动项中。用gvim制作了一个叫ibus_ui的shell脚本链接到/usr/bin/ibus_ui。脚本内容如下:
#! /bin/sh a=`ps -A|grep ibus-daemon` b=`ps -A|grep ibus-x11` c=`ps -A|grep ibus-dconf` while [ -z "$a" ] || [ -z "$b" ] || [ -z "$c" ]; do sleep 1 a=`ps -A|grep ibus-daemon` b=`ps -A|grep ibus-x11` c=`ps -A|grep ibus-dconf` done d=`ps -A|grep kimpanel-ibus` if [ -n "$d" ];then killall kimpanel-ibus-panel fi e=`ps -A|grep ibus-ui-gtk3` if [ -n "$e" ];then killall ibus-ui-gtk3 fi exec "/usr/lib/ibus/ibus-ui-gtk3" exec ibus restart sleep 5 killall ibus_ui
意思是:等待ibus-daemon、ibus-x11、ibus-dcof在进程中出现以后执行/usr/lib/ibus/ibus-ui-gtk3。
虽然这个ibus_ui脚本非常有用,但我发现一旦运行ibus restart之后,ibus候选词界面和通知栏图标都重新消失,进程中又出现了kimpanel-ibus-panel(KDE的输入法面板模块),于是怀疑ibus肯定将kimpanel-ibus-panel捆绑了。
第3阶段:man ibus-daemon发现ibus-daemon有一个关于面板的"--panel="设置项,尝试将ibus.desktop这个autostart启动项的ibus-daemon -xdr的命令之后加一个--panel=/usr/lib/ibus/ibus-ui-gtk3,变成如下命令:
ibus-daemon -xdr --panel=/usr/lib/ibus/ibus-ui-gtk3
哈哈,搞定!后台进程中再也没有kimpanel-ibus-panel了,运行ibus restart仍无恙!
最后总结一下目前我解决ibus输入法问题得到的排错经验:
- 安装了中文输入法模块吗?
- 所有ibus环境界面程序ibus-gtk、ibus-gtk3、ibus-qt都安装到位了吗?
- ibus输入法export到env中了吗?
- 运行ibus-setup看看?
- ibus restart能否解决问题?
- ibus-daemon -xdr运行结果如何?
- ibus-daemon的--panel=面板项是怎么设置的?
- 看看ibus、ibus-daemon的手册,找找灵感
今天刚看到,太棒了! 我准备也搞一搞这个扯淡的输入法问题。
哈哈哈