1. 程式人生 > >CentOS7解決firefox無法啟用ibus中文輸入的問題

CentOS7解決firefox無法啟用ibus中文輸入的問題

可能 重啟 IE ali AS rtu 進入 後繼 無效

最近換電腦,要換掉使用了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

當中比較有意思的幾個點如下:

  1. 如果你在輸入中文時遇到問題,檢查你的 locale 設置。比如在香港,export LANG=zh_HK.utf8
  2. 如果 IBus 確實已經啟動,但是在 LibreOffice 裏沒有出現輸入窗口,你需要在 ~/.bashrc 裏加入這行:

    export XMODIFIERS=@im=ibus
    

    然後你需要用 "--xim -d" 參數來啟動 ibus, 你可以在 ~/.xinitrc 中加入這行:

    ibus-daemon --xim -d
    

    但是可怕的是你必須在終端中啟動 LibreOffice。

  3. 如需 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_MODULEQT_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-simplexim

於是,最後我在~/.bashrc中加了一條環境變量export LC_CTYPE=zh_CN.UTF-8,這樣即不會把gnome的菜單改成中文菜單,又可以解決xinput.sh腳本對語言環境的檢查,解決了firefox啟用ibus的問題;

希望對看到這篇文章的人有用。

CentOS7解決firefox無法啟用ibus中文輸入的問題