Chinaunix首页 | 论坛 | 博客
  • 博客访问: 174560
  • 博文数量: 6
  • 博客积分: 248
  • 博客等级: 入伍新兵
  • 技术积分: 345
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-30 17:51
文章分类
文章存档

2012年(6)

分类: LINUX

2012-04-01 17:19:00

上一节提到如果想要使Linux系统能够开启图形化桌面,需要有X层协议的支持,而X协议的具体实现是由专门的GNU项目来做的,在以前,实现此协议的GNU项目是XFree86,而如今,已经被Xorg所代替,也许将来Xorg也会完全被Wayland替代。
 
打开Xorg的官方,可以查看到当前稳定版本的Xorg是X11R7.6,这个版本的命名是什么意思呐?R7代表当前的X协议是第7个版本,6代表的是第6次发行。在Fedora 17发行版本中,可以使用下面的命令来查看所有xorg相关的rpm包:

# rpm -qa|grep xorg

 
 
1. Xorg架构
Xorg的架构分为两部分:X Server 和 X Client,系统首先会启动 X Server,有了server的支持以后,就可以开启上层的X Client了,X Client具体指什么呢?可以简单的理解为我们上层的窗口管理器或GUI应用程序,比如:xterm, twm, gnome-session等,这些Client怎么和X Server交互呢?也就是通过所封装的X协议来相互交互通信:
 
 
2. 第一层封装(Xlib)
这里所谓的第一层封装是指Xlib,可以想这么一个问题:尽管X Server提供了服务支持,但是怎么基于X协议去开发不同的 X Client呢?如果每开发一个Client都要去分析X的协议层,是不是很麻烦,很不人道?

于是,就有了这里所说的第一层封装Xlib库,Xlib库对X协议进行了一系列的封装,以提供一个相对友好的接口,以供大家开发X Client,那么,有那些Client是基于Xlib库来开发的呢?比如 xterm 这个轻量级的终端可以让你执行linux命令,再比如 twm 这个简易的窗口管理器可以让你的xterm能够拖动,能够最大化,最小化等。只要你愿意,你也可以基于Xlib库提供的接口,来开发一个属于你自己的X Client ...
 
上一节有朋友问fvwm这个窗口管理器,我自己对它没有太多的使用经验,我一直热衷于openbox,fvwm这个窗口管理器是在twm的基础上开发的,猜想它所调用的还是Xlib库里面的接口。

如何体验X Server和X Client的原始交互模式呢? 大家可以先 init 3 进入命令行终端,然后执行 xinit 命令,该命令首先启动X Server,然后再把 xterm 作为第一个 X Client启动,如果你已经装了twm或fvwm,可以在xterm中输入命令去启动它们。

如果你不想使用 xinit 命令来体验,而是想真真实实的看看 X Server是如何启动的,进入 init 3 模式后,可以使用下面的命令来启动 X Server,并启动 xterm这个Client:

# X :0 & xterm -geometry 1 1 -n login -display :0

 
 
3. 第二层封装(QT或GTK )
有了上面的Xlib库对X协议作第一层封装后,就可以基于Xlib库提供的接口开发一些简单的X Client,但这样的Client功能过于单一,样式也不甚美观,于是乎,有强大的组织,强大的团队开发出了像KDE,Gnome等这种庞大的窗口管理器作为Client,那这些窗口管理器是基于Xlib库来开发的吗?

当然不是,KDE是基于QT库来开发的,而Gnome桌面是基于GTK 来开发的,QT和GTK 都对Xlib库作了不同层次的封装,经过QT和GTK 的再次封装后,就可以基于QT或GTK 所提供的接口开发界面美观的GUI程序,于是,才有了我们今天所见到的美好世界。
 
这里为什么是GTK+ ,而不是GTK呢?因为GTK+包括GDK和GTK,对Xlib库真正封装的是GDK,而GTK依赖于GDK,提供一些基本的GUI Widget。
阅读(6633) | 评论(0) | 转发(9) |
给主人留下些什么吧!~~