分类: LINUX
2014-09-02 00:41:16
原文地址:Linux的X窗口系统结构说明 作者:loughsky
一、说明
以X Server为中心,简要地分为四层,如图所示
二、X方式与Framebuffer方式的差异
1. X方式
1)
什么是X
我们常说的X Window,X,X11(指X协议的11版本)一般指X协议,或指是基于X协议的X服务端程序(X Server)
2) X Server与X Client
a) X协议指X Server及X Client组成的c/s架构,及其通讯协议的实现
b) X Server有主事件循环,由它来处理用户输入、显示及与X Client通讯
c)
X
Client即X桌面上运行的普通应用程序
应用程序如果想显示数据,需要利用X Lib库建立X窗口(X Client),它通过X协议与X Server通讯,让X Server完成显示;X Server会把接到键盘鼠标事件,传给焦点所在的X Client处理
2.
Framebuffer方式
Framebuffer方式相对简单,它由内核直接支持,通常用于嵌入式系统。应用程序可以得到屏幕显示区域的指针,然后对其写数据来进行显示,其中窗口的概念不强,它自身不带窗口管理,需要应用软件自己管理窗口。比如qtopia基本于framebuffer显示时,qtopia自身实现了窗口管理功能
3.
应用程序的显示方式
很多应用程序同时支持X和Framebuffer两种模式显示,如gtk,qt等,以下我们只讨论它基本于X实现的部分
三、分层
1.
应用层(Application)
指X
Window上运行所有带图形界面的应用程序,每个窗口都是一个X Client
1)
X Lib app
直接使用X函数的应用程序,这种程序一般界面简单,比较底层,比如很多窗口管理器直接写在这层
2)
Gtk app
gtk又分为gtk和gdk两层,
gtk为控件及主循环的实现
gdk相对底层,控制底层绘图部分,它支持framebuffer、X11、DirectFb等
应用程序可调用gtk函数,也可直接调用gdk函数
gtk常和cairo一起实现二维特效
3)
Qt app
Qt也通过调用X Lib实现图形界面
Qt的优势在于它是C++实现的,使用起来程序结构更好,也有较成熟的嵌入式版本
4)
SDL app
SDL也通过调用X Lib实现图形界面
SDL更底层,代码少,没有控件,但做特殊效果很好用
2.
窗口管理器层(Window manager简称wm)
Window
manager是特殊的X Client,也通过X Lib库与X
Server交互,与一般应用不同的是:它负责控制各个窗口的动作,及操作主窗口
WM的功能分为管理(manager)和工具(tools),
1)
Manager
负责各个窗口的建立销毁/显示隐藏/最大最小化/移动缩放,管理窗口队列,设置焦点窗口,窗口切换效果等
2)
Tools
实现桌面工具条,桌面菜单等基本界面及小工具
3)
具体实现
实现通常有两种方式:一种是manager和tools在一个程序中实现,一种是分开两个程序实现,使用时可以随意组合
a) qvwm, blackbox等较早期的wm,都是manager和tools在一个程序中实现的
b) xfce、metacity等是分开的,例如:xfce包含tools和manager,但不在一个程序中实现,它的manager是xfwm,我们可在使用xfce时把xfwm替成metacity(metacity是一个manager,不带tools)
3.
X服务器层(X Server)
主循环控制显示,读取设备数据,与X Client通讯,事件循环,并把事件送给焦点窗口
1)
普通X Server
功能完整的X Server,代码量大,支持全,常见的如XFree86,Xorg等
2)
Tiny X Server
一般用于嵌入式系统,资源占用小,代码少,功能及逻辑相对简单,如KDrive(Xvesa/Xchips/Xfbdev/Xi810……)
4. 系统底层(System)
1)
Kernel
与硬件交互,获得输入设备的数据,向显示设备输出
2)
Dev
文件系统中的设备文件,程序通过对它的读写和操作与kernel交互,控制硬件
3)
中间层
在程序和Dev层之间,有时还需要库或程序处理设备数据,比如触摸屏就使用libts去除噪点,过滤出更有效的数据