X 视窗/X 协议:用于 UNIX 和 Linux 图形显示的 X 视窗系统协议
(X-Window/X Protocol:X Window or X Protocol or X System)
X 视窗系统协议,即 X 视窗或 X 协议,是一个图形结构,用于 UNIX 和 Linux 下的图形系统。 X 视窗系统很少用于 VMS 、 MVS 和 MS-WINDOWS 等系统。它为显示窗口图形提供了固有的面向客户机 / 服务器的基础。 X 视窗系统提供了一个公共协议,通过它客户程序可以查询和更新 X 服务器上的信息。 X 视窗系统( X 协议)允许网络中不同计算机上的进程在其它网络显示器上显示内容。
介绍服务器和客户端之间的通信是通过通道交换数据包完成的。连接由客户端建立(协议中未指定客户端如何启动)。客户端还发送第一个数据包,其中包含要使用的字节顺序以及有关协议版本和客户端期望服务器使用的身份验证类型的信息。服务器通过发回一个表示接受或拒绝连接的数据包,或者请求进一步的身份验证来应答。如果接受连接,则接受分组包含客户端在随后与服务器的交互中使用的数据。客户端和服务器之间的示例交互。
建立连接后,通过该通道在客户端和服务器之间交换四种类型的数据包:
1、请求:客户端从服务器请求信息或请求其执行操作。
2、回复:服务器响应请求。并非所有请求都会生成回复。
3、事件:服务器通知客户端事件,例如键盘或鼠标输入,正在移动,调整大小或暴露的窗口等。
4、错误:如果请求无效,服务器将发送错误数据包。由于请求排队,因此请求生成的错误数据包可能不会立即发送。
请求和回复数据包具有不同的长度,而事件和错误数据包具有32字节的固定长度。
请求数据包在收到后立即按顺序编号:来自客户端的第一个请求编号为1,第二个请求编号为2,等等。请求的连续编号的最低16位包含在回复和错误中请求生成的数据包(如果有)。它们也包含在事件包中,以指示服务器当前正在处理或刚刚完成处理的请求的序号。
窗口大多数图形用户界面中通常称为窗口的窗口称为X Window系统中的顶级窗口。术语窗口还用于表示位于另一个窗口内的窗口,即父窗口的子窗口。可以使用子窗口实现诸如按钮,菜单,图标等的图形元素。
可能放置一些窗口:1是根窗口,它覆盖整个屏幕; 2和3是顶层窗户; 4和5是2的子窗口。窗口的父窗口部分是不可见的。
客户端可以请求创建窗口。更确切地说,它可以请求创建现有窗口的子窗口。结果,客户端创建的窗口排列在树(层次结构)中。该树的根是根窗口,它是服务器在启动时自动创建的特殊窗口。所有其他窗口都是根窗口的直接或间接子窗口。顶级窗口是根窗口的直接子窗口。可见,根窗口与虚拟桌面一样大,位于所有其他窗口后面。
窗口的内容并不总是保证随着时间的推移而保留。特别地,当窗口被移动,调整大小,被其他窗口覆盖并且通常完全或部分不可见时,窗口内容可能被破坏。特别是,如果X服务器没有维护窗口内容的后备存储,则内容将丢失。客户端可以请求后台存储以维护窗口,但服务器没有义务这样做。因此,客户端不能假定维护后备存储。如果窗口的可见部分具有未指定的内容,则发送事件以通知客户端必须再次绘制窗口内容。
每个窗口都有一组相关的属性,例如窗口的几何形状(大小和位置),背景图像,是否已为其请求后备存储等。协议包括客户端检查和更改属性的请求一个窗口1。
Windows可以是InputOutput或InputOnly。 InputOutput窗口可以显示在屏幕上并用于绘图。 InputOnly窗口从不显示在屏幕上,仅用于接收输入。FVWM窗口的剖析。白色区域是客户端应用程序创建和查看的窗口。
通常在窗口周围看到的装饰框和标题栏(可能包括按钮)由窗口管理器创建,而不是由创建窗口的客户端创建。窗口管理器还处理与这些元素相关的输入,例如在用户单击并拖动窗口框架时调整窗口大小。客户端通常在他们创建的窗口上操作,而不管窗口管理器操作的更改。它必须考虑的一个变化是重新生成窗口管理器,几乎所有现代窗口管理器都将窗口管理器的父级更改为不是根的窗口。从核心协议的角度来看,窗口管理器是一个客户端,与其他应用程序没有什么不同。
可以通过运行xwininfo程序获得有关窗口的数据。传递-tree命令行参数,该程序显示窗口的子窗口树及其标识符和几何数据。
主要功能X 视窗系统( X 协议)定义的客户机和服务器角色如下:
X 服务器是一种运行在用户桌面的程序,用于管理视频系统,包括交互式 I/O 设备,如鼠标、键盘和一些特殊设备等。主要功能有:
1 )在屏幕上显示图形请求;
2 )回复请求信息;
3 )报告请求中的错误;
4 )管理键盘、鼠标和显示器设备;
5 )将键盘和鼠标输入复用到连接各自 X 客户机( X 事件)的网络上;
6 )创建、映射和删除视窗;
7 )在视窗中写和绘图。
X 客户机是一个运行在连接 X 服务器以显示图形的另一个主机上的应用程序。客户机通常运行在一个强大的 UNIX/LINUX 平台上,也就是通常的“服务器“。主要功能有: 1 )发送请求给服务器; 2 )从服务器处接收事件; 3 )从服务器处接收错误。
X 系统将各种组件分成各个单独的子系统。 X 视窗系统( X 协议)框架的主要组件有:
视窗管理员——当鼠标指针指向由特定应用程序控制的屏幕范围外时,控制事件的发生。
程序 / 文件管理员——通常是一个显示应用程序图标的程序,并允许用户运行这些程序。
内部程序接口—— X 视窗客户机通信的标准模式,称之为 ICCCM 。 CORBA 也用来提供更加精密复杂的方法用于 X 视窗通信。通信的实现基于 TCP/IP 网络。
X 视窗系统( X 协议)包括两个基本版本: X10 和 X11 。
协议结构X 协议具有以下客户机和服务器间的主要通信信息:
1)请求
X 客户机向 X 服务器发出服务请求,如创建 Window 。
为增强性能, X 客户机通常并不期望或等待响应。请求保留给可靠的网络层进行传送。
X 请求是 4 字节的任意倍。
2)答复
X 服务器响应某个的 X 客户机请求。注意:并不是所有的请求都需要响应。
X 答复是 4 字节的任意倍,但最小为 32 字节。
3)事件
X 服务器将转发事件给 X 客户机。可能包括键盘或鼠标输入。为减小网络流量,只有期望的事件发送给 X 客户机。
X 事件是 32 字节。
4)差错
X 服务器应客户机请求报告差错。差错与事件相似,但它们的处理不同。
X 差错大小与事件相同,用于简化它们的处理。它们被发送到 X 客户机(32 字节)的差错处理程序中。
本词条内容贡献者为:
王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所