架构及原理
Xwindow 使用服务器-客户端架构。无论本地图形界面,还是远程图形界面,都以同样的流程工作。这样便不需要分别进行设计和维护。
本地X客户端 ┐ ┌ 键盘
远程X客户端 ┼ X协议 ─ X服务器 ─ 驱动程序┼ 鼠标
远程X客户端 ┘ └ 显示器
Xserver
Xwindow 系统服务器端,通过驱动程序(硬件规范)来管理硬件资源。
例如:当我们移动鼠标时,通过驱动程序[32] ,向 Xserver 发送信息:
“向右移动200点,向上移动100点”(向右上移动);“按下左键”……
Xserver 作出如下响应:
- 上一次鼠标停止的坐标为 600,500
- 向右 200,向上 100。现在鼠标位于坐标 800,600
- 坐标 800,600 处,为窗口 Firefox 的“关闭”按钮
- 根据预设动作,将 “点击 Firefox 窗口的关闭按钮” 翻译为 “关闭窗口 Firefox”
- 向X客户端 Firefox 发送一个“退出”消息
- Xserver 通过显示子系统(显卡、显示器),全程显示鼠标的位置和移动
- 事实上,向程序发送“退出”信号,通常窗口管理器完成。为了描述方便,这里暂不区分。稍后,我们将向您介绍 窗口管理器 的其它一些细节。
Xclient
Xwindow 系统客户端,通过 X协议,实现与 Xserver 的交互。例如:
- Xclient (假设 Firefox) 接收 Xserver 的消息: 输入焦点在地址栏的范围内,“linuxtoy.org”,回车
- Firefox 根据预设动作,将这些消息识别为 “打开链接 linuxtoy.org”
- Firefox 向域名服务器请求 链接 “linuxtoy.org”。域名服务器将这个请求转换为 “http://linuxtoy.org/” 和 IP地址211.148.131.7,发送回 Firefox
- Firefox 将 “http://linuxtoy.org/”显示在地址栏(向 Xserver 发送请求,在地址栏位置显示这个地址)
- Firefox 向地址 211.148.131.7 请示显示页面
- Firefox 将服务器发送回的页面显示在主窗口中
Xprotocol
Xwindow 系统协议,Xserver 和 Xclient 之间进行通信的规则
[32] 大多数的鼠标不需要专门的驱动程序,因为它们符合某一硬件规范,例如:有四个移动方向和三个键