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啟動后觸發,于是中文輸入法就出現了~
|