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中文输入的问题的更多相关文章
- 完美解决 Linux 下 Sublime Text 中文输入
首先,我参考了好几篇文章,都是蛮不错的,先列出来: sublime-text-imfix:首先推荐这个方法,最简单,但是在我的系统上有些问题.可用这个的强烈推荐用这个 完美解决 Linux 下 Sub ...
- 解决Sublime-Text-3在ubuntu下中文输入的问题
在ubuntu下使用ST这神器已经一段日子了,但是一直有个纠结的问题,就是中文输入非常坑爹,曾经一段时间,使用inputHelper这个插件来解决, 但是……每次都要按个快捷键,弹出一个小小小框来输入 ...
- 解决adb shell input text 中文输入,unicode转utf-8
https://github.com/senzhk/ADBKeyBoard 上面这个是外国人写的一个输入法,我们把它安装再设置下就ok了 直接下载bin下的ADBKeyBoard.apk文件,或者上面 ...
- 解决Ubuntu14.04下sublime无法输入中文
原帖地址: (简书作者) http://www.jianshu.com/p/bf05fb3a4709 前言 sublime很好用,但是ubuntu14.04 下不能输入中文,这是一个很大的问题.不知道 ...
- 解决Ubuntu下sublime中不能输入中文的问题
解决Ubuntu下sublime中不能输入中文的问题 Ubuntu下安装sublime后,不能输入中文,而在其他软件中能正常输入,这是sublime的bug,解决方案是在通过shell在每次运行sub ...
- 解决 Ubuntu 下 Sublime Text 无法输入中文的问题
解决 Ubuntu 下 Sublime Text 无法输入中文的问题 1. 安装依赖库 sudo apt-get install build-essential sudo apt-get instal ...
- 《转载》ubuntu Sublime text 3 解决中文输入问题
其实,在这个文章之前,网上都有好多教程了.不知道是不是因为复制黏贴的传播太多,导致有些字符串的丢失,导致编译失败,so库文件无法载入,从而不能输入中文.折腾了许久之后,终于搞定了.记录下来,方便自己下 ...
- [转]NME Android目标中文输入问题完美解决!
最近研究了一下haxe,发现蛮牛逼的,转几篇知识帖 haXe开发笔记:中文问题的小结 * .hx源文件中如果包含中文,要保存成UTF-8编码才能够正确被haXe编译器解析,是否包含BOM(Byte O ...
- 应用程序启动器 “sublime_text.desktop“ 还没有被标记为 信任。如果您不知道这个文件的来源,那么启动它可能会不安全。解决sublime在ubuntu中不支持中文输入问题。
1.下载 git clone https://github.com/lyfeyaj/sublime-text-imfix.git 2.进行一些处理 cd ~/sublime-text-imfix su ...
随机推荐
- J2SE-程序执行与内存图
全局程序运行内存图 基础数据类型:byte,short,int,long(整数) float,double(浮点) -- 数值 char ...
- codechef Killing Monsters
题目大意:大厨正在玩一个打怪兽的小游戏.游戏中初始时有 n 只怪兽排成一排,从左到右编号为 0 ∼ n − 1.第 i 只怪兽的初始血量为 hi,当怪兽的血量小于等于 0 时,这只怪兽就挂了. 大厨要 ...
- 【转】UNREFERENCED_PARAMETER的作用
UNREFERENCED_PARAMETER 的作用我们从 UNREFERENCED_PARAMETER 开始吧.这个宏在 winnt.h 中定义如下: #define UNREFERENCED_PA ...
- ssh运行环境搭建及测试
一.运行环境 1.Spring环境 Spring是一站式开发框架,在SSH中主要有以下作用,就像一个大管家: 控制反转(Inversion of Control):类不再自己进行类创建,而是交给Spr ...
- SOFA 源码分析 — 连接管理器
前言 RPC 框架需要维护客户端和服务端的连接,通常是一个客户端对应多个服务端,而客户端看到的是接口,并不是服务端的地址,服务端地址对于客户端来讲是透明的. 那么,如何实现这样一个 RPC 框架的网络 ...
- SOFA 源码分析 —— 服务发布过程
前言 SOFA 包含了 RPC 框架,底层通信框架是 bolt ,基于 Netty 4,今天将通过 SOFA-RPC 源码中的例子,看看他是如何发布一个服务的. 示例代码 下面的代码在 com.ali ...
- 2018 CISCN reverse wp
2018 CISCN reverse wp 这题比赛的时候没做出来,主要是心态崩了看不下去..赛后看了下网上的wp发现不难,是自己想复杂了.这里将我的思路和exp放出来,希望大家一起交流学习. mai ...
- STL-Deque 源码剖析
G++ ,cygnus\cygwin-b20\include\g++\stl_deque.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Comp ...
- 为什么「margin:auto」可以让块级元素水平居中?
知乎链接:http://www.zhihu.com/question/21644198 关于BFC的解释:W3CFans http://www.w3cfuns.com/thread-5595727-1 ...
- 正则表达式re模块小结
re模块的常用方法 1.compile(pattern[,flags]) 创建模式对象,一般配合其他方法使用.例如: import re #导入re模块 text = 'All that doth f ...