Xlib = C Language X Interface
X Window System由MIT设计。X采用服务器-客户端的结构,并且具有网络通透性,X server运行在有显示设备的主机上,是服务器端,客户端程序可以来自本机,也可以是网络上的不同主机。客户端与服务器通信的协议称为X Protocol,客户端以请求的方式让服务器管理图形界面。
Xlib是一个客户端的C语言接口库,它封装了X协议,并对应用程序提供方便使用的API。使用Xlib,应用程序不用直接向服务器发送请求与处理回复。
X Window System的一些概念:
Display :
若干个屏幕(screen)以及一套输入设备(键盘和鼠标)构成一个display,display概念的关键就是有一套完整的输入输出。屏幕不一定必须是一个,可以有多个,各个屏幕可以用来显示相同的内容,也可以用来构成矩阵显示一个大屏幕的内容。
一个x server可以支持多个display。
Screen :
Screen的层次在display之下,是x server显示管理的次级单位。一个screen对应一个根窗口(root window),根窗口的大小与screen相同。如果在命令行执行"X"的话,启动了x server,这时在屏幕上看到一个单调的桌面,以及一个"X"形的鼠标,不过因为没有启动window manager,所以什么都不能做,只能动动鼠标。这时你看到的这个单调的“桌面”正是根窗口。
Window :
Window是比screen还要小一级的概念了。Window是有树形继承关系的,每一个屏幕上都对应有一个“窗口树”,树的根就是root window,即根窗口,它没有父窗口;除此之外,所有window都有父窗口。一个窗口还可能有子窗口,但并不是必须的。
Xlib把应用程序的图形操作转换为发送给x server的请求,xlib与xserver之间的通信是异步的。当应用程序调用Xlib与xserver通信时,xlib不会每次都立刻把请求发送出去,而是把请求进行排队,放在一个缓冲区里,当某种条件被满足时,再一次性地把多个请求一起发出。
如果应用程序需要马上得到响应的话,可以调用类似于SYNC之类的xlib接口来强制清空缓冲。
因为与server之间是通过网络来通信的,所以Xlib并不能保证请求立刻就能到达server,因为可能有网络的延时;即使到达了,也不能保证server立刻就处理请求。
从server到xlib的消息一般是event,应用需要处理这些event。同样,event的传递也是异步的,会有排队也会有网络延时。
关于资源,当应用调用xlib创建某种资源时,比如window, font, pixmap, colormap, cursor或gcontext时,会返回给应用一个ID,而资源本身是在server上的。这些资源是有可能在应用之间共享的,其中是font和cursor是自动被同一display上所有screen的所有window共享的。
关于error。有两种,一种是调用xlib时的返回值错误,如果函数调用失败的话,一般的xlib函数会返回0;另一种是error是由server发出的,在与xlib通信中,如果发现了错误,按照x protocol的规范,server会发error到xlib,进而到达应用程序,应用程序需要处理这样的错误。
应用程序方面的考虑:
所有的尺寸和座标值都是16位长度,这样的限制主要是为了确保网络带宽,如果应用传来的值是更长字节的,将会被截取掉。
在不同的工作站之间,键盘的差异往往是最大的,所以你在设计程序的时候,最好使用最通用的做法以加强可移植性。
很多显示系统的后台存储空间是很有限的,所以最好尽可能地减小pixmap和后台存储的使用。
注意与window manager的合作,通常,你的程序不一定必须是独占屏幕的,当window manager对你的窗口进行管理时,应用程序要有相应的支持。
在本规范的绝大部分篇幅中,描述了Xlib定义的以下几个大类的C语言接口:
Display Functions
Window Functions
Window Information Functions
Pixmap and Cursor Functions
Color Management Functions
Graphics Context Functions
Graphics Functions
Window and Session Manager Functions
Events
Event Handling Functions
Input Device Functions
Locales and Internationalized Text Functions
Inter-Client Communication Functions
Resource Manager Functions
Application Utility Functions