你知道Linux图形界面中各概念间的关系?

很多linux初学者在学习linux图形方面的知识时会遇到一些概念,如:x、x11、xfree86、wm、 kde、gnome、qt、qt/e、qtopia、directfb、buffer、显卡加速驱动等等。理解它们之间是什么关系,对我们学习来说是非常 重要的。写这篇文章的目的,就是想让大家明晰这些概念及它们之间的关系。(部分内容引用网络上的一些描述比较清晰的内容)
一、linux操作系统和图形的关系
linux本身没有图像界面,linux现在的图像界面的实现只是linux下的应用程序实现的。图像界面并不是linux的一部分,linux只是个基于命令行的操作系统。linux内核为linux系统中的图形界面提供了显示设备驱动。
二、x的概念
x 是协议,就像http协议,ip协议。这个概念很多初学者甚至学习linux有一定时间的人都混淆,一个基于x的应用程序需要运行并显示内容时,他就联接 到x服务器,开始用x协议和服务器交谈。比如一个x应用程序(x client)要在屏幕上输出一个圆,那么他就用x协议对x服务器说:喂!我需要在屏幕上画一个圆。x应用程序只负责告诉x服务器在屏幕的什么地方用什么 颜色画一个多大的圆,而具体的画的动作,比如这个圆怎样生成,用什么显卡的驱动程式去指挥显卡完成等等工作是由x服务器来完成的。x服务器还负责捕获 键盘和鼠标的动作。假设x服务器捕获到鼠标的左键被按下了,他就告诉x应用程序:亲爱的应用程序先生,我发现鼠标被按下了,您有什么指示吗?假如x应用程 序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,x应用程式就对x服务器说:请再画一个正方形,当然他会告诉服务器在什么地方用什么颜色画多大的 正方形,但不关心具体怎么画--那是服务器的事情。
三、x11、x11r6的概念
x11表示x协议的第16版。x11r6是x协议第11版第六次发行。
四、xfree86是什么?
xfree86 是x windows server的x11r6执行程序。有了协议就需要具体的软件来实现这个协议。xfree86是按照x协议的规定来完成x应用程序提交的在屏幕上显示的任 务。实现x协议的软件也并不只有xfree86, xfree86只是实现x协议的一个免费x服务器软件。有些甚至能够在windows上有x服务器运行,这样您能够在linux系统上运行一个x应用程序 然后在另一台windows系统上显示。只是在linux上最常用的是xfree86。不过现在的linux发行版大多用xorg了。
xfree86内容包括x服务器,字体, 一个x下的终端程序(xterm),一个简单的窗口管理器(twm),很多有用的小工具, 显示输出驱动和包括键盘鼠标在内的许多输入模块。
五、wm(window manager 窗口管理器)
在红帽系统中,可以设置启动级别3,进入命令行终端,然后运行:
#startx
起动图像界面,您看到的是个和平时使用相同的完整的图像界面操作环境。能够最大化,最小化,移动,关闭窗口等。 按ctrl+alt+backspace反回字符界面 。输入:
#xinit
再次启动图像界面,您看到了什么,您看到一个xterm(一个运行于x下的终端程序)。而且不能移动。但是您能够在这个xterm中输入命令打开x应用程序,假如输入:
#mozill
打开浏览器,您看到的浏览器和平时有什么不同吗?他在屏幕中间,不能移动,不能最小化,不能最大化,没有边框。
为什么同样一个x应用程式会有这样的不同呢?因为我们用startx起动图像界面的时候同时也启动了一个wm(即窗口管理器),假如您用kde就起动了 kde,假如您用gnome就起动了gnome。但是您用xinit起动图像界面的时候却没有起动wm 。
窗口管理器的作用就是最大化、最小化、移动、关闭窗口等。而这些不是x服务器来负责完成的。假如您用xinit起动图像界面并在xterm中输入twm,看看会有什么?
xterm被加上了一个边框,您能够通过这个边框移动、最大化、最小化这个xterm。twm就是xfree86中自带的窗口管理器,是个比较简陋的最简单的窗口管理器,但是他具备窗口管理器的全部特征。
六、kde和gnome
kde 和gnome是linux里最常用的图像界面操作环境,他们不但仅是个窗口管理器那么简单, kde是k desktop environment 的缩写,他不但是个窗口管理器,更有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等。gnome是gnu network object model environment 的缩写,和kde相同,也是个功能强大的综合环境。
七、qt、qt/e、qtopia
trolltec(奇趣)的qt产品有很多,如:qt、qt/e、qtopia等。目前为诺基亚所有。
qt 泛指qt的所有桌面版本,如:qt/x11,qt windows,qt mac等。由于qt最早是在linux中随kde流行而来,所有通常认为qt都是基于linux下的qt/x11。qt是一个完整的c++应用程序开发框 架。它包含一个类库,和用于跨平台开发及国际化的工具。qt api在所有支持的平台上都是相同的,qt工具在这些平台上的使用方式也一致, 因而qt应用的开发和部署与平台无关。在桌面系统中,qt程序通常是符合x协议的应用程序,它需要x服务器的支持。
qt/e 是用于嵌入式linux系统的qt版本。qt/e中去掉了x lib的依赖而直接工作于 buffer上,因而应用程序处理过程效率比较高。它的运行只要有buffer设备就可以了,不需要x服务器的支持。但其本身运行也是有服务器和客户端的 概念。在服务器没有启动前运行qt/e程序,需要在加“-qws”来启动服务器。如:
#./hello –qws
在qt4以后,qt/e改名位qtopia core了,并且集成到qtopia成品中去了。
qt/e 是 buffer设备运行的。具有简洁、高效等特点。但是了解 buffer设备的工程师会发现, buffer设备无法实现硬件加速功能。这也限制了基于buffer设备的图形解决方案的发展。事实上桌面上的xfree86默认情况下是不支持 buffer设备的,xfree86直接操作显卡,充分利用显卡加速功能(下个主题将介绍显卡加速方面的内容)。xserver兼容最多类型的显示卡,一 般来讲,现在市面上80%以上的显示卡都能够被这个server支持。但有时也会有一些显卡不能不正确设别,这时可以采用 buffer模式来支持显示器。主要是用到了xfree86的 buffer server(xf86_fbdev)。需要修改xfree86的配置文件/etc/x11/xf86config,及在/etc/grub.conf中 加入vga=xxx功能。
qtopia是一个面向嵌入式linux的全方位应用程序开发平台,同时也是用于基于linux的pda(个人数字助理),智能电话(smartphone)以及其他移动设备的用户界面。
八、directfb、显卡加速驱动
首先directfb类似于桌面中的xfree86。桌面中的xfree86不需要 buffer设备,而directfb需要。
显卡加速 在嵌入式gui中需要实现多图形功能,包括图形绘制以及拷贝等。其中的许多功能需要进行大量的数据传递(如图形拷贝),或者需要进行大量的数值运算(如画 样条曲线)。如果这些功能都由纯软件实现的话,会占用大量的cpu时间并且需要传递大量的数据,从而影响了图形性能。许多显卡芯片带有图形处理器,能够从 硬件上实现一部分图形功能。支持硬件加速的图形库可以通过图形处理器实现这些图形功能,从而减轻了cpu的负担并减少了数据在总线上的传输时间,提高了图 形性能。
directfb项目是由德国convergence公司推动的open source计划的一部分,它是专门为满足嵌入式设备要求而开发的小巧、强大、灵活和易于使用的图形系统,并且试图成为一个建构于linux buffer device之上的新图形标准。它在buffer的基础上提供了图形加速、输入设备处理提取、透明窗口和多重显示层的功能,能够对嵌入式系统gui有较好 的支持。与那些通用的嵌入式gui系统相比,它具有非常简洁、高效的体系结构和硬件图形加速功能。
directfb依赖已有的内核接口即帧缓冲设备(/dev/fb)访问图形处理器,也就是说direetfb需要一个 正在工作的帧缓冲驱动。linux内核有专门的帧缓冲驱动支持某些图形处理器。对于不支持的图形处理器,内核提供ve—sa帧缓冲(这种帧缓冲有一些限 制)。directfb利用帧缓冲设备做如下工作:
◆ 设置显卡工作模式(分辨率,颜色深度,时序)
◆ 映射显存
如果某种显卡被direcfb支持并且在linux内核中也有这种图形处理器的帧缓冲驱动,directfb利用帧缓冲设备做如下额外的工作:
◆ 映射显存io端口(如果加速驱动在用户空间实现,需要这步。如果在内核空间实现,则不需要映射,但需要有相应的驱动接口。也可以重新写一个驱动程序来专门实现加速功能)
◆ 关闭帧缓冲驱动中自带的加速功能
针对具体的图形操作(例如图片拷贝、区域填充、区域拷贝、画线、图形拉伸等),directfb加速驱动(对映射到用户 空间的控制寄存器访问)访问显存映射的图形处理器i/o端口向图形处理器提交命令,由显卡来实现相应的命令。也就是说真正的硬件加速完全是在用户空间实 现。这样directfb就可以对它支持的图形处理器提供最大限度的硬件图形加速。这些加速功能需要显卡控制器的支持。一些嵌入式的显示控制器中并没有相 应的功能。需要外接显卡来实现。
上层apl支持directfb的有:xdirectfb、directfbgl、gtk+、dfbterm、dfbsee、dfbpoint、mythtv、qt on directfb、sdl等。
directfb也需要窗口管理器。directfb采用模块化设计,它并不依赖于某种具体的窗口管理器,只要具体的窗 口管理器实现接口directfb中的corewmfuncs中定义的函数,就可以挂到directfb中运行。directfb自带有两个窗口管理 器:default和unique,可以在配置文件中用wm=xxx来选择用哪一个作为当前的窗口管理器。
通过上面8个方面,介绍了x、x11、xfree86、wm、kde、gnome、qt、qt/e、qtopia、directfb、buffer、显卡加速驱动等概念及它们的一些关系。供大家参考。

二极管的种类及肖特基二极管的特点
内部i耦合器技术:isoPower解释器
Protel for DOS PCB文件转换成Gerber文
人类发现首个中等质量黑洞
如何为物联网打造神奇的无线世界
你知道Linux图形界面中各概念间的关系?
我们来盘点国内主流的汽车试验场
土壤肥料速测仪是什么,它的作用是什么
大容量电池+大内存,OPPO A11s成千元机明星单品
气动角座阀的安装方法是怎样的,一起来看看吧
2020年中国三元前驱体行业市场现状和竞争格局分析
爆破用定时器电路
FC-LDG系列智能型电磁流量计
解决电子产品死机问题的Smart Reset芯片(ST)
长电科技2022年年度报告
「蚂蚁智联」完成数千万元Pre A轮融资
HAPs商用领域广泛,市场空间潜力巨大
如何制作倒立摆机器人
Ubuntu的实时内核 (Real-Time Kernel) 即将GA
Simulink集成模型测试太慢怎么办?