[基礎] 當 im-switch 錯亂時…

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

[基礎] 當 im-switch 錯亂時…

文章訪客 » 週一 1月 29, 2007 11:44 pm

im-switch 實在是好物,不過某些時候還是會遇到問題…

以下就是不用 im-switch 的基本功…

在 terminal emulator 裡面:

1. 沒事不要用 LC_ALL
代碼: 選擇全部
unset LC_ALL

用 LANG 才是好習慣,LC_ALL 平常不要用

2. 基礎環境配置
代碼: 選擇全部
export LC_CTYPE=zh_TW.UTF-8
export XMODIFIERS=@im=gcin
export GTK_IM_MODULE=gcin
export QT_IM_MODULE=xim

gcin 1.3.1 以前版本判定 locale 有 bug,請務必 export LC_CTYPE
gcin 1.3.2 已修複此 bug。
(gcin 1.3.3 已進入 Debian experimental,歡迎下載使用)

如果有安裝 gcin-qt3-immodule,可設為
代碼: 選擇全部
export QT_IM_MODULE=gcin

如果用 scim
代碼: 選擇全部
export LC_CTYPE=zh_TW.UTF-8
export XMODIFIERS=@im=SCIM
export GTK_IM_MODULE=xim
export QT_IM_MODULE=xim

沒事別讓 scim 使用 immodule,除非你用 scim-bridge,那可設定
代碼: 選擇全部
export GTK_IM_MODULE=scim-bridge
export QT_IM_MODULE=scim-bridge

注意,舊版的 scim-bridge 不支援 QT immodule

3. 把常見的 inputmethod server 全幹掉
代碼: 選擇全部
pkill -9 SCIM
pkill -9 gcin
pkill -9 fcitx
pkill -9 xcin
pkill -9 oxim

執行這動作前最好先關閉所有 GTK2 / QT 軟體,以免某些 inputmethod server 自動啟用

4. 執行 inputmethod server
代碼: 選擇全部
gcin &

或是
代碼: 選擇全部
scim -d


5. 以上步驟完成後,從 terminal emulator 呼叫的軟體都能順利使用輸入法了。確認沒問題後可以把上面設定寫入 ~/.xinitrc 或 ~/.xsession
範例如下:
~/.xinitrc 或 ~/.xsession
代碼: 選擇全部
export LC_CTYPE=zh_TW.UTF-8
export XMODIFIERS=@im=gcin
export GTK_IM_MODULE=gcin
export QT_IM_MODULE=xim
gcin &
exec x-desktop-manager

這樣以後進入 X 就會啟用輸入法,也不需要安裝 im-switch 了。
訪客
 

Re: [基礎] 當 im-switch 錯亂時…

文章訪客 » 週一 1月 29, 2007 11:48 pm

Anonymous 寫:pkill -9 SCIM

pkill -9 scim 才對...orz
scim 要小寫...不過 scim 預設的 XIM name 是大寫
訪客
 

文章Lost-Angel » 週二 1月 30, 2007 4:34 pm

非常感謝前輩熱心說明,但是似乎仍有許多的疑點前輩尚未講清楚,小生在此發問希望前輩再度指點:


一、可否詳細說明一下當使用 im-switch 的時候,他實際上是對系統做了哪些動作啊。因為像小生目前的系統被 im-switch 給弄亂了,即使已經把他 purge 掉還是一樣無法恢復原狀了,似乎唯有知道他當時是做了哪些動作才有辦法還原。


二、可否說明一下為什麼使用 LC_ALL 不好呢,可否煩請舉個實際可能發生的情況來說明一下呢???


三、小生原先遇到的問題如下:
viewtopic.php?t=11324
但是後來因為發現他似乎和 locale 有點關聯,因此把之前用來安裝設定 Input Method 的套件 "m17n-env" 給整個 purge 掉之後,發現執行 im-switch -s gcin 之後不會再有原先的錯誤訊息出現,只會出現說以 gcin 取代了 xinput-all_ALL 的訊息。但是現在系統卻變成如下描述般詭異:
************** 【狀況描述 】**************
●情況一、沒有設定 LC_ALL 只有在 /etc/environment 裏面寫 LANG=zh_TW.UTF-8 :
則系統以我常用的一個 normal user 登入後其 locale 還是 en_US.UTF-8。若將這個 export LANG 敘述寫在 ~/.xinitrc 裏面也是會有一樣的結果,而此時儘管小生有在 ~/.xinitrc 裏面把 GTK_IM_MODULE、XMODIFIERS 等變數 export 成 gcin,他們的值在登入後以 printenv 指令觀察發現似乎都仍然一直是 scim 改不過來。而且,此時進入 X 以後系統會變得異常的遲緩(一直 lag),觀察行程發現 scim 啟動了而 gcin 並沒有,但是 system tray 有出現 scim 的圖示,只是對於滑鼠以及鍵盤操控都無反應完全無法使用,除了 scim 以外其他程式都正常只是很 lag 而已。這個時候若將 scim 的行程全部 kill 掉的話 gcin 就馬上自動的啟動並可以正常使用(沒有下啟動 gcin 的指令),而且系統也馬上恢復正常不會 lag 了。

●情況二、在 /etc/environment 裏面寫入 LC_ALL=zh_TW.UTF-8 :
此時進入系統後終於發現 locale 變成小生想要的 zh_TW.UTF-8 了。然而,輸入法卻變成 scim 而不是小生想要用的 gcin。雖然說這個時候的 scim 可以完全正常運作使用系統也不會 lag 了。然而,此時若使用 printenv 觀測會發現,GTK_IM_MODULE、XMODIFIERS 的值依然還是 scim 而不是小生在 ~/.xinitrc 裏面 export 的值(gcin)。觀察行程也會發現,目前也只有 scim 啟動,沒有其他任何 Input Method 的蹤影,因此若手動把 scim 的行程 kill 掉並手動啟動 gcin 的話,仍然能夠正常的換成 gcin 來使用。

●情況三、把 im-switch 給 purge 掉:
則此時系統的症狀還是和上面情況一、情況二所描述一樣完全沒有影響。
****************************************************

因此,整體觀察發現好像系統中仍然有某個程式或某個 script 會去改動輸入法以及 locale 環境變數的值,但是完全搞不懂到底要如何找出問題根源來加以修正,小生的目的只是想要能讓系統在以 GDM 啟動後,其 locale 是 zh_TW.UTF-8 並且有正常的 gcin 可以使用,而不用在去手動 kill 掉某個 process 或啟動某個 process。在此盼請前輩能指點一下不才的小生,非常的感謝!!!
The most beautiful thing we can experience is mysterious.
It is the source of all true art and science.

--- Albert Einstein, 1930
頭像
Lost-Angel
活潑的高中生
活潑的高中生
 
文章: 265
註冊時間: 週二 1月 25, 2005 1:29 am
來自: 臺灣民國高雄縣

文章訪客 » 週二 1月 30, 2007 7:09 pm

Lost-Angel 寫:一、可否詳細說明一下當使用 im-switch 的時候,他實際上是對系統做了哪些動作啊。

im-switch 只是用 alternative system 將 /etc/alternatives/xinput-* 或 ~/.xinput.d 裡的檔案指向 /etc/X11/xinit/xinput.d/ 裡某個輸入法設定檔。
遇到問題時通常把 ~/.xinput.d 幹掉就行了,但你的系統似乎被做過奇怪的改動,不像是 im-switch 搞爛的。

你曾經執行過 /usr/share/gcin/script/modify-XIM,不過那個 script 對 Debian 無效,所以應該也不是它害的

Lost-Angel 寫:可否說明一下為什麼使用 LC_ALL 不好呢

如果系統預設了 LC_ALL,user 手動設定的 LC_* LANG 都會無效。
除此之外倒是沒啥不好。

Lost-Angel 寫:若將這個 export LANG 敘述寫在 ~/.xinitrc 裏面也是會有一樣的結果,

使用 Desktop Manager (GDM、KDM、XDM...etc),要寫入 ~/.xsession 才行,只寫入 ~/.xinitrc 無效。
~/.xinitrc 是給 startx 用的。

你的系統其它怪現像,建議
1. 用 tiger 之類工具找出「不是由 deb 安裝」的檔案,清掉。
2. 檢查是否 /etc/* 或哪些地方設定了 locale 和輸入法相關變數,清掉。
訪客
 

文章Lost-Angel » 週三 1月 31, 2007 10:09 pm

非常感謝前輩指點,小生搞到最後發現實在是越弄越糟,所以選擇前輩們常講的一句話-- 砍掉重練... >_<。小生把 im-switch、scim、gcin、m17n-env 全部都 purge 掉再以 APT 重新安裝 gcin 以及 im-switch 輸入法部份似乎完全正常了~~~ @_@。
只是關於 locale 的部份還是找不出到底是哪一個 script 在系統啟動過程中偷偷的去改變了系統 /etc/environment 中 LANG 的設定值,以導致於若不在 /etc/environment 中設定 LC_ALL 的話,啟動後 locale 都一直會變成 en_US 而不是我想要的 zh_TW,關於這部份不知前輩有無什麼較好的方法可以快速找出系統啟動過程中,有 export LANG 的 script 之所在位置??? 期盼前輩再度指點~~~ ^_^|||
The most beautiful thing we can experience is mysterious.
It is the source of all true art and science.

--- Albert Einstein, 1930
頭像
Lost-Angel
活潑的高中生
活潑的高中生
 
文章: 265
註冊時間: 週二 1月 25, 2005 1:29 am
來自: 臺灣民國高雄縣

文章訪客 » 週三 1月 31, 2007 10:20 pm

試試檢查 /etc/default/locale
或是用 root 執行 dpkg-reconfigure locales

都不行就用 find / grep 慢慢找吧…orz
訪客
 


回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客