6.8.2 安装X协议和扩展

X包含了多种协议和扩展,为简单起见,Vita系统不必全部安装。比如禁掉了记录事件的扩展Record,支持扩展屏幕的协议Xinerama及用于屏保的Screensaver,禁掉了已经过时的DRI1等。下面是vita系统安装的协议,安装这些协议时没有先后顺序要求。如果不要求X服务器支持DRI2,那么可以安装更少的协议,比如去掉glproto、dri2proto、damageproto等。

(1)核心协议

Xlib中的绝大部分编程接口,如XCreateWindow、XMapWindow、XDrawRectange、XCopyArea等都是由X核心协议定义的。核心协议的定义在软件包xproto中。

(2)基本扩展

X的基本扩展包括:DOUBLE-BUFFER(DBE)、DPMS、Extended-Visual-Information(EVI)、Generic Event Extension、LBX、MIT-SHM、MIT-SUNDRY-NONSTANDARD、Multi-Buffering、SECURITY、SHAPE、SYNC、TOG-CUP、XC-APPGROUP、XTEST。它们的定义在软件包xextproto中。

(3)键盘扩展

键盘扩展定义了键盘的模型、布局,如对于不同的键盘模型,某个键值对应的字符。键盘扩展的定义在软件包kbproto中。

(4)输入扩展

输入扩展是为一些特殊的输入设备定义的协议。通过这个扩展,输入设备可以模拟出与鼠标、键盘等核心输入设备相同格式的事件。输入扩展的定义在软件包inputproto中。

(5)XCB协议

鉴于Xlib的效率,开发者们开发了更高效的XCB来替代Xlib。XCB协议是用于这个库的协议,其以XML形式定义,并提供python程序将这些XML描述文件转换为相应的程序代码。XCB协议的定义在软件包xcb-proto中。

(6)GLX扩展

GLX扩展定义了OpenGL和X之间通信的协议。该扩展的定义在软件包glxproto中。

(7)DRI2扩展

DRI2扩展是DRI的第2个版本,定义了应用不通过X服务器直接使用硬件进行渲染的协议。DRI2扩展的定义在软件包dri2proto中。

(8)XFixes扩展

从这个扩展的名字也可以看出,这个扩展其实是为解决X核心协议存在的各种限制的。该扩展的定义在软件包fixesproto中。

(9)Damage扩展

Damage扩展是X服务器用来记录那些离屏的、发生了变化的绘制区域的协议。Damage扩展的定义在软件包damageproto中。

(10)XC-MISC扩展

应用可以通过XC-MISC扩展获取X服务器可用的资源ID,如GetXIDRange、GetXIDList等。该扩展的定义在软件包xcmiscproto中。

(11)BIG-REQUESTS扩展

BIG-REQUESTS扩展提供了对大于262140字节的请求的支持。该扩展的定义在软件包bigreqsproto中。

(12)RANDR扩展

RANDR扩展定义了动态调整屏幕尺寸、旋转屏幕以及镜像屏幕的协议。X提供的工具xrandr就是这个协议的一个典型使用者。该扩展的定义在软件包randrproto中。

(13)RENDER扩展

RENDER扩展是X使用的较新的渲染模型,用于合成多个绘制区域,相对于原始的通过复制进行合成的模型其更有效率。该扩展的定义在软件包renderproto中。

(14)字体扩展

字体扩展定义了X中与字体处理相关的协议。字体扩展的定义在软件包fontsproto中。

(15)视频扩展

视频扩展定义了X的视频输出相关的协议。该扩展的定义在软件包videoproto中。

(16)复合扩展

复合扩展是为了X支持窗口特效设计的扩展。在没有这个扩展之前,所有的在窗口上的绘制操作都“实时”显示在屏幕上。而复合扩展允许窗口可以先在离屏的区域进行绘制。复合扩展的定义在软件包compositeproto中。

(17)资源扩展

资源扩展定义了应用程序查询X服务器各种资源使用情况的协议。该扩展的定义在软件包resourceproto中。

(18)直接图形访问扩展

顾名思义,直接图形访问扩展也是为了直接访问图形硬件设计的协议,不过其功能非常有限,目前基本已经停止开发,但vesa驱动还在使用这个扩展。该扩展的定义在软件包xf86dgaproto中。

这些协议的配置安装都非常简单,而且安装命令完全相同。以xproto为例,安装命令如下:

6.8.2 安装X协议和扩展 - 图1