Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3515574
  • 博文数量: 1805
  • 博客积分: 135
  • 博客等级: 入伍新兵
  • 技术积分: 3345
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 20:01
文章分类

全部博文(1805)

文章存档

2017年(19)

2016年(80)

2015年(341)

2014年(438)

2013年(349)

2012年(332)

2011年(248)

分类: LINUX

2014-09-02 00:41:16

一、说明
X Server为中心,简要地分为四层,如图所示

二、X方式与Framebuffer方式的差异

1.         X方式

1)        什么是X
我们常说的X WindowXX11(X协议的11版本)一般指X协议,或指是基于X协议的X服务端程序(X Server)

2)        X ServerX Client

a)         X协议指X ServerX 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.         应用程序的显示方式
很多应用程序同时支持XFramebuffer两种模式显示,如gtkqt等,以下我们只讨论它基本于X实现的部分

三、分层

1.         应用层(Application)
指X Window上运行所有带图形界面的应用程序,每个窗口都是一个X Client

1)        X Lib app
直接使用X函数的应用程序,这种程序一般界面简单,比较底层,比如很多窗口管理器直接写在这层

2)        Gtk app
gtk
又分为gtkgdk两层,

gtk
为控件及主循环的实现
gdk
相对底层,控制底层绘图部分,它支持framebufferX11DirectFb
应用程序可调用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)        具体实现
实现通常有两种方式:一种是managertools在一个程序中实现,一种是分开两个程序实现,使用时可以随意组合

a)         qvwm, blackbox等较早期的wm,都是managertools在一个程序中实现的

b)        xfcemetacity等是分开的,例如:xfce包含toolsmanager,但不在一个程序中实现,它的managerxfwm,我们可在使用xfce时把xfwm替成metacity(metacity是一个manager,不带tools)

3.         X服务器层(X Server)
主循环控制显示,读取设备数据,与X Client通讯,事件循环,并把事件送给焦点窗口

1)        普通X Server
功能完整的X Server,代码量大,支持全,常见的如XFree86,Xorg

2)        Tiny X Server
一般用于嵌入式系统,资源占用小,代码少,功能及逻辑相对简单,如KDriveXvesa/Xchips/Xfbdev/Xi810……

4.         系统底层(System)

1)        Kernel
与硬件交互,获得输入设备的数据,向显示设备输出

2)        Dev
文件系统中的设备文件,程序通过对它的读写和操作与kernel交互,控制硬件

3)        中间层
在程序和Dev层之间,有时还需要库或程序处理设备数据,比如触摸屏就使用libts去除噪点,过滤出更有效的数据

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