X系统和X启动流程

系统 1727 0

Linux 图形界面又称 X 系统,其主要包含如下几个部分:

a XServer

b) 显示管理器 (Display Manager) 例如( gdm  kdm xdm 等)

c) 窗口管理器 ( Window Manager) 例如(mutter, metacity ,fluxbox 等)

d)DM WM 之上的一些图形应用程序 

 

在使用中一般都是 b,c,d 三者集合起来构成一个完整的集成工作环境,例如 KDE ,GNOME , 这就是我们平时所说的广义上的 XClient

 

Metacit y 曾经是GNOME桌面环境下默认的复合窗口管理器。 在GNOME 2.2正式引进Metacity之前,GNOME陆续使用了Enlightenment和Sawfish作为它的窗口管理器。虽然Metacity是GNOME工程的一部分来并且被设计为集成进GNOME桌面,但它并不需要GNOME才能运行。同样GNOME也可以使用各种不同的窗口管理器,只要它们支持ICCCM规范。 Me tacity由GTK+实现,这使得它可以主题化并与其他G TK+应用程序相融合

2011年,Gnome 3 发布,Metacity被mutter代替。 Mutter  是Gnome 3的窗口管理器,用来取代原本的Metacity,Gnome Shell实际上是Mutter的一个插件,Mutter是Metacity Clutter的缩写。它使用了Clutter这个图形库,支持OpenGL。

 

1. 显示管理器(DM):

startx 的作用可以看作是 Display Manager 的一种隐性实现。它使用 xinit 命令,分别根据 /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc 中所指定的设置唤起 X。 其中, xserverrc 执行 X server 的运行任务; xinitrc 则运行 Xsession 命令。从 /etc/X11/Xsession 脚本的内容可以看出,它也就是进入 /etc /X11/Xsession.d/ 目录轮询地执行所有脚本。很明显,这些就是 session 初始化工作。因此, Display Manager 完成三个任务: 1, X Server 的启动 ; 2, X session 的初始化 ; 3, X session 的管理。

 XDM、GDM、KDM是三种X Window的显示管理器,其功能相当于文本模式下的init、getty和login;当用户输入的正确的用户名和口令后将开启一个会话

    (1)XDM(默认的X Window System Display Manager)
    
(2)GDM(gnome提供的Display Manager)
(3)KDM(KDE提供的Display Manager)

2.窗口管理器(WM):它是负责管理窗口的移动、最大化、最小化、改变大小以及关闭等工作

X Server 提供了基本的图形显示能力。然而具体怎么绘制应用程序的界面,却是要有应用程序自己解决的。而 Window Manager(窗口 管理器,后简称 WM) 就是用来提供统一的 GUI 组件的 ( 窗口、外框、菜单、按钮等 ) 。否则,应用程序们各自为政,既增加了程序开发的负担,不统一的桌面风格对视觉也是不小的挑战。

WM 的启动由 DM 控制,在 gdm 的登录窗口,我们可以进行选择。常见的 WM :Mutter, Metacity , fluxbox, fvwm, E17

 

    常见的窗口管理器 
    
1)twm(X.org提供的简单的窗口管理器)
2)gnome-wm(gnome提供的窗口管理器)
3)kwin(KDE使用的窗口管理器)
4)FVWM(一款知名的窗口管理器)

3.Gnome/KDE: GNOME、KDE是桌面系统,是集成了窗口管理器,显示管理器及一些应用程序的套件

4.  X Clients

     X Client X 客户端程序,顾名思义,就是使用 X 服务的程序。 firefox gedit 等等都属于 X Client 程序。

    X Client 部分值得考虑一下的就是 DISPLAY 环境变量。它主要用于远程 X Client 的使用。该变量表示输出目的地的位置,由三个要素组成:

     [host]:display[.screen]

     host 指网络上远程主机的名称,可以是主机名、 IP 地址等。默认的 host 是本地系统,你可以在自己系统上 echo $DISPLAY 看一下。

     display screen 分别代表输出画面的编号和屏幕的编号。具体细节由于硬件的缺乏,还有待进一步研究。

startx 启动过程分析

参考 :  http://blog.csdn.net/clozxy/article/details/5488699

xserver x client 的启动过程的探讨主要是对 startx 命令的探讨

startx 脚本网上解释的很多,这里就不多做介绍,对 startx 介绍分以下两个部分

(1)xinit 用法

startx 其实是个脚本,最终调用的是 xinit 命令,其用法如下:

xinit 的用法为: xinit [[client] options ] [-- [server] [display] options] 。其中 client 用于指定一个基于 X 的应用程序, client 后面的 options 是传给这个应用程序的参数, server 是用于指定启动哪个 X 服务器,一般为 /usr/bin/X /usr/bin/Xorg display 用于指定 display number ,一般 为 0 ,表示第一个 display option 为传给 server 的参数。


如果不指定 client xinit 会查找 HOME ( 环境变量 ) 目录下的 .xinitrc 文件,如果存在这个 文件, xinit 直接调用 execvp 函数执行该文件。如果这个文件不存在,那么 client 及其 options 为:   xterm -geometry +1+1 -n login -display :0


如果不指定 server xinit 会查找 HOME( 环境变量 ) 目录下的 .xserverrc 文件,如果存在这个文件, xinit 直接调用 execvp 函数执行该文件。如果这个文件 不存在,那么 server 及其 display 为:   X :0 。如果系统目录中不存在 X 命令,那么我们需要在系统目录下建立一个名为 X 的链接,使其指向真正的 X server 命令( Ubuntu 下为 Xorg )。


因此 startx 的用法跟 xinit 一样: startx [ [ client ] options ... ] [ -- [ server ] options ... ]


(2)startx 的几种启动方式

由对 startx 脚本的分析,我们可以知道 startx 主要有三种启动方式:

a) 、一种是自己指定要启动的 client server , 例如: startx /usr/bin/xclock -- /usr/bin/X :0

b )、一种是通过在 $HOME 下新建 .xinitrc 文件来指定要启动的多个 client .xserverrc 来指定要启动的 server

c )、还有一种是直接输入 startx 而不指定参数,这也就是我们启动 gnome 桌面的方法。


c 这种启动方法中 , startx 脚本会先去看系统目录( /etc/X11/xinit/ )下的 rc 文件是否存在,如果不存在就会用默认的 xterm /usr/bin/X 来启动 xinit 。显然, startx 启动的不是 xterm ,而是 gnome 桌面,因此 gnome 的启动是通过系统文件 /etc/X11/xinit/xinitrc 来指定的。

/etc/X11/xinit/xinitrc 文件的内容如下所示:

#!/bin/bash # 注意 : 该脚本用的是 bash shell 解析的

# $Xorg: xinitrc.cpp,v 1.3 2000/08/17 19:54:30 cpqbld Exp $

# /etc/X11/xinit/xinitrc

#

# global xinitrc file, used by all X sessions started by xinit (startx)

# invoke global X session script

. /etc/X11/Xsession   # 在当前这个 shell 环境中执行 Xsession 脚本

因此, gnome 的启动应该在 Xsession 里。

X Server 的启动则是通过系统文件 /etc/X11/xinit/xserverrc 来指定的 , 这个文件的内容为 :

#!/bin/sh # 注意:该脚本用的是 Bourne shell 解析的

# $Id: xserverrc 189 2005-06-11 00:04:27Z branden $

exec /usr/bin/X11/X -nolisten tcp

综上所述, startx 的默认启动过程为: startx 调用并将系统文件 /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc 作为参数传给 xinit xinit 就会先执行系统文件 /etc/X11/xinit/xserverrc 以启动 X Server ,然后执行 /etc/X11/xinit/xinitrc ,而 xinitrc 则会执行脚本 /etc/X11/Xsession ,而 Xsession 则会按顺序调用执行 /etc/X11/Xsession.d 目录下的文件,从而最终调用了 gnome-session 这个用于 启动 GNOME 桌面环境的程序

 

 

 

X系统和X启动流程


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论