阅读提示:

本文已过时。

最近升级了 Ubuntu Precise,在中文输入法下耗费了不少时间,觉得有必要把折腾过程详细写下来。

1 在 Qt 程序中启用 XIM 输入模块

IBus 的安装非常简单,直接通过 apt-get 把所用到的相关包一并装上就可以了。有了 im-switch 之后,启用输入法也是一件非常简单的事情,直接 im-switch -s ibus 就可以启用 ibus 输入法了。

然而,IBus 的 Qt 输入模块有一些 bug,只有 IBus 启动之后再启动的 Qt 程序,才可以正常激活输入法。IBus 启动之前就已经启动的 Qt 程序,输入法激活不了,无法输入中文。这带来的一个严重问题是,如果系统在运行过程中 IBus 因为某种原因 crash 了,或者用户出于某些原因需要重启 IBus,那么之前已经启动的 Qt 程序就无法再输入中文了。

为了避开这个问题,我们只能在 Qt 程序里禁用 ibus 输入模块,而回退到原始的 XIM 输入模块,通过 XIM 输入模块来调用 ibus。虽然那个模块功能有限,效率也比较低,但至少是可以正常运作的。具体操作方法是,在执行完 im-switch -s ibus 之后,用文本编辑器打开 ~/.xinput.d/zh_CN(如果你的当前 locale 不是 zh_CN 的话根据你的具体情况打开相应文件),找到 QT_IM_MODULE=xim 一行,将之下一直到 done 的行全注释掉:

...
QT_IM_MODULE=xim
# use immodule when available for Qt4 (Qt3 has been long dead)
#for IM_CONFIG_MARKER in /usr/lib/*/qt4/plugins/inputmethods/libqtim-ibus.so\
#                        /usr/lib/qt4/plugins/inputmethods/libqtim-ibus.so ; do
#    if [ -e $IM_CONFIG_MARKER ]; then
#        QT_IM_MODULE=ibus
#        break
#    fi
#done
...

然后重启桌面环境,IBus 就能正常使用了。

2 升级 GVim

如果你不在 Linux 下使用 GVim 的话,那接下来的内容你就不需要继续看下去了。

GVim 里有一个 bug,和 IBus 会产生冲突,导致安装了 IBus 之后,GVim 的启动速度会非常慢,每次开启 GVim 都会停顿十几秒钟。虽然这个 bug 已经在 7.3.520 里得到了修复,但 Precise 里带的 GVim 是 7.3.429,因此你还是会被这个 bug 咬到。

解决方法是,到 Debian Sid 的代码仓库里,下载高于 7.3.520 版本的 GVim 包,到自己系统里安装,装完之后启动 GVim 就可以正常了。

3 禁用应用程序内嵌编辑模式

所谓“内嵌编辑模式”,就是输入法将正在输入中,还没正式选定的字符串嵌入到目标窗口中,而不是显示在输入法自己的漂浮窗口中。内嵌编辑模式有很多优点,一方面是界面简洁美观,另一方面是可以输入法和目标应用程序能够进行更多交互,实现更多功能。譬如,在 GVim 中,启用了内嵌编辑模式之后,在插入模式下启用输入法,输入一段汉字后,按下 ESC,GVim 知道你要退回命令模式,会直接通知输入法切换回英文模式,不需要你手工关闭输入法,非常方便。

然而,这个非常方便的功能,却因为 GVim 的严重 bug,而导致完全无法正常使用。当 GVim 出现折行的时候,会把输入法的内嵌编辑串搞到一塌糊涂的程度,如图:

ibus_gvim_wrap

因此,为了保证能够正常使用,我们只能忍痛牺牲这个非常好用的功能。运行 ibus-setup,在“常规”选项卡里找到“在应用程序窗口中启用内嵌编辑模式”,取消这个选项。

4 强制重启 IBus

IBus 在 KDE 下还有个 bug,每次登录进系统之后,你会发现系统托盘里没有 IBus 图标。在应用程序里按下 Ctrl-Space 后,也看不到输入法工具条。输入文字的时候文字候选框也不出现,但“摸黑”按下数字选字,汉字是可以正常上屏的,可见输入法其实已经启动,只是所有的窗口都不可见而已。

这样的输入法显然是无法使用的,遇到这样的情况,你需要打开一个终端,输入以下命令行:

ibus-daemon -dxrR

稍等片刻,输入法就可以正常使用了。可以考虑将这段脚本放到桌面环境登录自动启动目录下,譬如 KDE 下的登录自动启动目录是 ~/.kde/Autostart/

可能会影响到日常使用的配置和注意事项就这些,其它的选项,各人根据自己的使用习惯调整就好。祝大家使用 Precise 和 IBus 愉快!