作者:杨硕,华清远见嵌入式学院讲师。
一.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、版本发展历史
版本 |
发表日期 |
重大变更 |
X1 |
1984年6月 |
首次使用"X"作为称呼;基金会自此将W与X区隔。 |
X6 |
1985年1月 |
首版授权给若干的外部公司。 |
X9 |
1985年9月 |
彩色化,以及首次以MIT授权方式发布。 |
X10 |
1985年后期 |
开始能在IBM RT/PC、IBM PC AT(使用DOS操作系统)以及其他硬件上运行。 |
X10R2 |
1986年1月 |
|
X10R3 |
1986年2月 |
首次在MIT之外发布。uwm使窗口管理员(Window Manager)程序标准化。 |
X10R4 |
1986年12月 |
发布X10的最后一版。 |
X11 |
1987年9月15日 |
首次发布现有X Window系统所用的协议(Protocol)。 |
X11R2 |
1988年2月 |
以X协会(Consortium)之名的首次发布。 |
X11R3 |
1988年10月25日 |
发布XDM。 |
X11R4 |
1989年12月22日 |
XDMCP、twm成为标准的窗口管理员(Window Manager)程序,同时强化应用程序、发布Shape extension及新的字体。 |
X11R5 |
1991年12月5日 |
发布PEX、Xcms(色彩管理功用)、字体服务器、X386。 |
X11R6 |
1994年5月16日 |
发布ICCCM v2.0;Inter-Client Exchange(用户端间的交换);X Session Management(进程管理程序);X Synchronization extension(同步机制延伸程序);X Image extension(图像延伸程序);XTEST extension(XTEST延伸程序);X Input(输入用程序);X Big Requests;XC-MISC;变更XFree86。 |
X11R6.1 |
1996年3月14日 |
发布X Double Buffer extension(双重缓冲延伸程序);X keyboard extension(键盘延伸程序);X Record extension(记录延伸程序)。 |
X11R6.2 |
1996年12月23日 |
发布Web功能功效、LBX。以X协会之名的最后一次发布。X11R6.2是X11R6.3的子集合(subset),X11R6.3只针对原有X11R6.1进行特点强化,如XPrint以及可以直书的Xlib,以及可由用户进行特性定义。 |
X11R6.4 |
1998年3月31日 |
发布Xinerama。 |
X11R6.5 |
|
X.org的一次内部发布,没有对外公开。 |
X11R6.5.1 |
2000年8月20日 |
|
X11R6.6 |
2001年4月4日 |
修复错误、变更XFree86。 |
X11R6.7.0 |
2004年4月6日 |
首次由X.Org基金会进行发布,此一发布新增了XFree86 4.4rc2。此外也有完整的末端用户的发行版本。移除XIE、PEX及libxml2 |
X11R6.8.0 |
2004年9月8日 |
发布Window translucency、XDamage、分布式多头X、XFixes、Composite、XEvIE等。 |
X11R6.8.1 |
2004年9月17日 |
修补libxpm的安全防护功效。 |
X11R6.8.2 |
2005年2月10日 |
修补错误,更新驱动程序。 |
X11R6.9 |
2005年12月21日 |
发布EXA,主要的原始代码进行再拆解、组构,以相同的原始代码为基础,派生出模块化的7.0版以及一体性、团块性的6.9版。 |
X11R7.1 |
2006年5月22日 |
强化EXA,集成Kdrive、AIGLX,强化操作系统及平台的支持性。 |
X11R7.2 |
2007年2月15日 |
移除LBX。 |
X11R7.3 |
2007年9月6日 |
XServer 1.4, Input hotplug, output hotplug (RandR 1.2), DTrace probes, PCI domain support. |
X11R7.4 |
2008年9月23日 |
XServer 1.5.1, XACE, PCI-rework, EXA speed-ups, _X_EXPORT, GLX 1.4, faster startup and shutdown. |
X11R7.5 |
预计2009年6至9月 |
XServer 1.7, XKB 2 and Xi 2, XGE, RandR 1.3 (GPU object), MPX, predictable pointer acceleration, DRI memory manager, DRI2, Shatter, further removal of obsolete libraries and extensions. |
(注: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
在1989年至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和开放式开发的细节。
最终就像是X11R6.4许可证争议的回响,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的功能
注:这部分内容转载自http://blog.csdn.net/absurd/category/336948.aspx
作者E-mail:[email protected]
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名,还有目录服务。