一.X-Window系统简介
X-Window(也常称为X11或X)系统是一种以位图方式显示的软件视窗系统,最初是1984年麻省理工学院的研究,之后变成UNIX、类UNIX、以及OpenVMS等操作系统所一致适用的标准化软件工具包及显示架构的运作协议。X Window系统通过软件工具及架构协议来建立操作系统所用的图形用户界面,此后则逐渐扩展适用到各形各色的其他操作系统上。现在几乎所有的操作系统都能支持与使用X。更重要的是,今日知名的桌面环境——GNOME和KDE也都是以X Window系统为基础建构成的。
二.X-Window的发展历史
知晓过去才能明白现在,预见将来,我们需要清楚的了解X-Window的发展历史,尽管这有些曲折。
1、 前身:
事实上,早在X出现前已有几个位图式的软件显示系统已经存在,例如帕洛阿尔托研究中心(施乐公司)提出的Alto(1973年)和Star(1981年)、苹果计算机提出的Lisa(1983年)和麦金塔(1984年)、在UNIX世界也有雅典娜工程(1982年)和Rob Pike的Blit终端机(1984年)。
1983年之前称为W-Window系统的窗口系统是X的真正前身(在拉丁字母里面 X 直接接在 W 后面)。W-Window系统运行于系统V之上,W使用一个支持终端机和图形窗口的网络协议,而服务器维护显示的列表。
2、 起源:
X-Window于1984年在麻省理工学院(MIT)电脑科学研究室开始开发的,当时Bob Scheifler正在发展分散式系统(distributed system),同一时间DEC公司的 Jim Gettys 正在麻省理工学院Athena计划的一部分。两个计划都需要一个相同的东西——一套UNIX机器上运行优良的视窗系统。因此合作关系开始展开,他们从斯坦福(Stanford)大学得到了一套叫做W的实验性视窗系统。因为是根据W视窗系统的基础开始发展的,当发展到了足以和原先系统有明显区别时,他们把这个新系统叫做X。
3、版本发展历史
(注:X11协议设计由Scheifler领导,并在nascent Internet的开放邮件列表上广泛讨论。于是X成为最早的较大规模的开源软件项目之一)
4、 对X-Window的管理历史
1)MIT X协会与X协会公司
1987年,随着X11取得明显成功,MIT希望免除X的管理责任。但是1987年6月与9个厂商举行会晤,这些厂商表示他们相信为了避免 X 由于商业因素而分裂,需要中立方的参与。1988年1月,X协会(X Consortium)做为非营利厂商团体而成立,由Scheifler担任主管,而Keith Packard担任高级开发人员,确保 X 能持续以中立超然的立场提供商业与学术教育所需的开发。1993年,X协会公司(X Consortium, Inc.;非营利性质的公司)做为MIT X协会的接继者而成立
2)开放团体
1997年中,X Consortium将X的管理交给开放团体(The Open Group),而它是1996年由开源软件基金会(Open Software Foundation;OSF)和X/Open合并成立的厂商团体。
3)X.Org
1999年5月开放团体组建了X.Org。X.Org指导了X11R6.5.1之前的版本发布。在此期间X的开发死气沉沉。2003年,随着Linux的流行X被大量安装。但是X.Org几乎无声无息,活跃的开发由XFree86承担。
4)XFree86
在19*至1990年期间,托马斯?罗尔把X11R4分类器上提供的X服务器程序的源代码下载到运行速度仅为33MHz的386PC 上,成功运行了被他称为是X38611.1的X服务器。这就是XFree86的雏形。
1992年后多数技术创新都发生在XFree86项目中。1999年,由于众多对于XFree86在Linux上应用有兴趣的硬件厂商的推动,并也已经成为最普及的X版本,XFree86成为X.Org的荣誉成员(不付费)。
但是自2003年开始,XFree86内部却发生了争论。它被认为太教堂式了,如同它的开发模式;开发者不能通过CVS做提交,而厂商被迫维护大量补丁。2003年3月,自从最初的MIT X Consortium结束之后就参加XFree86的Keith Packard由于被认为态度不良而被驱逐
X.Org和XFree86开始讨论能够有助于X开发的重组Jim Gettys早在2000年就热心于开放的开发模式。Gettys、Packard和其他几个人开始讨论有效管理X和开放式开发的细节。
最终就像是X11R*许可证争议的回响,XFree86于2004年2月在更加严格许可证下发布了4.4 。许多依赖X的项目认为该许可证无法接受,特别是它和GNU General Public License不兼容。这引起一场论战,许多人认为到了该对XFree86分叉(fork)的时候了,许多Linux发行版,包括Fedora、Gentoo都纷纷在最新的版本中使用X.Org基金会的发布代替XFree86。
5)X.Org基金会
2004年年初X.Org基金会成立。这意味着 X 在管理上的根本转变。1988年以来 X 的管理者(包括过去的X.Org)都是厂商组织,而基金会由软件开发者领导,采用依靠外部参与的集市模式的社区开发。其成员身份对个人开放,法人成员则成为赞助者。X.Org还开始同freedesktop.org密切合作
三.X的设计原则
X的设计原则,早在最初仍在麻省理工学院的阶段(1984年)就已经成形,由Bob Scheifler和Jim Gettys两人制订出X最早的开发、强化、改进原则,原则大体如下:
1、除非没有它就无法完成一个真正完整的应用程序,否则不用增加新的功能。
2、决定一个系统不是什么和决定它是什么同样重要。与其去适应整个世界的需要,宁可使得系统可以扩展,如此才能以持续兼容的方式来满足新增需求
3、只有完全没实例时,才会比只有一个实例来的糟。
4、如果问题没完全弄懂,最好不要去解决它
5、如果可以通过10%的工作量得到90%的预期效果,应该用更简单的办法解决。
6、尽量避免复杂性。
7、提供机制而不是策略,有关用户界面的开发实现,交给实际应用者自主。(这和驱动开发的思想一脉相承)
之后,上述原则中的第一项原则在设计X11时被加以修改,修订成:“除非已有真正的应用程序,真的需要X为其修订、增订等支持,否则不会为X增加新功能。”X基本上一直遵循这些原则,参考实现的扩展及改进也是以此原则的角度来着手,也因为奉行上述原则,使至今的最新版X仍能与最初(1987年)发布的协议标准近乎完全兼容。
这些原则性的东西短短几句话,就为一个庞大项目奠定了一个良好的基调和发展方向,使X问世以来经久不衰,没有这几个原则是做不到的。
四.X-Window的功能
X-Window提供了一组非常底层的服务,客户端程序发送请求给X-Window, X Window根据请求完成相应服务。通过这些服务,客户端程序可以构建期望的用户界面。根据不同的功能,可以把这些服务分为以下几大类:
1、处理输入
X-Window从键盘和鼠标接受输入,这些输入数据被当作”事件”传送给适当的客户端程序。至于哪个窗口应该接受到这些事件,是依赖于窗口管理器的(窗口管理器实际上也是一个客户端),典型的事件包括按键,鼠标移动,鼠标按下/放开等。
输入设备往往是与硬件平台相关的,而且又是独占资源,所以用X-Window管理是理所当然的。应用程序通常不需要关心具体的设备,只要处理相应的事件就行了,像mouse和笔点可能发出同样的事件,而应用程序不用区分它们。输入事件也可以通过XTest扩展,由软件模拟出来的(通常用来实现软件键盘)
2、按层次形组织窗口
X-Window提供服务让客户端程序创建/销毁窗口,所谓的窗口就是屏幕上的矩形区域,它是可以层层嵌套的,有很多操作可以作用于窗口(如,查询或改变窗口的大小和位置等),X-Window的主要功能之一就是负责管理这种按层次形组织的窗口。
不过X-Window管理这些窗口是被动进行的,由窗口管理器根据用户的行为决定。它请求X-Window做相应的动作,比如移动窗口,调整窗口的大小,改变窗口的前后关系等等。第一次接触X-Window时,得知窗口管理器是一个普通的客户端时,我觉得惊讶,这种设计真是太先进了,其实它正是遵循了提供机制而不是策略这一原则。
现在已经有很多窗口管理器的实现可用,它们提供不同的风格和功能,有的用于PC,有的用于嵌入式系统,像matchbox就是在嵌入式上比较流行的,像Nokia的N770/N800就是用的matchbox。
3、提供图形操作
X-Window提供了一些基本的画图操作,如画直线、矩形、圆弧和多边形等。这些图形的颜色、线宽、填充类型都可以由客户端程序指定。X-Window同时提供了许多位图操作,这些位图操作可以作用于了窗口的各个区域。
X-Winwod还会充分挖掘硬件的加速特性,像填充、画直线和图像叠加等操作,如果硬件支持相应的加速功能,就可以通过硬件实现,否则就用软件实现。
4、提供文本和字体操作
X-Window提供了字体相关的操作。客户端程序可以请求X-window在指定的区域用指定的字体显示指定的字符串,当然在此之前应该请求X-window加载字体,加载后客户端程序可以得到关于字体的一些信息。
实际上,这一功能由于客户端字体绘制的流行,而大大弱化了,现在的字体差不多都是在客户端绘制好后,再通过X Render扩展显示到X-Window去的。在fontconfig/freetype/pango/cairo的帮助,在客户端绘制字体更容易使用。
名词解释:
位图:
位图(Bitmap),又称光栅图(Raster graphics),是使用像素阵列来表示的图像,每个像素的色彩信息由RGB组合或者灰度值表示。根据颜色信息所需的数据位分为1、4、8、16、24及32位等,位数越高颜色越丰富,相应的数据量越大。其中使用1位表示一个像素颜色的位图因为一个数据位只能表示两种颜色,所以又称为二值位图。通常使用24位RGB组合数据位表示的的位图称为真彩色位图。
视窗系统:
视窗系统(Windowing system) 是“使用视窗当作它的主要象征之一”的图形使用者接口的构成元件。更为明确的说,是桌面环境的构成元件。视窗系统支撑着视窗管理员的实现(implementation);对于“图像硬件(graphics hardware)、指向装置(pointing devices)比如鼠标与键盘等装置”提供基本支持。绘制鼠标光标,一般也与视窗系统相关。
从程式设计师的观点来看,视窗系统是作出绘图的基本单位,比如字型绘制,或是在屏幕上划线,有效地提供绘图硬件的一种抽象概念。
视窗系统能让电脑使用者同时与数个程式一起工作。每个程式在他自己的视窗中执行,也就是屏幕上的矩形之中。大部份的视窗系统允许视窗重叠,且提供使用者执行标准的操作,像是移动/改变视窗尺寸,把视窗送到前景/背景,和最小化/最大化一个视窗。
有些视窗系统,像是 X,有先进的能力比如网络通透性,允许使用者在远端机器上执行图形的应用程式。
雅典娜工程:
雅典娜工程是MIT、DEC以及IBM的一个联合工程,历时八年,于1991年6月30日告一段落。该工程意图建立一个计算机环境,容纳多达一万台工作站,以及各种硬件。用户可以访问其中的任何工作站,存取任何文件、程序,但在用户界面以及服务传递上,看起来不会有大的区别。
这个工程产生了许多现在被广为使用的技术,比如X Window System、Kerberos。雅典娜工程开发的其他技术包括Xaw部件工具箱、Zephyr通知服务、第一个即时通讯服务,以及Hesiod名,还有目录服务。