X Window System的一些概念

来源:互联网 发布:淘宝火拼从哪里进 编辑:程序博客网 时间:2024/06/09 20:58

Linux/Unix系统下的显示模式都是采用X的架构,这里说明一下,其实我们常说的X其实不是现实设备,而是现实协议,Xserver和Xclient通过X协议进行交互,由Xserver对目标设备进行显示,然后Xserver把中间的信息和用户反馈的信息发送给Xclient。可以这样形容:
Xserver:负责终端设备的显示。并告知Client发生了什么
Xclient:负责告诉Xserver显示什么,通过server告诉的“发生了什么”,做相应的处理。

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,进而到达应用程序,应用程序需要处理这样的错误。

原创粉丝点击