Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1189996
  • 博文数量: 253
  • 博客积分: 5892
  • 博客等级: 大校
  • 技术积分: 1942
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 14:20
文章分类

全部博文(253)

文章存档

2012年(98)

2011年(155)

分类: LINUX

2012-01-03 01:36:26

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

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



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

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

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

  1. #!/bin/sh
  2. PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin # 注释 :设置 PATH 变量
  3. # shut down any graphical boot that might exist # 注释 :关闭任何图形界面引导程序
  4. if [ -x /usr/bin/rhgb-client ]; then # 注释 :如果存在该文件且可执行,
  5. /usr/bin/rhgb-client -quit # 则执行该命令,并带 -quit 选项
  6. fi
  7. # 补充 :在 RHEL4 中,第一次安装后会出现一个蓝色的进度条,点击它就可以看到
  8. # 平时的那些启动服务的信息,这个就是由上面的 rhgb-client 命令提供的,
  9. # 而这个命令是由 /etc/rc.d/rc.sysinit 启动的
  10. # We need to source this so that the login screens get translated
  11. [ -f /etc/profile.d/lang.sh ] && . /etc/profile.d/lang.sh
  12. # 注释 : 上面的命令判断是否存在该脚本,是则执行它。
  13. # 该脚本的功能是用于设置登录界面的语言,同样不太长,74 行而已,可以自行分析
  14. # Run preferred X display manager
  15. # 注释 :下面就是重头戏了,启动之前设定的 Display Manager ,
  16. # 显示登录对话框
  17. preferred= # 注释 :该变量的值首先置空
  18. if [ -f /etc/sysconfig/desktop ]; then # 注释 :如果存在 desktop 文件,则执行它
  19. . /etc/sysconfig/desktop # 该文件只有1行,就是 DESKTOP=XXX
  20. if [ "$DISPLAYMANAGER" = GNOME ]; then # 很明显,下面这些语句都不会被
  21. preferred=gdm # 执行,因为 DISPLAYMANAGER
  22. elif [ "$DISPLAYMANAGER" = KDE ]; then # 变量并没有定义,所以为空
  23. preferred=kdm
  24. elif [ "$DISPLAYMANAGER" = XDM ]; then
  25. preferred=xdm
  26. fi
  27. fi
  28. shopt -s execfail
  29. # 注释 :shopt 是 shell 的一个内置命令,-s execfail
  30. # 表示启用 ExecFail 功能,它表示如果下面的 exec 命令失败,不会退出非交互式 shell
  31. # 在这里给出它的简单解释 :
  32. # execfail
  33. If set, a non-interactive shell will not exit if it can-
  34. not execute the file specified as an argument to the
  35. exec builtin command. An interactive shell does not
  36. exit if exec fails.
  37. [ -n "$preferred" ] && exec $preferred $* >/dev/null 2>&1
  38. # 注释 :如果 preferred 变量的值不为空,则使用执行的 Display Mananger
  39. # 并用它的代码覆盖当前 non-interactive shell 的代码
  40. # 基于上面的 desktop 文件的内容,这句话是不会被执行的。
  41. # Fallbacks, in order
  42. # 注释 :既然不执行上面的命令,那么总得启动一个 Display Manager 了吧,
  43. # 所以下面依次查功能是 gdm、kdm、xdm
  44. exec gdm $* >/dev/null 2>&1
  45. exec kdm $* >/dev/null 2>&1
  46. exec xdm $* >/dev/null 2>&1
  47. # catch all exit error
  48. # 注释 :要注意,当你退出 GDM 后者 KDM 时,并不会执行下面的 exit 命令,
  49. # 只有在上面的3个exec 命令都执行失败才会执行下面的 exit 1
  50. exit 1



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

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

  1. [root@dhcp-client ~]# cat /etc/sysconfig/desktop
  2. DESKTOP="GNOME"
  3. DISPLAYMANAGER="XDM"
  4. [root@dhcp-client ~]



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")。

是不是很有趣呢?

阅读(2994) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~