撸Linux


Archlinux滚动升级后ibus出现界面及通知栏图标消失的解决过程与方法

ibus本来是一个非常不错的输入法,但是bug还真不少。

之前很多linux用户反映ibus输入法输入全拼出来的是双拼很混乱,解决方法本来很简单(看这里),但新手没那个耐心找解决方法,导致怨声载道(参考百度贴吧的帖子:1234567……)。

本来以为我的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的手册,找找灵感

相关博文



以下是网友的2条评论,您赞同吗?

  1. 2015-3-15 23:58

    今天刚看到,太棒了! 我准备也搞一搞这个扯淡的输入法问题。

  2. 2014-11-16 9:57

    哈哈哈

发表评论

电子邮件地址不会被公开。