X window 是Unix/Linux系统上的图形用户界面,一个Linux的发行版,比如说Ubuntu,都是Linux内核加上图形用户界面(比如GNome,KDE)再加一堆应用软件组成的。所以说x window也是Linux上的一个应用软件,没有它,Linux也照样可以跑。
好吧,我将x window理解为操作系统的GUI程序,这个程序接管了键盘、鼠标、显示器、显卡。你在屏幕上看到所有的窗口、图片、文字都是由它绘制的,鼠标键盘等事件也是由它处理和分发。
x window system可以分为3部分,分别是x client, x server, x protocol。对,很明显x window是采用C/S结构设计的。x server是服务器,处理x client发过来的请求,并将结果返回给clients,它们之间的数据交互格式是由x protocol规定。
x server管理了键盘、鼠标、显示器、触摸板、显卡等I/O设备,所有窗口、文件和图片都是由x server绘制的。比如说你键入一个字母c,x server得到这个事件后,会将该事件转发给对应的程序处理(应用程序就是client),client接收到事件后,知道要显示一个字母,然后就会发一个请求给x server,要求在xx,xx地方显示一个大小为xx颜色为xx,字体为xx的字母,x server收到请求后,就按照要求把字母c画出来了。
为啥x window system 使用C/S结构设计?好处很明显。
-
1.资源统一管理了,方便共享。由于x server接管了硬件,clinet可以方便共享使用。x server也方便获得输入事件,
主动发给各个clients。
-
2. 远程显示。一般来说server和client是在同一台电脑上,但是也可以不在不同网络的不同电脑上。这样即使你远程
登录,也可以在本机上显示远程端的程序。
-
3. 采用C/S,clinet和server可以解耦。client可以采用任意语言开发,只要符合x protocol要求就可以了。
开发图形应用程序的时候,难道要自己发请求给x server吗?当然不用,已经有人做好这些事了,看下图:
xlib封装了打包和解包等操作,x toolkit实现很多常用的组件,比如说GTK+,QT就是很流行的x toolkit。所以平时开发应用的时候,只需要使用QT等就可以了,无需理会x server等存在。