文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Xwindow读书笔记2

Xwindow读书笔记2

时间:2005-12-09  来源:rickyweiwei

X的基本元素  

X不像早期的视窗系统,把一堆同类软体集中在一起,而是由三个相关的部份组合起来。
1.  一个"server"(供应者):是控制实际显示器和输入装置的程式。
2.  "Client" (顾客) 程式:需藉著server在指定的视窗中完成特定的操作。
3.  一个 "通讯通道(communication channel)":client和server用来作为彼此交谈之用。

Server 

    Server是控制实际显示器和它的输入装置 (键盘和滑鼠或其它指示装置)的软体,server可以建立视窗、在视窗中画图形影像和文字、回应client程式的 "需求" (requests),它不会自己动作,只有在client程式提出需求後才完成动作。
     每一个显示器只有一个唯一的server。server一般由系统的供应厂商提供,通常无法被使用者修改。针对作业系统而言,server只是一个普通的使用者程式而已。

Client 

    Client是使用系统视窗功能的一些应用程式。把X下的应用程式称"client",原因是因为它是server的 "顾客" :它要求server应它的需求完成特定的动作。Client无法直接影响视窗或显示,它们只能送一个 "需求" (request) 给server,让server来完成它们的需求。典型的 "需求" 通常是: "在 XYZ视窗中写一列 'Hello, world' 的字串" ,或 "在 CDE视窗中用这种颜色从 A点到 B点画一条直线" 。

    在X视窗上的显示只client程式许多输出格式中的一种,所以,client程式中和X相关的部份在整个程式中,只占了非常小的一部份。使用者可由不同的来源来使用client程式:一些是由系统提供的 (例如时钟) ,一些来自於第三方,一些是使用者为了特殊应用而撰写他自己的clien程式。
 
通讯通道 

    X的第三个元素为通讯通道,client藉著它送 "需求" 给server,而server藉著它回送状态 (status) 及一些其它的资讯 (information)。只要 client 和 server 都知道如何使用通道,通道的本身并不是很重要,在系统或网路上支援通讯型态的需求是内建於系统基本的X视窗函数库(library) ,所有和通讯型态有关的事都从函数馆独立出来,client和server之间的通讯只要藉著使用这函数馆(在标准X版为xlib)即可 。 
    总结来说,只要client程式利用函数馆,自然有能力用到所有可用的通讯方法。

Client和Server通讯大略分为两类,相对应於二种基本X系统的操作模式: 
    1.  server和client在同一部电脑执行,则它们彼此均可使用机器上任何可用的方法做交互处理通讯(inter-process communication (简称IPC)),在这种模式下,X可以像许多传统的视窗系统一样有效率的操作。
    2.  client在一部机器上执行,显示器和server则在另一部机器上,则client和server的通讯必需透过网路利用彼此同意的协定(protocol)方可。目前,最常见的协定为TCP/IP和DECnet,但其它任何被提供的可信赖地协定亦可使用。这种透过网路,使得应用程式的操作,如同在本地机器一样的能力称为网路透通性(network transparence),几乎是X独一无二的特性这种特性使得它非常适合建立在有弹性地多目标混合机网路上。

Server和Client如何交谈
Client送达server的东西;Output Handing (输出交予)
Server送达Client的东西;Input Handling (输入交予)

使用者介面分为两个部份: 
    管理介面:命令最高层的视窗如何在萤幕上建构或重建构(re-configured), 也就是说,如何管理你的案头。 
    应用介面:决定你和应用程式间交谈的”风格”(style): 如何利用X系统的设备程式来控制应用程式及输入资料给它。 如何将输入给xserver,然后由它转交给xclient。

管理介面:视窗管理器 
    管理介面(management interface)是系统的一部份,用以控制你萤幕上最上层的视窗(换句话说:如何重新建构你的案头),这个部份在系统中称之为窗口管理器(window manager),它的功能有改变视窗的大小或位置、将视窗在堆叠 (stack)中重新安排位置、或将视窗改变成表徵图 (icon) 等等。有两类的视窗管理器:手动的和自动的。
    在X中,视窗管理器只是另一个client程式而已,它以及系统介面的发展,和server是完全分开的,因此你可以更换它们,这类似於Unix系统中的shell
命令列直译器(interpreter) :shell 只是一个使用者处理程式(process) ,如果你改变它,你也改变了系统的使用者介面。

X用到一些几何学的术语来说明一个视窗的位置和大小, 大部份的X程式接受一个含有geometry的命令列 (command line) 来启动 (stratup)它们, 这个命令列说明了这个程式的视窗有多大, 以及在萤幕的哪一个位置显示. 通常geometry的格式如下:
宽度 x 高度 + X偏移量 + Y偏移量

说明:建立一个大小为 宽 x 高 的视窗, 视窗的位置为左边框距萤幕左边界 X偏移量个像素, 上边框距萤幕上边界 Y偏移量个像素. 例如假设一个程式以字元为视窗大小单位, 则格式80 x 24 + 600 + 400 的意义为: 建立一个 80 字元宽 24 字元高的视窗, 并且视窗的左边框距萤幕左边界 600个像素, 上边框距萤幕上边界 400个像素.

在你的显示器启动X,键入命令:
xinit
则会依序发生:
1、 你的整个萤幕会被设定成灰色。
2、一个巨大的 "X" 游标出现
3、一个xterm 终端机模拟器的视窗出现在萤幕左上角,当游标移到这个视窗时,会改变成本文游标,xterm 准备接受你的命令。

X现在已被启动,你可以把xterm 这个视窗当成一个普通的终端机来使用,执行一些普通的指令,不过它最大的价值在让你可以开始执行其它的X程式;

xinit 的内部操作

首先, xinit 启动Xserver程式在你的显示器上执行, server建立一个它自己的根视窗, 并把视窗的背景色设定成灰色, 把游标设定成一个大 "X".在server执行的期间, server一直控制著键盘及滑鼠, 这就是你能在萤幕上移动游标的原因, 但是因为目前没有任何client程式要求告知键盘和滑鼠 "事件",所以server只是追踪滑鼠游标的移动, 而所有其它的键盘或滑鼠输入虽然都经过server处理但均被放弃, ( 因为没有client程式有兴趣 ),这就是按键盘或滑鼠按钮没有反应的原因.

接下来, xinit 启动xterm 程式执行, xterm 对server而言是一个client程式, xterm 要求server建立一个视窗, 而且保持告知在这个视窗中的滑鼠和键盘事件, xterm 设定在视窗中执行一个shell , 当指标移至视窗之内便准备接受输入.键盘输入被送至shell 就如同在一部真的终端机上输入一般, 从shell( 及其副程式 )的输出藉著xterm 显示在视窗上, xterm 也接受滑鼠输入,使得你能设定不同的程式操作参数和进行本文的剪贴 (cut and paste ) .

你可以观察到系统执行这些动作的步骤, 例如当在系统启动後, 在xterm视窗内执行 ps a 命令。

接着在xterm 视窗中输入:xclock;一个小的时钟影像出现在萤幕左上角,覆盖了第一个视窗一部份。按下ctrl-c或DEL 键时,xclock消失。
要克服这种状况,你需要非同步(asynchronously)执行xclock,用命令:xclock &

X server 本身没有提供直接的介面中止应用程式,但是有一个叫xkill的client程式可让你杀掉应用程式,在xterm 视窗内输入xkill 命令便可启动
这个程式。

$ps a | grep xclock
$kill PID

如何避免时钟和xterm 视窗重叠?
xclock -geometry 200x300+400+500 &
这个命令告诉xclock建一个宽200 高300 个像素的视窗,位於萤幕左上角右边400 个像素,下边500 个像素。
xclock -bg turquoise -fg red -hd magenta
xcalc - geometry +700+500 &
xcalc 比 xclock 有一个优点,那就是容易中止它。在计算器AC按钮上碰触滑鼠右按钮即可中止,大部份的X应用程式均有类似的中止设备。

关闭X

要关闭X视窗,只要移动指标到最初xterm 的视窗,输入:logout
则视窗消失,server终止,X也被关闭。详细点说,xterm 查觉到shell 终止时,也终止自己,而xinit 一查觉xterm已经结束,便杀掉server後离开。

相关阅读 更多 +
排行榜 更多 +
坦克冒险大师安卓版

坦克冒险大师安卓版

策略塔防 下载
自动防御

自动防御

策略塔防 下载
枪战大乱斗2

枪战大乱斗2

飞行射击 下载