|
半年前跳槽,然后就一直在Linux下工作,由于才开始使用Linux,所以遇到问题就会在google和各大网站上搜索解决方法,在这期间遇到了许许多多很好的文章,也遇到了很多高手,所以一直以来也好想给大家拿些东西回报这个社区,今天累了,所以就稍微写点东西给大家,以免有人还走我走过的弯路。
省略了很多不必要的细节,所以看的时候可能会和其他文章有不太一样的地方;也希望大家指出我对该过程理解有误的地方。
——Xserver启动过程(主要讲解在SUSE-KDE下,输入法的选择过程)
1.startx:启动XSERVER和Xclient
2.startx:运行xinitrc(如果在用户目录下有.xinitrc则运行之,否则运行位于/etc/X11/xinit/xinitrc)
在其中你可以看见
# Start the XIM server
XIMFILE=/etc/X11/xim
test -r $HOME/.xim && XIMFILE=$HOME/.xim
test -r $XIMFILE && source $XIMFILE
这里是执行输入法的选择脚本,脚本叫做xim(如果在用户目录下有.xim则执行它,否则执行/etc/X11/xim);
在xim中是这样执行选择过程的
if [ "$INPUT_METHOD" == "" ] ; then
source /etc/sysconfig/language
fi
if [ "$INPUT_METHOD" != "" ]; then
echo "INPUT_METHOD is set to $INPUT_METHOD."
echo "Trying to start this user selected input method first ..."
if [ -r "/etc/X11/xim.d/$INPUT_METHOD" ] ; then
echo "sourcing /etc/X11/xim.d/$INPUT_METHOD"
source /etc/X11/xim.d/$INPUT_METHOD
if [ "$?" == "0" ]; then
echo "Start of $INPUT_METHOD succeeded."
return 0;
else
echo "Start of $INPUT_METHOD failed."
fi
else
echo "/etc/X11/xim.d/$INPUT_METHOD does not exist."
fi
else
echo "INPUT_METHOD is not set or empty (no user selected input method)."
fi
首先查看INPUT_METHOD变量是否被设置(这个变量的设置可以在.bashrc或.bash_profile执行),如果该变量为空则执行source /etc/sysconfig/language,该脚本选择一个系统目前使用的语言,并设置基本的语言变量(如INSTALLED_LANGUAGES,ROOT_USES_LANG,RC_LC_PAPER),这些我们不需要理,只要设置了LC_CTYPE="zh_CN.gbk"和LC_ALL=zh_CN.gbk(在.bashrc或.bash_profile设置)就可以了,并且这个脚本中source /etc/X11/xim.d/$INPUT_METHOD还可以设置系统级的INPUT_METHOD,我们不在这里设置,而改在.bashrc或.bash_profile中设置,因为许多情况下我们是不可以编辑该文件的。
如果INPUT_METHOD被设置了,就去执/etc/X11/xim.d/$INPUT_METHOD脚本,该脚本就是启动相关输入法,并设置相关变量。
比如我在.bash_profile设置export INPUT_METHOD=fcitx,就去执行/etc/X11/xim.d/fcitx,但是该目录下并没有fcitx 脚本,因为fcitx安装时并不生成该文件(o,how should I do?),莫急,简单,拷贝该目录下的一个脚本文件并命名为fcitx(比如cp scim fcitx),然后修改该脚本,我的脚本如下:
OLD_PATH=$PATH
PATH=/usr/bin:$PATH
if ! type -p fcitx > /dev/null 2>&1 ; then
echo "fcitx is not available."
return 1
fi
export XMODIFIERS="@im=fcitx"
#export GTK_IM_MODULE=fcitx
#export QT_IM_SWITCHER=imsw-multi
#export QT_IM_MODULE=fcitx
export XIM=fcitx
export XIM_PROGRAM=fcitx
fcitx &
PATH=$OLD_PATH
# success:
return 0
好了,这样就OK了,restart Xserver,我们就可以使用fcitx输入法了。
其它的输入法也可以用同样的方法设置。
我把
#export GTK_IM_MODULE=fcitx
#export QT_IM_SWITCHER=imsw-multi
#export QT_IM_MODULE=fcitx
这三行注掉了,因为加上它们,fcitx不响应ctrl_space!
不知是怎么回事,希望有高手可以告诉我,我知道这三行是用于设置GTK,QT程序的输入法。
说明:
在linux下共存在三种图形界面框架——GTK,GTK2,QT,所以我们要分别为这三种应用程序设置输入法。KDE就是基于QT的一个XClient程序.
好了,真累,有时间再补充! |
|