GDM图形界面登录整体流程分析

在我们的 /etc/inittab 的最后一行是

# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon


这个 prefdm 是什么呢?从文件名我们可以看出是 “Preferred Display Manager” 的缩写。

前面的 Preferred 是什么意思呢?就是“被选择/喜欢的”的意思。那如何体现这个选择的功能呢?

下面就让我们来分析这个 shell script (没错,它是一个脚本)

[code]
#!/bin/sh

PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin # 注释 :设置 PATH 变量

# shut down any graphical boot that might exist # 注释 :关闭任何图形界面引导程序

if [ -x /usr/bin/rhgb-client ]; then # 注释 :如果存在该文件且可执行,
/usr/bin/rhgb-client -quit # 则执行该命令,并带 -quit 选项
fi

# 补充 :在 RHEL4 中,第一次安装后会出现一个蓝色的进度条,点击它就可以看到

# 平时的那些启动服务的信息,这个就是由上面的 rhgb-client 命令提供的,

# 而这个命令是由 /etc/rc.d/rc.sysinit 启动的


# We need to source this so that the login screens get translated

[ -f /etc/profile.d/lang.sh ] && . /etc/profile.d/lang.sh

# 注释 : 上面的命令判断是否存在该脚本,是则执行它。

# 该脚本的功能是用于设置登录界面的语言,同样不太长,74 行而已,可以自行分析


# Run preferred X display manager


# 注释 :下面就是重头戏了,启动之前设定的 Display Manager ,

# 显示登录对话框


preferred= # 注释 :该变量的值首先置空
if [ -f /etc/sysconfig/desktop ]; then # 注释 :如果存在 desktop 文件,则执行它
. /etc/sysconfig/desktop # 该文件只有1行,就是 DESKTOP=XXX
if [ "$DISPLAYMANAGER" = GNOME ]; then # 很明显,下面这些语句都不会被
preferred=gdm # 执行,因为 DISPLAYMANAGER
elif [ "$DISPLAYMANAGER" = KDE ]; then # 变量并没有定义,所以为空
preferred=kdm
elif [ "$DISPLAYMANAGER" = XDM ]; then
preferred=xdm
fi
fi

shopt -s execfail

# 注释 :shopt 是 shell 的一个内置命令,-s execfail

# 表示启用 ExecFail 功能,它表示如果下面的 exec 命令失败,不会退出非交互式 shell

# 在这里给出它的简单解释 :

# execfail
If set, a non-interactive shell will not exit if it can-
not execute the file specified as an argument to the
exec builtin command. An interactive shell does not
exit if exec fails.


[ -n "$preferred" ] && exec $preferred $* >/dev/null 2>&1

# 注释 :如果 preferred 变量的值不为空,则使用执行的 Display Mananger

# 并用它的代码覆盖当前 non-interactive shell 的代码

# 基于上面的 desktop 文件的内容,这句话是不会被执行的。


# Fallbacks, in order

# 注释 :既然不执行上面的命令,那么总得启动一个 Display Manager 了吧,

# 所以下面依次查功能是 gdm、kdm、xdm

exec gdm $* >/dev/null 2>&1
exec kdm $* >/dev/null 2>&1
exec xdm $* >/dev/null 2>&1

# catch all exit error

# 注释 :要注意,当你退出 GDM 后者 KDM 时,并不会执行下面的 exit 命令,

# 只有在上面的3个exec 命令都执行失败才会执行下面的 exit 1


exit 1
[/code]

前面我们提到了 /etc/sysconfig/desktop 文件,下面我们就修改它来实现默认为 KDE 或者 XDM

1、修改 /etc/sysconfig/desktop 文件

[code]
# cat /etc/sysconfig/desktop
DESKTOP="GNOME"
DISPLAYMANAGER="XDM"

[/code]

2、重启。为什么需要重启呢?因为在 /etc/inittab 中,在 x:5:respawn:/etc/X11/prefdm -nodaemon 这句中,respawn 的作用就是 prefdm 一旦退出,

init 立即再执行一个 /etc/X11/prefdm -nodaemon 。也就是说,一旦退出该程序,init 立马会重新执行 prefdm ,所以你才能在“注销”后又再次看

到“图形登录界面”。所以记得要重启哦

3、重启,现在你看到的就是 XDM 的登录界面了,一个黑黑的屏幕,中间是灰色的窗口,和 Solaris

或者 AIX 的 CDE 界面很象,但和 GDM/KDM 不同的是,它不允许你选择语言

4、同样道理,你可以修改 DISPLAYMANAGER="KDE",则默认启动 KDM

5、经过测试发现,DESKTOP 和 DISPLAYMANAGER 可以不同,因为两者并不是必须对应的。

在上面的例子中,登录窗口是 XDM ,但进入后是 GNOME 的环境。同样你可以定义登录

界面为 GNOME (DISPLAYMANAGER=‘GNOME"),但桌面环境为 KDE(DESKTOP="KDE")。

是不是很有趣呢?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值