gdm是打开并管理当前X session的程序,/etc/init.d/gdm脚本控制了gdm程序的运行以及一些参数的传递。而我们要用的输入法自然是在X session过程中运行的一个后台程序,所以不管是不是在英文界面,只要你能保证gdm启动后能触发输入法运行起来,问题就解决了。
中文界面默认就可以调用中文输入法是因为它对应的locale(我们假定是zh_CN.UTF-8)决定了gdm在启动的时候启动scim。很简单的对应关系,英文界面默认不能调用中文输入是因为英文locale默认不能触发scim的运行。我们要让输入法运行,只需要手动指定输入法在英文locale下也被触发就可以了。
gdm运行时会遍历/etc/X11/xinit/Xsession.d/目录下所有的脚本,所以如果我们只要放一个开启scim的脚本到Xsession.d目录下即可。im-switch程序干的就是这个事,大家可以读一读那个im-switch脚本,可以看到它遍历如下文件,有文件存在就会跳出循环:
$HOME/.xinput.d/${LNG}
$HOME/.xinput.d/all_ALL
/etc/X11/xinit/x.input.d/${LNG}
/etc/X11/xinit/xinput.d/all_ALL
/etc/X11/xinit/xinput.d/default
${LNG}字符串是系统locale的截断,英文系统中其值应该是en_US。这些文件设置了系统将要使用的输入法,默认情况下,英文界面运行的会是/etc/X11/xinit/xinput.d/all_ALL文件,而这文件里会什么也不设置,于是就没有输入法可以用喽!
为了让输入法运行,简单地链接/etc/X11/xinit/xinput.d/scim文件到$HOME/.xinput.d/en_US,scim文件的内容:
XIM=SCIM
XIM_PROGRAM=/usr/bin/scim
XIM_ARGS="-d"
XIM_PROGRAM_SETS_ITSELF_AS_DAEMON=yes
GTK_IM_MODULE=xim
QT_IM_MODULE=xim
DEPENDS="scim,scim-anthy|scim-canna|scim-chewing|scim-pinyin|scim-hangle|scim-prime|scim-skk|scim-tables-additional|scim-m17n|scim-uim|scim-tables-ja|scim-tables-ko|scim-tables-zh"
它指定了en_US locale时,scim仍在gdm启动后触发,于是中文输入法就出现了~ |