XWindow启动流程
X Window系统架构

一、基本概念:
1、X Client:X客户端,运行在远端主机上
- X Client最重要的工作就是处理来自 X Server 的动作,将该动作处理成为绘图数据, 再将这些绘图数据传回给 X Server。由亍 X Client 的目的在产生绘图的数据,因此也称呼 X Client为X Application (X 应用程序)。
- 每个 X Client 并不知道其他 X Client 的存在, 如果有两个以上的 X client 同时存在,两者并不知道对方到底传了什举数据给 X Server , 因此 X Client 的绘图常常会互相重迭,这就需要Window Manager来处理重迭显示,等多个X Client相互协调的问题。
2、X Server:X服务器,运行在用户端主机上
3、Window Manager:窗口管理器
4、Display Manager-显示管理器
二、命令行通过startx命令启动X Window
启动X Window System 时,必须要先启动管理硬件和绘图的X Server ,然后才启动X Client 。
通过在命令行界面输入 startx 来启动X窗口,也能够通过display manager (如果有runlevel 5) 提供的登录界面输入你的账号密码来登入来启动X。
#startx //命令行界面启动X Window系统
Linux是个多用户系统,每个用户启动X 时, X server 的分辨率、启动X client的相关软件及 Window Manager 的选择可能都不一样,
startx 最重要的任务就是找出用户或者是系统默认的X server与X client的配置文件,而使用者也能够使用 startx 外接参数来取代配置文件的内容。
# startx [X client 参数] -- [X server 参数]
例子:以16位颜色深度启动X server
# startx -- -depth 16
startx 找出 X server / X client 的设定值而已!事实上启动X的是xinit这支程序, startx 仅是在帮忙找出设定值而已!
startx 找到设定值的顺序基本上是这样的:
X server 的参数方面:
- 使用startx后面接的参数
- 若无参数,则找寻用户主目录的文件~/.xserverrc
- 若无上述两者,则以 /etc/X11/xinit/xserverrc
- 若无上述三者,则单纯执行 /usr/bin/X (此即 X server 执行文件,X有时链接到Xorg)
X client 的参数方面:
- 使用 startx 后面接的参数
- 若无参数,则找寻用户主目录的文件~/.xinitrc
- 若无上述两者,则以 /etc/X11/xinit/xinitrc
- 若无上述三者,则单纯执行 xterm (此为X客户端软件)
当 startx 找到需要的设定值后,就调用xinit实际启动X。
三、实际启动X Window系统的命令-xinit
xinit的语法:
# xinit [client option] -- [server or display option]
若X server配置文件不存在,则直接执行/usr/bin/X,通过startx调用xinit的参数可能如下:
#xinit /etc/X11/xinit/xinitrc -- /usr/bin/X
若只是执行 xinit,系统的默认 X Client 和 X Server 的参数如下:
#xinit xterm -geometry +1+1 -n login -display :0 -- X :0
四、X Server的启动
X Window最先需要启动的就是X Server。X server启动的预设脚本是主目录下的~/.xserverrc或/etc/X11/xinit/xserverrc,若都不存在,则直接执行/usr/bin/X启动X server。
在启动X Server 时,Xorg 会去读取 /etc/X11/xorg.conf 这个配置文件。如果一切顺利,那么X就会顺利的在tty7 癿环境中吪劢了 X 。 单纯的X启动时,你只会看到画面一片漆黑,然后中心有个鼠标的光标。
X 启动的时候可以指定启动的接口。 事实上,Linux 可以同时启动多个 X。第一个 X 的画面会在 :0 亦即是tty7,第二个 X 则是 :1,亦即是 tty8 。 后续还可以有其他的 X 存在的。因此,X client应用程序在加载时,必须要使用 -display 来说明这个X应用程序是需要在哪个 X加载(如上例中xterm的启动参数)。需要注意的是:X server未注明加载的接口时,默认是使用 :0,但是 X client 未注明时,则无法执行。
五、X Cllient的启动
假设你的主目彔没有 ~/.xinitrc ,则此时 X Client 会以 /etc/X11/xinit/xinitrc 来作为启动 X Client的预设脚本。
xinitrc这个文件会将许多其他的文件参数引进来, 包括 /etc/X11/xinit/xinitrc-common、/etc/X11/xinit/Xclients,还有 /etc/sysconfig/desktop 。可以参考 xinitrc后去搜寻各个文件来了解彼此的关系。
不过分析到最后,就是载入KDE 或者是 GNOME。它们通过两个指令来启动, 包括 startkde 或 gnome-session。KDE和GNOME是 CentOS 预设提供的两个主要的 Window Manager。可以通过修改 /etc/sysconfig/desktop 内的DESKTOP=GNOME 戒 DESKTOP=KDE 来决定默认使用哪个窗口管理器的。
如果有特殊需求,可以自定义X client 的参数。这就得要修改用户主目彔下的 ~/.xinitrc 这个文件。要注意的是,如果你的 .xinitrc 配置文件里面启动的 x client很多的时候,千万注意将除了最后一个 window manager 或 X Client之外,都应该放到背景里面去执行,例如:
xclock -geometry 100x100-5+5 &
xterm -geometry 80x50-50+150 &
exec /usr/bin/twm
六、X启动的端口
默认情况下,X server通过port 6000 来与 X client进行沟通。但由于系统上面可能有多个 X 存在,因此就会有 port 6001, port 6002... 等等。
在 X Window System 的环境下,称 port 6000 为第 0 个显示接口,即 hostname:0 , 主机名通常可以省略,所以就成了 :0。其它显示接口依次类推,如下图。

七、小结
在文字界面下启动 X 时,直接使用 startx 来找到 X server 与 Xclient 的参数或配置文件, 然后再调用 xinit 来启动 X 窗口系统。xinit 先载入 X server 到预设的 :0这个显示接口 (默认在 tty7),然后再加载 X client 到这个 X 显示接口上。而 X client 通常就是GNOME 或 KDE ,具体用哪个窗口管理器是通过在 /etc/sysconfig/desktop 里面设置的。
主要的命令和配置文件:
/usr/bin/startx
/usr/bin/xinit
/usr/bin/X (或Xorg)
/etc/X11/xinit/xserverrc
/etc/X11/xinit/xinitrc
/etc/X11/xorg.conf
/etc/sysconfig/desktop
~/.xserverrc
~/.xinitrc
=-=-=-=-=
Powered by Blogilo
XWindow启动流程的更多相关文章
- centos启动流程[转]
启动流程概览 在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 资讯: init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行 ...
- 【转】linux-系统启动流程详解
第二十章.启动流程.模块管理与 Loader 最近升级日期:2009/09/14 1. Linux 的启动流程分析 1.1 启动流程一览 1.2 BIOS, boot loader 与 kernel ...
- CentOS6启动流程
CentOS6启动流程 1.加载BIOS的硬件信息,获取第一个启动设备 在通电之后,CentOS6会进行加电自检(Power On Self Test),这个过程主要是由BIOS完成的.在自检完毕,会 ...
- Linux启动流程与模块管理(15)
系统的启动其实是一项非常复杂的过程,因为内核得要检测硬件并加载适当的驱动程序,接下来则必须要调用程序来准备好系统运行的环境,以让用户能够顺利的操作整台主机系统,如果你能够理解系统启动的原理,那么将有助 ...
- MyCat源码分析系列之——配置信息和启动流程
更多MyCat源码分析,请戳MyCat源码分析系列 MyCat配置信息 除了一些默认的配置参数,大多数的MyCat配置信息是通过读取若干.xml/.properties文件获取的,主要包括: 1)se ...
- Android进阶系列之源码分析Activity的启动流程
美女镇楼,辟邪! 源码,是一个程序猿前进路上一个大的而又不得不去翻越障碍,我讨厌源码,看着一大堆.5000多行,要看完得啥时候去了啊.不过做安卓的总有这一天,自从踏上这条不归路,我就认命了.好吧,我慢 ...
- Spring Boot启动流程详解(一)
环境 本文基于Spring Boot版本1.3.3, 使用了spring-boot-starter-web. 配置完成后,编写了代码如下: @SpringBootApplication public ...
- linux启动流程及自定义gurb
linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...
- linux启动流程
看了深入理解linux内核一书的最后对linux启动流程的介绍,下面就把我能理解的写一下吧: bios(硬件加电自检POST,寻找第一个启动设备) the boot loader(可以从硬盘启动也可以 ...
随机推荐
- 解决IE无法访问localhost问题
前几天新安装了win10和webstorm16,发现系统是的IE浏览器是IE11,调试时无法正常显示网页: 一开始以为是系统没有写入密钥,无法获得权限,查了一下后发现是局域网设置不正确. 作以下设置可 ...
- NGINX中的proxy_pass和rewrite
文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/6807081.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点,如 ...
- Struts2拦截器登录验证
Struts2拦截器 Struts2拦截器的概念和Spring Mvc拦截器一样. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截 ...
- struts2标签库----控制标签详解
前面几篇文章我们介绍了有关struts2的基本内容,简单理解了整个框架的运作流程.从本篇开始我们逐渐了解和使用struts2为我们提供的标签库技术,使用这些标签可以大大降低我们表现层的开发难 ...
- MySQL游标的简单实践
Q:为什么要使用游标? A: 在存储过程(或函数)中,如果某条select语句返回的结果集中只有1行,可以使用select into语句(上几篇博客有介绍到用法)来得到该行进行处理:如果结果集中有多行 ...
- Scrapy 爬虫框架入门案例详解
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:崔庆才 Scrapy入门 本篇会通过介绍一个简单的项目,走一遍Scrapy抓取流程,通过这个过程,可以对 ...
- linux下归档、解压缩工具:tar命令
tar是一个类似于windows下的解压缩工具,可以将一大堆文件或目录打包成一个文件,还可以通过特定选项使用压缩工具进行解压缩. 语法: tar (选项) (参数) 常用选项: -c:创建打包文件. ...
- [笔记]ACM笔记 - 利用FFT求卷积(求多项式乘法)
卷积 给定向量:, 向量和: 数量积(内积.点积): 卷积:,其中 例如: 卷积的最典型的应用就是多项式乘法(多项式乘法就是求卷积).以下就用多项式乘法来描述.举例卷积与DFT. 关于多项式 对于多项 ...
- maven(03)
修改本地库路径 windows下maven默认路径应该是${user.home}/.m2/repository 修改方法:找到maven安装的根路径,里面有一个conf的文件夹,打开里面有一个sett ...
- PHP电商订单自动确认收货redis队列
一.场景 之前做的电商平台,用户在收到货之后,大部分都不会主动的点击确认收货,导致给商家结款的时候,商家各种投诉,于是就根据需求,要做一个订单在发货之后的x天自动确认收货.所谓的订单自动确认收货,就是 ...