QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1547|回复: 6

功成之后的贡献-Xserver启动过程解析

[复制链接]
发表于 2005-5-2 15:06:02 | 显示全部楼层 |阅读模式
半年前跳槽,然后就一直在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程序.

好了,真累,有时间再补充!
发表于 2005-5-2 18:06:28 | 显示全部楼层
请教一个问题
用xinit启动的x同用startx启动的x有什么不同
回复

使用道具 举报

发表于 2005-5-2 18:22:47 | 显示全部楼层
export GTK_IM_MODULE=xim
回复

使用道具 举报

 楼主| 发表于 2005-5-2 23:48:55 | 显示全部楼层
[quote:0aab1b9500="duotaiya"]请教一个问题
用xinit启动的x同用startx启动的x有什么不同[/quote]

整个图形界面的启动是由startx这个脚步进行的,而xinitrc这个教本只是其中的一步而已。
回复

使用道具 举报

发表于 2005-5-3 00:11:15 | 显示全部楼层
startx应该是还启动了窗口管理器或桌面环境
回复

使用道具 举报

发表于 2005-5-3 13:11:27 | 显示全部楼层
[quote:e1bb79f872="cnhnln"]startx应该是还启动了窗口管理器或桌面环境[/quote]
窗口管理器或者桌面环境可以在.xinitrc这个配置文件里设定
用xinit命令就可以启动图形界面
我想知道startx是否还有其他的配置文件
回复

使用道具 举报

 楼主| 发表于 2005-5-4 13:45:12 | 显示全部楼层
你自己去看一下startx这个脚本就知道了,还有哪些需要运行的脚步
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-23 16:42 , Processed in 0.047780 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表