CentOS7解決firefox無法啟用ibus中文輸入的問題
最近換電腦,要換掉使用了6年的舊環境,開始折騰重裝系統;
下了minimal版本的CentOS7.4,然後開始一點點裝想用的東西,多少找到一點十年前折騰LFS的感覺;然後竟然被輸入法拌住了半天,事後回想整個解決流程,覺得有必要記下來;
在gnome上安裝、設置中文輸入法,按標準的教程點一點菜單就可以了,然後也確實在界面上看到了輸入法的存在,也可以切換輸入法,但是gnome-terminal和firefox都無效,任輸入法怎麽切換,輸入的內容只是純字符;
然後像小白一樣開始查資料,過程中繞過彎路,如果想知道最終結果,請直接跳到結論部分;
第一篇比較有用的資料是這個:在ArchLinux KDE 4.14桌面環境中正常使用ibus輸入法
按其方法,做以下操作:
1,在/etc/profile添加以下文字
export GTK_IM_MODULE=ibus export XMODIFIERS=@im=ibus export QT_IM_MODULE=ibus
2,在~/.config/autostart文件夾裏建立一個ibus.desktop文件,內容如下。
[Desktop Entry] Exec=ibus-daemon -xdr GenericName=IBus Name[zh_CN]=IBus Name=IBus Name[en_US]=IBus Path= StartupNotify=true Terminal=false TerminalOptions= Type=Application X-DBUS-ServiceName= X-DBUS-StartupType= X-KDE-SubstituteUID=false X-KDE-Username=
最後chmod 755 ibus.desktop,重新啟動gnome
再次進入gnome的時候,發現gnome-terminal已經可以輸入中文了,很好;
然而打開firefox,無效果,依然調不出輸入法;
之後繼續查資料,第二篇較有用的資料是這個:ArchWiki_IBus
當中比較有意思的幾個點如下:
- 如果你在輸入中文時遇到問題,檢查你的 locale 設置。比如在香港,export LANG=zh_HK.utf8
-
如果 IBus 確實已經啟動,但是在 LibreOffice 裏沒有出現輸入窗口,你需要在 ~/.bashrc 裏加入這行:
export XMODIFIERS=@im=ibus
然後你需要用 "--xim -d" 參數來啟動 ibus, 你可以在 ~/.xinitrc 中加入這行:
ibus-daemon --xim -d
但是可怕的是你必須在終端中啟動 LibreOffice。
-
如需 ibus 隨 gnome 啟動,把這些加入
~/.profile
後重啟 gnome。export GTK_IM_MODULE=ibus export XMODIFIERS=@im=ibus export QT_IM_MODULE=ibus ibus-daemon -d -x
針對第一個點,設置LANG為中文環境,我做了以下嘗試,比如:
- 使用LANG=zh_CN.UTF-8 firefox的方法啟動firefox,無效;
- 在~/.bashrc中設置LANG=zh_CN.UTF-8,重啟gnome,gnome的菜單變成了中文,但firefox依然無法輸入中文,無效,我又給改回去了;
所以我認定firefox無法調出ibus輸入中文的問題,與LANG環境變量無關,所以以至於當我看到一篇11年的文章,說他在Ubuntu上遇到了firefox無法使用ibus的問題,最後把語言環境從英文切換到中文得到了解決,我直接的想法就是這是扯淡,11年太久遠了,這個說法沒有任何參考價值;
針對第二個點,我試下來之後,startx會失敗,所以也無效;
針對第三個點,我仔細一看,原來資料1就是參考了這裏的做法,但是資料1的做法更好,所以也就不需要試了;
再次繼續查資料,然後找到了第三篇比較有價值的資料:firefox下無法使用ibus
這篇文章很短,做法也不漂亮,但是一針見血,他在firefox的啟動腳本裏加了兩個環境變量:
XMODIFIERS=@im=IBUS
GTK_IM_MODULE=IBUS
export XMODIFIERS GTK_IM_MODULE
這兩個變量在/etc/profile裏都已經設過了啊(見資料一),然後我趕緊看gnome-terminal的環境變量
$ echo $XMODIFIERS
@im=IBUS
$ echo $GTK_IM_MODULE
gtk-im-context-simple
$ echo $QT_IM_MODULE
xim
試一下強制設定啟動firefox:
$ GTK_IM_MODULE=IBUS firefox
firefox可以輸入中文了,果然在gnome環境下,gtk程序調用輸入法是要看GTK_IM_MODULE變量的;
然後回到終端模式,查了一下這三個環境變量,都是ibus,說明/etc/profile肯定是生效了;
接下來的問題就是,這個變量怎麽進gnome以後就變了呢?肯定是X初始化過程中對它進行了修改;
於是以gtk-im-context-simple為關鍵字,對/etc做了一遍grep;
==============以下是結論================
X11在初始化過程中,需要對輸入法做一定的設定,其執行腳本在CentOS7.4中位於這個位置:
/etc/X11/xinit/xinitrc.d/50-xinput.sh
這個腳本可能讀取多個配置文件,從而最終決定GTK_IM_MODULE和QT_IM_MODULE變量的值,而不是沿用啟動X時已有的值(這就是坑啊);
配置文件的優先權順序為:
1. 用戶的設定為最高順位,如果有,文件位於~/.config/imsettings;
2. 系統設定為次高級順位,文件位於/etc/X11/xinit/xinputrc,它事實上是一個軟鏈,鏈接到了/etc/X11/xinit/xinput.d/ibus.conf,沒錯,這個文件設定了正確的ibus輸入法;
但是(最討厭的但是),它有個前置條件,需要檢查系統的語言環境是否是非英文環境,即如果是英文環境,它會繼續從後面的順位找配置文件;
這也解釋了為什麽會有人(資料二)通過修改系統語言解決這個問題,但這裏並不是直接檢查LANG變量,而是先檢查LC_CTYPE,然後才檢查LANG;
3. xxxx,略去不寫,有興趣的自己讀一下這個腳本;
4. 最後,讀一個默認的配置文件,位於/etc/X11/xinit/xinput.d//none.conf
就是這個none.conf中,把GTK_IM_MODULE和QT_IM_MODULE變量的值給改成了gtk-im-context-simple與xim。
於是,最後我在~/.bashrc中加了一條環境變量export LC_CTYPE=zh_CN.UTF-8,這樣即不會把gnome的菜單改成中文菜單,又可以解決xinput.sh腳本對語言環境的檢查,解決了firefox啟用ibus的問題;
希望對看到這篇文章的人有用。
CentOS7解決firefox無法啟用ibus中文輸入的問題