X windows:
X windows的概念:
X windows的组成:
X windows的架构:
X windows的工作过程:
X windows的启动流程:
Ps:(以下的讨论是基于redhat9.0+gnome)
Xwindows的概念:
X是一种协议,大多数的linux都是基于X协议来实现图形系统;
基于X实现的GUI系统就称为X Window System,简称为X Window或X。也常把Xserver(这里指一个程序)及它提供的服务简称为X。使得图形应用程序不需要关心硬件的细节,它们只需要告诉X怎样显示即可,X监听应用程序的请求,并将这些指示转换为实际的硬件操作。但是,X并不控制这些应用程序在屏幕上的显示位置和显示内容。
(Ps:不要被混乱,有时候此X非X)
Xwindows的组成:
由X server、X client、X protocol三部分组成
(1)X Server(服务器):控制实际显示器和输入设备的程序。Server是控制显示器和输入设备(键盘和鼠标)的软件。Server可以建立视窗,在视窗中画图形和文字,响应Client程序的“需求”(requests),但他不会自己动作,只有在Client程序提出需求后才完成动作,负责显示、传递使用者输入事件(包括键盘及鼠标等硬件装置的输入)
例如:/usr/X11R6/bin/X(二进制文件)、 XFree86、Xorg等都是Xserver
(2)X Client(客户端):Client是使用系统视窗功能的一些应用程序。在X下的应用程序称作Client,原因是他是Server的客户,他要求Server响应他的需求完成特定的动作。
例如:gnome、kde,等都是基于X windows上的X Client(属于桌面环境);实质上是指可以在X windows上执行的软件(包括浏览器,办公软件等)
(3)X protocol是X Server与X Client之间的通信协议。从本质上来说,它是一种远程显示协议。
Xwindows的架构:
由X Server、Graphic Library、Toolkitss、Window Manager、桌面环境、Internationalization(I18N)、
(1)X Server:与上面的X Server一样;
(2)Graphic Library:底层绘图函数库;即绘图相关的一组函数库
Toolkitss:窗口的抽象组件(它们被称为构件Widgets,在windows下的对应术语为控件)例如:按钮等,抽象出来,重新定义一组更高阶的函数库,再配合上一些联系的语法就成了Toolkits这东西,目前以QT、GTK+等较为流行;
(4)Window Manager:窗口管理器。图形程序常常有一个矩形状的外观,称之为窗口,由于X只给图形程序提供了显示的硬件实现,所以需要额外的程序来管理窗口,这个程序被称为窗口管理器。它也只是一个普通的应用程序,特殊之处在于它是用来管理其他窗口的。窗口管理器控制着屏幕上的窗口,它们的样式及操作,它决定窗口的边框形式,比如最大、最小、关闭这3个按钮就是窗口管理器提供的。。。。。。例如:twm
(5)桌面环境:假如想在桌面上放置一样图标,单击它就可以启动程序等,这不是窗口管理器的职责,这时候,需要一个桌面管理器,或称桌面环境;例如:gnome,kde就是桌面环境
(6)Internationalization(I18N):国际化
Xwindows的工作过程:
(1)用户通过鼠标键盘对X server下达操作命令
(2)Xserver利用Event传递用户操作信息给Xclient
(3)Xclient进行程序运算
(4)Xclient利用Request传回所要显示的结果
(5)Xserver将结果显示在屏幕上
例如:X-server负责管理鼠标、键盘、显卡、显示器,而X-client则负责处理程序的运行。比如说,我桌面上有一个gvim的图标,我现在移动鼠标点击了一下gvim的图标,那么X-server会告诉X-client:“用户移动了鼠标到什么位置,然后单击了一下鼠标的左键”。X-client收到这个信息以后会对这个行为做出反应,经过一番思考,它发现,我这个行为是要打开一个叫gvim的程序,于是X-client会运行gvim,然后告诉X-server:“你在显示器上给用户画出一个像gvim的东西来”。然后,我就在我的屏幕上很高兴地看见了我可爱的gvim编辑器了,当然还有伟大的DejaVu Sans Mono等宽字体。
Xwindows的启动流程:
讨论X windows 的启动流程以startx作为起点
(1)vi /usr/X11R6/bin/startx
startx:(主要部分)
userclientrc=$HOME/.xinitrc
userserverrc=$HOME/.xserverrc
sysclientrc=/etc/X11/xinit/xinitrc //startx没参数时候执行的Xclient
sysserverrc=/etc/X11/xinit/xserverrc //startx没参数时候执行的Xserver
defaultclient=/usr/X11R6/bin/xterm //上面userclientrc与sysclientrc都为
//的时候执行的Xclient
defaultserver=/usr/X11R6/bin/X //上面sysclientrc与sysserverrc都为
//的时候执行的Xserver
………
xinit$client $clientargs -- $server $display $serverargs
startx命令(文件)的作用:指定Xclient与Xserver的路径以及传递参数,并且以它们作为参数调用xinit程序,然后xinit就会运行Xclient,Xserver;
例如:当直接输入startx的时候(不带参数),则系统调用xinit,并且参数为:X(Xserver服务器),xinitrc(Xclient客服端)等;则系统会运行X以及xinitrc等;
(Ps:xinit是一个二进制文件,并非是一个脚本。它的主要功能是启动一个X服务器,同时启动一个基于X的应用程序。)
测试结果:
先进入文字界面:
(1)输入:xinit:
结果:
理由:因为它运行了X(Xserver)以及xterm(Xclent)
(2)输入:X或者/usr/X11R6/bin/X (直接运行X(Xserver))
结果:
理由:因为只运行了X(Xserver),没有运行其他软件
(3)在(1)的基础上,(在xterm上)输入xeyes& 和 /etc/X11/xinit/xinitrc
①输入xeyes &的结果:
②输入twm &后再输入/etc/X11/xinit/xinitrc
理由:因为输入twm &后,即运行了窗口管理器,再输入/etc/X11/xinit/xinitrc就运行了gnome桌面管理器了
③直接输入/etc/X11/xinit/xinitrc:
ps: 在ubuntu12.04下安装enlightenment 17 (E7),然后启动enlightenment 17 (E7)
步骤:安装enlightment
1、sudo make install enlightenment
修改从文字模式启动
2、sudo vi /etc/default/grub (把quiet splash改为quiet splash text)
3、sudo update-grub
文字模式上输入命令,运行e7
4、xinit
5、enlightment_start &
结果:
结论:gnome桌面管理器是基于X Server上运行的一个软件,是可以利用窗口管理器软件(twm)关闭的;也就是说没有gnome等桌面管理器,系统还是在运行的;
至于startx,当直接输入startx的时候(不带参数),则系统会调用xinit,并且参数为:X(Xserver服务器),xinitrc(Xclient客服端)等;则系统会运行X以及xinitrc等;