• 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

    当中比较有意思的几个点如下:

    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的问题;

    希望对看到这篇文章的人有用。

  • 相关阅读:
    【HDU
    【HDU
    【AtCoder
    【POJ
    Apache、Nginx、IIS日志记录分析&详解
    在Windows Server 2008 R2上安装IIS
    SQL 注入漏洞研究
    利用Nginx实现反向代理web服务器(Linux+Nginx+Mysql+PHP)
    CentOS 7 LAMP搭建并且部署sqli-labs
    Kali 下配置Nessus-2020年3月新版
  • 原文地址:https://www.cnblogs.com/ZisZ/p/8833038.html
Copyright © 2020-2023  润新知