X Window系統的協議和架構

在电脑中，X窗口系统（常称作X11、X）是一种以位图显示的网络透明化窗口系统。本条目详述X11 的协议及其技术架构。

X C/S模型和网络透明性

X 基于C/S模型。运作在电脑上的X 服务器程序以图形显示，并以各种客户端程序进行通信。X 服务器接受图形输出（窗口画面）方面的请求，并回传用户的输入（键盘、鼠标）。
在 X窗口系统 中，服务器可以在用户的电脑上运行，而在其他的机器上运行客户端。也可以反过来，客户端在用户的电脑上运行，而服务端在远程电脑上运行。X窗口系统 使用的术语是以程序为基准，而不是用户或硬件。远程的程序连接到本地的X 服务器，那些远程的程序就视为客户端；本地的X 接受所传入的消息，这部分就视为服务端。
主从间通信协议的网络透明：服务器和客户端可以运行在同一机器或不同机器上，那些机器更可以是不同的硬件架构或操作系统。主从之间的通信安全，可以加密连接的方式加强。

窗口

在 X窗口系统以及各种图形化用户界面中，窗口即为一个顶层窗口。窗口也用来指窗口内部的窗口，这类窗口是父窗口的子窗口。图形化组件，如按钮、菜单、图标等等，都是使用窗口来实现的。
任何窗口都只能是父窗口之下的子窗口，使窗口以树状的层次结构结构组织起来，层次结构结构最根部的窗口便称为根窗口，而根窗口是由服务器自动创建的。顶层窗口即直接隶属于根窗口的子窗口。根窗口即整个显示屏画面，且其他窗口都在根窗口之下。

识别子

所有关于窗口的数据、字体等等，皆存放在服务器上。客户端知道那些对象的识别子，和服务器交互时，对象以整数为名称。例如，当客户端希望创建一个窗口时，便指定一个识别子，并请求服务器创建一个窗口。服务器会创建一个窗口，并与指定的识别子关系。稍后客户端可使用这个识别子进行请求，例如在窗口上画上一个字符串。
识别子在服务器上是独一无二的，在多个客户端之间也不例外。例如，即使是由两个不同客户端所创建的窗口，也不会同时具有相同的识别子。即使某个对象不是由自己的客户端所创建的，只要指定相对应的识别子，就可访问另一个客户端所创建的对象。

属性

每一个窗口都有一组预先定义的属性值（Attributes）和属性（Properties），并存放在服务器上，客户端可以适当的请求方式取存。属性值是有关窗口方面的数据，如大小、位置、背景色等等。属性则是附属于窗口上的数据片断。与属性值相反，属性在X窗口系统 核心协议的层次中并没有其他含意。客户端可在窗口的属性中存放属性值数据。
属性以名称、类型和值来描述，属性相当于指令式编程语言的变量，应用程序可以指定名称、类型和值来创建新的属性。属性和窗口连系：两个相同名称的属性可存在于两个不同的窗口，且可具有不同的类型和值。
属性大多用于客户端之间的通信。例如，名称为WM_NAME 的属性，用来存放窗口的名称；窗口管理器通常会读取这个属性，并在窗口顶部显示名称。
窗口的属性可以xprop 程序显示。xprop -root 更可显示根窗口的属性，包括 X资源（程序参数）。

事件

事件是由服务器发送到客户端用以通信的数据包，发送一些客户端可能感兴趣的事物。客户端可以请求服务器发送事件给另一个客户端；这部分用于客户端之间的通信。例如，当客户端请求目前所选取的文字，就会发送事件给客户端，以处理目前所持有的选取内容。
在某些情况下，窗口的内容可能会被销毁（例如当窗口隐蔽时）。当再度观看被销毁的区域时，服务器会产生一个Expose（显露）事件，用以通知客户端重绘窗口已消失的部分。
其他事件是用来通知键盘或鼠标输入的客户端、创建新窗口等等。
某些类型的事件会不断发送给客户端，但大多数的事件只在客户端预先表示关心时才会发送。因为客户端可能只需要关心某类型的事件。例如，客户端可能会关心关于键盘的事件，但却不关心关于鼠标的事件。

Xlib 和其他的客户端程序库

大部分的客户端程序借由Xlib 客户端程序库与服务器交流。特别是客户端大多使用Xaw、Motif、GTK+、Qt 之类使用到Xlib 的程序库，以便与服务器交互。

客户端之间的通信

X窗口系统 核心协议提供了客户端之间通信的机制：窗口属性和事件，特别是客户端对客户端的消息事件。不过这部分并未指明任何协议，协议部分由客户端之间的通信协议单独管理。
客户端之间的通信协议手册指明借由选取和应用程序的窗口管理器交互，以交换数据。但这个规格被认为过于困难和混乱；应用程序的质量和通信的一贯性，通常是由指定的桌面环境所提供。
客户端之间的交换协议（ICE）指定了用以创建客户端间互相通信的框架，因此，特定的协议可创建在其上。特别是X 期间管理器协议（XSMP）便是建基于ICE 的协议，以期间管理器托管应用程序间的交互。这个程序是在交互期间结束时，用来维护存放的桌面状态，并在同一用户再次开始另一个期间时恢复。
较新的协议包含在freedesktop 规范，包括拖曳协议Xdnd，用以选取要转移的数据，然后拖曳到另一个窗口上。还有嵌入式应用程序协议Xembed，详述应用程序如何在另一个应用程序的子窗口之中运行。

选取、剪切缓冲器和拖曳

选取、剪切缓冲器和拖曳机制在X窗口系统中，是给用户从某个窗口传递数据给另一个窗口。选取、剪切缓冲器通常用于，用户在窗口中选取文字和其他数据，并在另一个窗口中粘贴。拖曳用于，用户在窗口中选取某些东西，然后对选取区按住按钮，并拖曳到另一个窗口。
由于两个窗口可能由两个不同的应用程序所持有，数据传递需要两个不同的客户端连接相同的X 服务器才能交互。X窗口系统 核心协议包含明确选择交换的请求和事件类型，不过传递的完成，主要是由一般的客户端对客户端事件发送，和未指明选择发送的窗口属性。
客户端之间发送的数据可以是不同的类型：通常是文字，不过也可以是图形、数字、对象的列表等等。
选取和拖曳是主动机制：在窗口中选取文字以后，客户端所处理的窗口必须主动支持相关的协议，才能发送数据到需要它的应用程序。相反的，剪切缓冲器则是被动机制：当用户选取文字时，其内容会发送到剪切缓冲器，即使应用程序所处理的窗口已结束并销毁窗口，缓冲器的内容仍会保留下来。

期间管理器

概略地说，在一个特定时间中，期间的状态就是“桌面的状态”：一组窗口及其当下的内容。更精确地说，就是一系列应用程序管理的这些窗口和信息，其允许应用程序在需要时还原所管理窗口的情况。X 期间管理器便是一个保存并还原期间状态的程序。
使用期间管理器最明显的作用，便是从一个交互期间注销，当再次登录时，有可能在相同的状态下恰好发现相同的窗口。关于这部分的运作，在注销时，期间管理器程序存储运行中应用程序的名称，并在登录时再次引导它们。并按照应用程序状态的次序来还原（需要还原窗口的内容），应用程序必须能够保存这些运行状态，并在再次引导时，能够根据期间管理器的请求来读回这些状态。
X窗口系统含有一个默认的期间管理器，称作xsm。特定的桌面系统中也已开发了其他的期间管理器：例如，ksmserver 是 KDE 默认的期间管理器。

X 显示管理器

X显示管理器在 X窗口系统中，是一个用来显示图形化登录提示的程序。更广泛的说，显示管理器在本机电脑上运行一个或多个X 服务器，并接受来自远程电脑上运行的X 服务器的新连接。本机服务器借由显示管理器来引导，然后显示管理器连接到服务器，以呈现出用户登录画面。远程服务器从显示管理器独立引导并且与之连接。在这个情况下，显示管理器的运作就如同图形化的telnet 服务器：X 服务器可连接到显示管理器，并引导一个期间；期间之中的程序运行在显示管理器的同一部电脑上，不过在电脑上的输出和输入是由X 服务器运行（用户面前的那部电脑）。
XDM 是 X窗口系统所提供最基本的显示管理器。其他的显示管理器还有GDM（GNOME）、KDM（KDE）、WDM（使用 Window Maker 的 WING 组件集），以及 entrance（使用 Enlightenment v.17 的架构）。

用户界面组件

X 早期的组件工具包有 Xaw（雅典娜工程组件集）、OLIT（OPEN LOOK 内部工具包）、XView、Motif、Tk。OLIT 和 XView 为 AT&T 和昇阳的 OPEN LOOK GUI 起基础工具包的作用。
Motif 为 Common Desktop Environment（CDE）提供基础工具包，即用于商业化Unix 系统的标准桌面环境，如 Solaris 和 HP-UX。（GNOME 也用于Solaris 9，且即将成为未来版本的标准。）
更多最新的工具包还包括Qt（用于KDE）、GTK+（用于GNOME）、wxWidgets、FLTK、FOX。