在我们所熟悉的Windows 98/xp/7/10系统中,图形界面一直是系统的一部分。但Linux只是一个基于命令行的操作系统,图形界面并不是linux的一部分,因此Linux的图形界面的实现只是linux下的应用程序实现的。

在早期Linux中,当时还没有桌面系统这一说法,这时要实现图形界面,Linux依靠的是Framebuffer机制。大家都知道,为了实现显示的输出,需要有显卡,平时说的VESA,VGA ,fbdev等其实就是针对不同模式显卡的驱动程序。虽然这些标准都很老了,但当今的显卡都兼容这几种模式。Framebuffer模式的显卡本身不具有任何运算数据的能力,他好比是一个暂时存放水的水池.CPU将运算后的结果放到这个水池,水池再将结果 流到显示器.中间不会对数据做处理.在这中情况下,所有显示任务都有CPU完成,CPU负担很重. 在linux内核中有有framebuffer机制,摹仿framebuffer显卡的这种功能.他的好处是把显卡的硬件结构抽象掉,把所有的显卡都当做一个“水池”来用.应用程序也可以直接读取这个水池的内容。Framebuffer的设备名是/dev/fb或/dev/fbX(X为数字,代表显卡序号)。Linux启动时会有一个小企鹅logo,这个logo就是用framebuffer功能写上屏幕上的。 VESA和VGA比FrameBuffer要好很多,但是他的显示能力也很有限,CPU仍旧要处理大部分的显示任务。

显然,如果每个应用程序都要处理图形显示的每个细节,那么图形化的应用程序开发将变得十分困难。X视窗系统协议是用于UNIX 和Linux下的图形系统,它为显示窗口图形提供了固有的面向客户机/服务器的基础。X服务器是一种运行在用户桌面的,用于管理窗口图像,视频和交互式 I/O 设备的系统程序。

一个基于X的应用程序需要运行并显示内容时他就联接到X服务器,开始用X协议和服务器交谈。比如一个X应用程序要在屏幕上输出一个圆那么他就用X协议对X服务器说:喂!我需要在屏幕上画一个圆.X应用程 序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的“画”的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完成等等工 作是由X服务器来完成的。X服务器还负责捕捉键盘和鼠标的动作,假设X服务器捕捉到鼠标的左键被按下了,他就告诉X应用程序:亲爱的应用程序先生,我发现 鼠标被按下了,您有什么指示吗?如果X应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X应用程序就对X服务器说:请再画一个正方形,当然 他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画–那是服务器的事情。