第壹部 系统概观
第1章 使用者对X WINDOWS系统的概观
X Window System 是一套在各种位元映像显示器 (bitmapped
dispalys) 上具有极大可携性 (portable) 的视窗系统 (window system),
它是由麻省理工学院 (MIT)所发展出来. X Windows System ( 本书以後部
份简称为X) 可在许多系统上执行. 由於它和生产者无关、具可携性、对彩
色掌握的多样性及对网路之间的操作透通性 (operate transparently), 使
得X成为一个工业的标准. 由於原始程式可自由使用, 所以它也是一个优良
的研究媒介.
X视窗系统是一个让程式设计师发展可携性图形使用者介面的工业软体
标准, X最重要的特徵之一是它独特的与设备无关结构.任何硬体只要提供
X协定 (Protocol),便可以执行应用程式显示一群包含图文的视窗,而毋需
重新编译和连结.这种与设备无关的特性,使得只要是根据X标准所发展的
应用程式,均可在不同的环境下如大型电脑,工作站,个人电脑上执行,因
而奠定了X成为工业标准的地位.
X可以在一些 UNIX 系统的电脑上执行, 如 Alliant, Apollo, DEC, IBM,
Hewlett-Packard, Sun等, 也可在 DEC的 VAX/VMS, MS-DOS及一些其它的系
统上执行. 其它的一些厂商如 AT&T, Adobe, Control Data, Data General
, Fujitsu, Prime, Siemens, Silicon Graphics, Sony, Texas Instruments,
Wang, Xerox 均曾表示支援X.
1.1 X有什麽特点?
以下四个特徵说明了X大部分的能力及其受大众欢迎的原因:
.X具有网路透通性(Network Transparent): 透过网路,应用程式在
其他机器输出显示就和在自己机器上一样容易.此种通讯架构和网路
上另一端的它种机器完全语言无关和机器无关,甚至不需相同的作业
系统.总结一句,程式可以在另一种不同的显示器型态下执行而毋需
重新编译(re-compilation)和重新连结(re-linking).
.可支援许多不同风格的使用者介面,管理视窗的功能例如视窗的摆放
,大小及显示顺序等等并不包含於系统中,而是由应用程式来控制,
因此可轻易的更换.不同风格的介面关系於不同的应用程式,利如卷
动视窗中的文字和选择视窗中的一个物体,彼此间不会互相限制.
.X不是电脑作业系统的一部分:对作业系统而言,X只是一个应用程
式而已,因此,X很容易在不同的系统上装设.
.视窗是阶层性的 (hierarchical): 应用程式可以直接利用视窗系统
已有的设施 (facilities) 便可满足大部分的需求,而毋需藉助其他
的输入或控制结构 (mechanisms). (例如:选单(menu)可利用一个分
支的子视窗来产生.)
所有的特徵均会在以下的章节中作进一步详述.
1.2 什麽是视窗系统?
本节讨论一般视窗系统的一些基本概念, X视为其中一个特例, 如果你
已熟悉其它的视窗系统, 本节内容仅需快速浏览即可.
X是一个在位元映像显示萤幕上建立和管理视窗的系统, 它可以在拥有
位元映像显示器、键盘和一些可以指示萤幕上特定位置或物件的装置的工作
站或他种型式拥有位元映像显示器的终端机上执行. X把指示位置的装置叫
做指标 (pointer), 通常为滑鼠(mouse),X支援现今电脑上常见的视窗使用
者介面.
使用视窗系统常常拿来和在普通办公桌上的工作比较, 你的桌面上通常
放了一些纸, 信件和手边相关的工作, 一些有用的工具 (如时钟, 日历, 计
算器等),当进行到工作的另一个部份, 你会从新安排桌面上的纸, 你可能把
工具集中放在一起, 也可能不时参考桌上仍然看得到的纸的内容, 过了一阵
子, 你可能把其中的一些资料暂时摆到一边, 或者通通从桌面上移走.
上述是一个人的工作模式, 把它搬到电脑, 如果能提供相同的功能是很
理想的, 很不幸地, 老式的终端机或 CRT限制了你一次只能在萤幕上做一件
工作, 而且只能看见一小部份的文字资料 (通常为24行),图形的工作就更别
提了, 现在视窗系统试图克服这点, 通常它提供你一个较大的萤幕, 允许你
同时看到几件工作项目, 可以显示图形, 甚至有彩色.
X便是依照上述视窗的工作模式发展出来的, 在X的环境下、一个视窗
是萤幕上的一块长方形区域, 且平行於萤幕的边, 通常, 每一个视窗 (注1)
被一个独立的应用程式所专用, 数个应用程式可以" 同时" 在它自己所拥有
的视窗上显示输出结果,X允许视窗重叠. 见图 1 - 1
注 1: 严格地说, 应该说成" 一个最高层 (top level)的视窗",因为X允许
视窗有阶层, 所以, 一个典型的应用视窗可以包含许多子视窗
(sub-window)分别用来做控制、输入及显示等功能.
┌——————————————┐
│ page 6. Fig 1.2 │
│ │
│ │
│ │
│ │
│ 图 1 - 1 重叠的视窗 │
└——————————————┘
但即使视窗的部份或全部被其它视窗遮盖, 应用程式仍然可以对它自己
所拥有的视窗做输出. 设备程式 (facilities) 提供在萤幕上移动视窗、改
变视窗大小、把视窗放在最上一层或最下一层等功能。即便是视窗可以重叠
, 为了方便而在同一萤幕开了许多视窗仍然非常费时, 因此, 就如同其它的
视窗系统一般,X提供表徵图 (icon), 我们在萤幕上用一个表徵图代表一个
应用视窗, 当我们对应用视窗表徵图化 (iconify)後, 视窗被从视窗上移走
, 代之以表徵图, 而空出了较多的萤幕空间, 相反的动作为解除表徵图化 (
de-iconify),也就是以原先的视窗取代表徵图。
一些便利的功能, 例如时钟或日历, 并非内建於系统, 而是由许多小的
应用程式所提供.
对於输出, X提供了许多写文字和画图形到视窗上的功能选择, 许多种
的字型 (FONTS)可以非常容易并且做一致性的处理, 有许多图形的结构和绘
图的基本方法, 例如点, 线, 弧线, 区域 (areas)被提供, 色彩的掌握更是
丰富, 这些复杂的部份对使用者而言是隐藏起来的, 使用者可以简单和方便
的使用它们,例如, 在应用上, 你可以用 "*times-bold-i*"表示要使用加倍
粗的斜体字型 (italic),你需要使用彩色时, 你只要用日常的名称, 例如
"yellow(黄色)" 或 "navy blue (天蓝色)".
对於输入功能的提供, X也是多样化的, X可以连结不同形式的键盘,
如传统的QWERTY键盘或Dvorak Style键盘, 或者是不同国家的特殊规定. 处
理使用者介面是输入功能很重要的一个部份, 键盘和滑鼠的指令告诉系统如
何架构一个视窗和处理视窗的内容.
由於X的视窗处理功能并非内建於系统, 而是建在使用者层次, 因此容
易於修改或更换, 所以X能提供不同形态的使用者介面。换个角度来说,使
用者介面所必需具有的弹性几乎完全可由X独立提供.
1.3 X简史
X於1984年在麻省理工学院 (MIT)电脑科学研究室开始发展, 当时 Bob
Scheifler 正在发展分散式系统 (distributed system),同一时间 DEC公司
的 Jim Gettys 正在麻省理工学院做 Athena 计画的一部份, 两个计画都需
要一个相同的东西 ------ 一套在 UNIX 机器上优良的视窗系统. 因此合作
关系开始展开, 他们从史丹佛 (Stanford) 大学得到了一套叫做W的实验性
视窗系统, 因为是根据W视窗系统的基础开始发展,当发展到了足以和原先
系统有明显区别时,他们把这个新系统叫做X.
工作持续地进行, 新的版本 (version)不断地产生 (当软体和前一版不
相容时, 新的版本便产生了),在1985年中期, 任何人只要付版权费便可使用
X的基本政策被决定. 以下为一些最近的记事:
第10版: 1985年底. 直到此时, 在 MIT以外的人和组织, 才开始对X有
实质的贡献.
第一套商业化的X产品: DEC 於 1986 年 1月推出 VAXstation-II/GPX.
第10版第 3次发行: 1986年 2月. 从此时起, X开始流传於世, 人们把
它移植到许多新的系统上.
第10版第 4次发行: 1986年11月.
第一次X技术会议: 1987年 1月於 MIT.
在1986年间, 第10版X无法满足所有的需求已非常明显, MIT 和 DEC便从事於
完整协定 (protocal) 的重新设计, 这就是X第11版.
第11版第 1次发行: 1987年 9月.
X协会成立: MIT X协会成立, 目的是为了研究发展及控制标准, 目前有
30个以上的机构加入.
第二次X技术会议: 1988年 1月.
第11版第 2次发行: 1988年 3月.
第11版第 3次发行: 1988年10月.
1.4 X的成品
严格地说, X视窗系统并不是一个软体, 而是一个协定 (protocal),这
个协定定义一个系统成品所必需具备的功能 (就如同 TCP/IP, DECnet 或
IBM的 SNA,这些也都是协定, 定义软体所应具备的功能).任何系统能满足此
协定及符合X协会其他的规□, 便可称为X.
简单地说, 从现在起本书不再区分协定和成品的分别, 我们提到X, 意
指一个完整且适当的系统成品.
1.5 MIT 发行的X
MIT 所发行的X可以提供许多厂牌的电脑, 目前的版本 (第11版第 3次
发行) 支援以下的系统:
. Apple A/UX
. Apollo Domain/IX
. 4.3 + tahoe
. Digital Equipment Coporation Ultrix
. Hewlett Packard HP-UX
. IBM AOS
. Sun Mircosystems SunOS
此外尚有更多的商业化产品.
当系统一直在发展, 而且有更多的人使用它, 由第三集团(third party)
发展的软体逐渐增加, 而使得系统版本一分为二:
. core版 -- 软体由MIT X协会提供.
. corelib 版 -- 软体由使用者或第三集团提供.
为了方便, core和corelib 软体储存在不同的磁带上发行.
本书说明几乎以core版为主, 偶而因core版没有提供的功能或大家较有
兴趣的部份, 会参考到corelib 版本.
1.5.1 MIT 版包含了什麽
这个版本包含了文件说明, 原始码, 建构档 (configuration file) 和
公用程式 (utilities)和其它一些建立完整工作系统所必需的东面,(没有任
何目的档或二进位档提供, 系统必需由原始码建立),在此我们只讨论从使用
者观点看这个系统, 所以只描述那些视窗系统程式本身或一些使用者所需的
工具程式, 省略装设公用程式、建构工具程式、本版需知等, 这些东西可参
考附录.
core版的程式可分为以下几类:
1. X视窗系统本身的程式.
2. 使用视窗系统必备的工具和设备程式:
. 日常的视窗相关功能的工具程式 (例如将视窗内容倾印至列表机)。
. 一些你常常保持在 "案头" (desktop) 的便利程式 (例如时钟,
日历).
3. 从视窗环境获得效益的一般应用程式.
4. 展示(Demo)程式和游戏程式.
5. 资讯和状态报告程式.
6. 定制 (customise)你自己的环境的工具程式.
我们将在以下的章节讨论它们.
1.5.2 系统程式
以下的程式包含了所有基本系统的相关程式.
X - 显示server -- 这个软体控制了你的工作站的键盘、滑鼠和萤幕.
这是X的心脏, 此程式可以建立、去掉视窗, 实际的应其它 client 程式的
Request (需求)做写 (write)和画(draw)的动作.
这个server程式在各种硬体上有不同的程式提供, 例如:
Xapollo - 针对Apollo显示器.
Xhp - 针对Hp 9000/300 的Topcat显示器.
Xibm - 针对IBM 的APA16 和Megapel 显示器.
Xmacll - 针对Apple 的Macintosh II.
Xplx - 针对Parallax图形控制器.
Xqdss - 针对DEC 的GPX 显示器 (VAXstation II/GPX).
Xqvss - 针对DEC 的QVSS显示器.
Xsun - 针对Sun/2, Sun/3, Sun/4 和Sun/386i工作站.
Xinit - 初始(initialization)程式, 启动系统和设定Server执行.
Xdm - X显示管理器(display manager),一个提供便利和弹性地启动系统
, 使系统启动成个别需求的程式, 可以和 Xinit两者择一.
Uwm - X视窗管理器(Window Manager), 此程式决定如何管理你的 "案头"、
移动视窗、重定视窗大小等等, 你可以利用选单结合滑鼠的按钮
或键盘完成视窗操作.
只有Server程式是绝对必需的, 不需其它的程式, 你就可以在X系统上
跑其它的应用程式 (虽然笨了一点). (Xinit 等程式可由其它相同功能程式
替代.)
以上程式包含了视窗系统, 但除了在视窗上移动游标外, 什麽事也不能
做. 因此实际上, 你需要更多的公用程式和应用程式.
1.5.3 视窗系统公用程式
以下的工具程式并不是视窗系统的一部份, 但它们是你要更方便的使用
系统或利用系统做更多的事所不可或缺的, 它们分为以下两个部份:
1. 视窗系统操作常用工具程式
只要你用视窗系统代替一般的电脑终端机, 这些程式几乎是天天需
要的:
xterm - X终端机模拟器 (terminal emulator), 你的系统内大多
数的程式并非特别为使用视窗系统设计. 举例来说, 一些
最普通的系统程式 -- 列出档案目录, 编辑器, 编译器等,
它们在普通的终端机可以正常的执行, 可是它们如何在连
视窗系统是什麽都不知道的情况下, 在X下操作? Xterm
就是建立一个X的视窗, 且允许这些普通的 "笨哑终端机
(dumb terminal)"程式能够在这个视窗中执行的工具程式.
这些普通程式会认为它们是在 "真的" 终端机上执行. 当
然, 你也可以用xterm 去启动其它的X程式而并非一定是
那些普通程式.
xhost - 让你控制网路上那些被允许存取你的显示萤幕的其他主机。
xkill - 一个可杀掉不想要之应用程式的工具程式。
xwd - 将你视窗内目前的影像倾印 (dump) 到一个档案中,使得你可
以在稍後重建这个视窗、列印它或做一些你想做的事。
xpr - 将先前 xwd所抓取 (capture)的视窗影像转换成适合硬拷贝
(hardcopy)印出的格式.
xdpr - 结合了 xwd和 xpr,允许你在一个步骤就印出视窗的内容.
xmag - 将萤幕上被选取的一部份影像加以放大。
xwud - 将先前 xwd所抓取的视窗影像重新显示於萤幕上。
x10tox11 - 将能在第10版X执行的程式转换成可在第11版执行。
xrefresh - 更新 (refresh)显示, 将某些或全部的视窗全部重画
一遍。
2. 便利的程式
xclock - 一个指针或数字型的时钟。
xclac - 一个计算器,可模拟科学工程型的计算器。
xload - 用累计图 (histogram)来显示目前机器的负载分布。
xbiff - X版的 biff,信件到达告知 (barfs if mail arrives) 程
式,xbiff 会显示一个信箱的表徵图,当信箱上的旗子升起时,
表示有你的信。
1.5.4 一般应用和工具程式
这些程式不是直接和视窗系统相关,但视窗系统环境使它们更有效益。
xedit - 一个文字编辑器,你可以用选单或键盘下命令,也可以用指标指
定位置或一段文字。
xman - 一个说明书或系统文件的浏览器。
xmh - 一个信件管理程式。
1.5.5 示□和游戏程式
这些程式展示了X图形和彩色的能力, 在你开始使用系统时, 它们是一
个进入状况良好的起点.
ico - 显示一个二十面体 (或其它多面体) 在视窗内进行弹性碰撞运动.
maze - 以乱数建立一个迷宫并找出它的解法.
muncher - 在视窗上描绘大量动态的图样 (patterns).
plaid - 在视窗上画一些持续变化的花格子图形.
xlogo - 在视窗上印一个X的字形.
puzzle - 智慧盘, 在一 4x4方块盘上, 移动编号 1 - 15 的小方块,
以排成特定型态的游戏.
1.5.6 资讯和状态程式
以下的程式提供你有关於你的视窗系统的资讯和状态, 你将会常利用它
和你自己的工具程式连结在一起.
xfd - 在视窗内显示一个被X指定的字型,且可选择性地提供更多有关
此字型的资讯.
xlsfonts - X字型的目录程式, 告诉你一个显示器上有那些字型可供
使用.
showsnf - 显示上server上SNF(Server Natural Format,你Server上原
有的格式) 格式对某一种字型的细节.
xwininf - 显示某个特定视窗的资讯, 如大小, 位置及其它特徵.
xlswins - 列出系统内所有的视窗, 并可选择性地列出每个视窗的一些
细节.
xprop - 显示视窗的性质 (properties) 和字型.
xdpyinfo - 提供你的显示器及控制它的 server之细节.
xev - 印出和视窗相关所有X "事件(event)"的细节, 用来侦错(diagnostic)
或给有经验的人使用的工具程式.
1.5.7 定制适合你的系统之工具程式
一开始你可能不会用这些程式, 但过了一段时间, 你可能发现你必需修
改一下系统, 例如想使用较大的预设字型, 视窗边框换成自己喜欢的颜色等,
用以下的程式, 可以使你的工作环境更加适合你.
xset -- 允许依照你的喜好设定显示特性, 你可以设定一个键使它有效或
无效, 调整警告铃的音量, 指定字型从何处取得等.
xsetroot - 你可以选择你显示萤幕背景的外观, 当你滑鼠的指标不在任
何应用视窗内时, 你可以改变使用的颜色或图样或游标.
xmodmap - 显示键盘的对应 (mapping), 也就是按什麽键对到什麽字元,
可以允许你修改成适合你的对应, 通常用来设定一些特殊键 (如
META, SHIFT-LOCK等) 和函数键, 但你可以视需要设定任何键.
bitmap - 让你建立和编辑位元映像的程式, 例如用来改变cursor的式样,
编辑表徵图, 视窗的背景图样等等.
xrdb - 让你在资料库中显示或改变你喜爱的色彩或字型等等, 稍後可被
应用程式使用到. 也就是说, 你可以设定一些预设的特性, 让这
些特性被所有或只有特定的应用程式用来当作预设特性.
bdftosnf - 将一种字型从BDF("bitmap distribution format"一种可携
的格式)格式转成你Server 原有的SNF 格式.