Ubuntu Diary : OXIM and im-switch

Intro

Linux 上的輸入模組也蠻多種的,像是 scim 、 gcin 等等,一開始我裝的是 scim ,不過有時候叫不出來。如果我在用 MSN 跟笨笨聊天的時候叫不出來,那可真是令人生氣。後來棄 scim 改投 gcin ,雖然沒什麼大問題,不過就是用不習慣。因為以往在 Windows 上用的輸入法是新酷音,而最近剛好發現還有另一個輸入模組 oxim 的存在, oxim 加上 libchewing 的長相真是像極了 Windows 上的新酷音,所以決定裝 oxim 來試試看。

在 Ubuntu 上裝 oxim 也不是那麼簡單,因為官方的 Repository 沒有 oxim 套件,雖然網路上有人有做好,但是不想加入來源不明的 Repository ,只好從原始碼編譯。只是從編譯到安裝使用出了一些小狀況,還好網路上找的到資料解決。以下就說明一下安裝 oxim 的步驟。

Install OXIM

  1. 首先到 OXIM 首頁下載原始碼,我自己是抓 cvs 版本的。
  2. cvs 版本沒有 configure 跟 Makefile.in ,而自動產生 configure 與 Makefile.in 是利用 autotools 來完成,所以要先有 autotools 。 Ubuntu 的話裝個 autobook 就會自動安裝 autoconf 跟 automake 等等套件。(其實我沒有裝 autobook ,我是看缺甚麼就裝甚麼,所以不確定只裝 autobook 夠不夠。)
    $ sudo apt-get install autobook

    oxim 作者很貼心地把產生的步驟寫成一個 script ,執行他一下 configure 跟 Makefile.in 就出來了。

    $ ./autogen.sh
  3. 接下來就跟一般編譯原始碼的動作一樣了,只是有些必要套件要安裝,像是 libqt3-headers 、 qt3-dev-tools 、 libchewing3-dev 等等族繁不及備載(其實是我裝好忘了)。而 configure 會找不到 qt3 ,得自己加上參數指定。
    $ ./configure --with-qt-dir=/usr/share/qt3

    如果跑出來的結果像這樣

    Build options:
    Version 1.1.3.90
    Install prefix /usr
    IM Module directory ${exec_prefix}/lib/oxim/immodules
    Module directory ${exec_prefix}/lib/oxim/modules
    Table directory ${exec_prefix}/lib/oxim/tables

    Input Method modules:
    Chewing yes
    Unicode yes

    Optional:
    GTK+ IM module yes
    QT IM module yes

    GUI Setup Tool yes

    恭喜你成功了,如果跑到一半跟你說找不到某個東西,或是有些功能你要但是 configure 的結果跟你說 no ,那就是缺了東西,看看缺了甚麼套件裝起來吧。

  4. configure 完之後就編譯跟安裝吧。
    $ make
    $ sudo make install

Config with im-switch

電腦上安裝了很多輸入模組,想切換時怎麼辦?用 im-switch 吧。首先把 im-switch 套件裝起來。

$ sudo apt-get install im-switch

使用 im-switch -s 可以設定要使用哪一個輸入模組,用 root 身份執行的話還可以改變整個系統的預設值。所以要用 oxim 的話,就執行下面指令。

$ im-switch -s oxim

如果要指定在哪個語系環境下使用哪一種輸入模組,可以加上 -z 參數,例如:

$ im-switch -z zh_TW -s oxim

這樣一來就會在使用者的 ~/.xinput.d 下建立 en_US 或 zh_TW 的連結指向 /etc/X11/xinit/xinput.d/oxim 設定檔。在 /etc/X11/xinit/xinput.d 目錄下會有各輸入模組的設定檔,連結到哪個檔案的話就會用該輸入模組。

不幸的是,光這樣是不足的,重新登入 Gnome 之後可能會發現 oxim 沒跑出來,雖然 XMODIFIERS 等環境變數設定都有。上網找了一下沒找到相關資料,最後發現原來是 /etc/X11/xinit/xinput.d/oxim 設定檔的問題。看看 scim 與 gcin 的設定檔,發現他們的 XIM_PROGRAM 都是完整路徑,只有 oxim 不是,把這部份改成完整路徑 /usr/bin/oxim 就 OK 了。底下是我的 /etc/X11/xinit/xinput.d/oxim 設定檔,注意一下 XIM_PROGRAM 那一行吧:

#!/bin/sh
#
# Open X Input Method startup script.
#
# By Firefly.
#

OXIM_IM_MODULE_DIR="/usr/lib/oxim/immodules"
XIM=oxim
XMODIFIERS="@im=${XIM}"
XIM_PROGRAM=/usr/bin/oxim
XIM_ARGS="-x oxim"

USR_DIR="$HOME/.oxim"
GTK_IM_MODULE_FILE="${USR_DIR}/gtk.immodules"

# 找出 gtk-query-immodules 指令的完整路徑與真正名稱
for cmd in gtk-query-immodules-2.0-64 \
gtk-query-immodules-2.0-32 \
gtk-query-immodules-2.0 \
gtk-query-immodules
do
TEST_CMD=`which ${cmd} 2>/dev/null`
if [ ! -z ${TEST_CMD} ]
then
GTK_QRY_CMD=${TEST_CMD}
break
fi
done

# 檢查 OXIM 的 GTK2 輸入模組是否安裝
if [ -f ${OXIM_IM_MODULE_DIR}/gtk-im-oxim.so ] ; then
# 檢查使用者家目錄之下是否有下列目錄
if [ ! -d ${USR_DIR} ] ; then
mkdir -p ${USR_DIR}
fi

# 建一個 gtk im modules 的紀錄檔
if [ ! -z ${GTK_QRY_CMD} ] ; then
${GTK_QRY_CMD} > ${GTK_IM_MODULE_FILE}
else
# 否則只建立自己的 immodule 紀錄
echo "\"${OXIM_IM_MODULE_DIR}/gtk-im-oxim.so\"" > ${GTK_IM_MODULE_FILE}
echo "\"oxim\" \"Open X Input Method\" \"gtk20\" \"/usr/share/locale\" \"*\"" >> ${GTK_IM_MODULE_FILE}
fi
GTK_IM_MODULE=oxim
export GTK_IM_MODULE_FILE
else
GTK_IM_MODULE=xim
fi

# 檢查 OXIM 的 QT 輸入模組是否安裝
if [ -f ${OXIM_IM_MODULE_DIR}/qt-im-oxim.so ] ; then
export QT_IM_MODULE=oxim
fi

改成這樣之後重新登出再登入應該就可以看到 oxim 了。

Troubleshooting

Q: 你騙人!我執行 im-switch -s oxim 的時候明明就出現下面這個錯誤訊息。

update-alternatives: Cannot find alternative `/etc/X11/xinit/xinput.d/oxim'.

A: 這是因為你用 root 身份執行的關係,當你用一般使用者身份執行的話, im-switch 會在 ~/.xinput.d 建立設定檔連結,不會有甚麼大問題,除非你執行的指令是 im-switch -s zechs 之類的。當你用 root 身份執行的時候,連結會建立在 /etc/alternatives ,這時候問題就出現了,因為系統不認為 oxim 屬於一個 alternative 。

怎麼知道 oxim 是不是一個 alternative ?先執行下面這個指令:

$ im-switch -l

他會列出所有可以用的輸入模組,如果沒有看到

oxim - priority 0

這一行的話( priority 後面的數字不見得是 0 ),就表示 oxim 還沒被加到 alternatives 裡面(雖然說有的話也不見得每個語系都有,目前我也不知道該怎麼查)。

要解決這個問題也很簡單,加進去就好了。例如我使用的語系是 en_US ,就下這個指令:

$ sudo update-alternatives --install /etc/X11/xinit/xinput.d/all_ALL xinput-all_ALL /etc/X11/xinit/xinput.d/oxim 0

繁體中文語系的話改成 zh_TW 就可以了。

$ sudo update-alternatives --install /etc/X11/xinit/xinput.d/zh_TW xinput-zh_TW /etc/X11/xinit/xinput.d/oxim 0

想知道參數的意義? man 一下吧。

$ man update-alternatives

加進去之後再用 root 身份執行 im-switch -s oxim ,這時應該就不會再跟你抱怨了。

想從 alternatives 中移除 oxim 的話就用下面指令:

$ sudo update-alternatives --remove xinput-all_ALL /etc/X11/xinit/xinput.d/oxim

References

0 意見: