2014年10月31日 星期五

iBus abnormal on CentOS 6.6 with multiple python installed

CentOS 在升上 6.6 後,iBus 就不會顯示以 ibus-table 為框架的輸入法,但是翻了一下有升級的 package 裡面,好像也沒幾樣和 ibus 有關係,但因為我在系統上裝了三套 python (2.6, 2.7, 3.4),所以就往這個方向去找問題。

安裝 python 時,如果是用
# make altinstall
,則系統上還是用原本的 python (/usr/bin/python),但如果是用
# make install
,那系統則會用 /usr/local/bin/python。

如果是使用後者安裝 python,則需要修改以下的檔案,將檔案中有 python 的部份,通通都改成 /usr/bin/python。

--- ibus-ui-gtk.bak    2014-10-31 11:12:04.303881035 +0800
+++ ibus-ui-gtk    2014-10-29 17:13:35.170125162 +0800

@@ -27,5 +27,6 @@
 export IBUS_DATAROOTDIR=${prefix}/share
 export IBUS_LOCALEDIR=${datarootdir}/locale


-exec python /usr/share/ibus/ui/gtk/main.py $@
+#exec python /usr/share/ibus/ui/gtk/main.py $@
+exec /usr/bin/python /usr/share/ibus/ui/gtk/main.py $@


--- ibus-engine-table.bak    2014-10-31 11:13:40.392880798 +0800
+++ ibus-engine-table    2014-10-31 11:02:47.039882425 +0800

@@ -28,15 +28,18 @@
 for arg in $@; do
     case $arg in
     --xml | -x)

-        exec python ${prefix}/share/ibus-table/engine/main.py --xml;;
+#        exec python ${prefix}/share/ibus-table/engine/main.py --xml;;
+        exec /usr/bin/python ${prefix}/share/ibus-table/engine/main.py --xml;;

     --help | -h)
-        exec python ${prefix}/share/ibus-table/engine/main.py $@;;
+#        exec python ${prefix}/share/ibus-table/engine/main.py $@;;
+        exec /usr/bin/python ${prefix}/share/ibus-table/engine/main.py $@;;

   *)
     # first running speedmeter as a daemon
     #python ${prefix}/share/ibus-table/engine/speedmeter.py -d > /dev/null

     # then start our IME

-    exec python ${prefix}/share/ibus-table/engine/main.py $@
+#    exec python ${prefix}/share/ibus-table/engine/main.py $@
+    exec /usr/bin/python ${prefix}/share/ibus-table/engine/main.py $@

     exit 0
     esac
 done


奇怪的是,在還沒升上 CentOS 6.6 之前,我只有修改 ibus-ui-gtk,那時候嘸蝦米還用得好好的,但一升上 CentOS 6.6 後就無法使用了,必需修改 ibus-engine-table,且清掉原本的設定檔和 cache 後,再重新啟動 ibus-daemon,然後才能在 ibus-setup 裡看到那些使用 ibus-table 的輸入法。目前能猜到的原因大概就是升上 CentOS 6.6 時,iBus 的設定和 cache 都被清了,然後執行 ibus-engine-table 時就爆了,導致使用 ibus-table 的輸入法都沒辦法被 ibus 抓到。

$ rm -rf .ibus .config/ibus .cache/ibus
$ ibus-daemon -drx