中文輸入除錯

  1. gtk-3.0 的輸入法 module cache 檔 immodules.cache 不存在,這個檔由執行 gtk-query-immodules-3.0-64 產生,必須安裝 gtk3 才有。
    [dywang@dywmsi ~]$ GTK_IM_MODULE=gcin strace firefox68 -P ff68 2>&1 | grep immodules
    open("/usr/lib64/firefox/bundled/lib64/gtk-3.0/3.0.0/immodules.cache", O_RDONLY)
     = -1 ENOENT (No such file or directory)
    
  2. RHEL/CentOS 6 使用 gtk2,只有 gtk-query-immodules-2.0-64,用這個檔產生 immodules.cache。
    [root@dywmsi ~]# cd /usr/lib64/firefox/bundled/lib64/gtk-3.0/3.0.0/
    [root@dywmsi 3.0.0]# gtk-query-immodules-2.0-64 | tee immodules.cache 
    # GTK+ Input Method Modules file
    # Automatically generated file, do not edit
    # Created by gtk-query-immodules-2.0-64 from gtk+-2.24.23
    #
    # ModulesPath = /root/.gtk-2.0/2.10.0/x86_64-redhat-linux-gnu/immodules:
    /root/.gtk-2.0/2.10.0/immodules:/root/.gtk-2.0/x86_64-redhat-linux-gnu/immodules:
    /root/.gtk-2.0/immodules:/usr/lib64/gtk-2.0/2.10.0/x86_64-redhat-linux-gnu/immodules:
    /usr/lib64/gtk-2.0/2.10.0/immodules:/usr/lib64/gtk-2.0/x86_64-redhat-linux-gnu/immodules:
    /usr/lib64/gtk-2.0/immodules
    #
    "/usr/lib64/gtk-2.0/2.10.0/immodules/im-xim.so" 
    "xim" "X Input Method" "gtk20" "/usr/share/locale" "ko:ja:th:zh" 
    
    "/usr/lib64/gtk-2.0/immodules/im-gcin.so" 
    "gcin" "gcin Input Method" "gcin" "/usr/share/locale" "zh:ja"
    
  3. 再執行 firefox,已可讀取輸入法模組函式 im-gcin.so,但 firefox Segmentation fault (core dumped) 無法正常運作。
    [dywang@dywmsi ~]$ GTK_IM_MODULE=gcin strace firefox68 -P ff68 2>&1 | grep immodules
    open("/usr/lib64/firefox/bundled/lib64/gtk-3.0/3.0.0/immodules.cache", O_RDONLY) = 60
    stat("/usr/lib64/gtk-2.0/immodules/im-gcin.so", {st_mode=S_IFREG|0755, st_size=13672, ...}) = 0
    open("/usr/lib64/gtk-2.0/immodules/im-gcin.so", O_RDONLY|O_CLOEXEC) = 60
    
  4. firefox 68 預設使用 gtk3,必須有 gtk3 的 im-gcin.so 才能運作。找到 Megeia 2 有 gcin-gtk3-2.7.5-2.mga2.x86_64.rpm,不管相依套件強制安裝。
    [root@dywmsi 3.0.0]# rpm -ivh --nodeps ftp://ftp.pbone.net/mirror/\
    distrib-coffee.ipsl.jussieu.fr/mageia/distrib/2/x86_64/media/core/\
    release/gcin-gtk3-2.7.5-2.mga2.x86_64.rpm
    
  5. gcin-gtk3 只有 im-gcin.so 一個檔案。
    [root@dywmsi 3.0.0]# rpm -ql gcin-gtk3
    /usr/lib64/gtk-3.0/immodules/im-gcin.so
    
  6. 修改 immodules.cache,將 im-gcin.so 位置改到 gcin-gtk3 安裝的檔案。
    [root@dywmsi 3.0.0]# vim immodules.cache 
    [root@dywmsi 3.0.0]# grep 3.0 immodules.cache
    "/usr/lib64/gtk-3.0/immodules/im-gcin.so"
    
  7. 再執行 firefox 68,一切正常,不但中文輸入沒問題,而且之前直接安裝 firefox-68 rpm 時,可以輸入中文,但選字字框一直固定在左上角的問題也解決了。
    [dywang@dywmsi ~]$ GTK_IM_MODULE=gcin strace firefox68 -P ff68 2>&1 | grep immodules
    open("/usr/lib64/firefox/bundled/lib64/gtk-3.0/3.0.0/immodules.cache", O_RDONLY) = 57
    stat("/usr/lib64/gtk-3.0/immodules/im-gcin.so", {st_mode=S_IFREG|0755, st_size=14688, ...}) = 0
    open("/usr/lib64/gtk-3.0/immodules/im-gcin.so", O_RDONLY|O_CLOEXEC) = 57