linux图形堆栈如何组织?


31

谁能解释(希望有一个图片),Linux图形堆栈是如何组织的?我一直都在听到有关X / GTK / GNOME / KDE等的信息,但是我真的不知道它们实际上在做什么,以及它们如何相互影响以及如何与堆栈的其他部分交互。Unity和Wayland如何配合?


1
Xorg开发人员Keith Packard于2011年1月在linux.conf.au上观看有关Linux图形的未来的视频:linuxconfau.blip.tv/file/4693305涵盖了当前模型以及近期和中期的计划。
mattdm 2011年

arstechnica.com/open-source/guides/2011/03/…也是最近的一篇文章,赞扬Ubuntu对Wyland的承诺。
apoorv020 2011年

—是的,尽管该文章充满了遗漏的片段,甚至是不准确的地方,而且根据我的判断,它也不是很连贯。
mattdm 2011年

@mattdm-即使不连贯等,它也会进入该主题的整体图中,在下面的答案中没有直接涉及到该主题。
apoorv020 2011年

Answers:


29

X Window系统使用客户端-服务器体系结构。X服务器在具有显示器的计算机(监视器+输入设备)上运行,而X客户端可以在任何其他计算机上运行,​​并使用X协议(不是直接而是通过使用库,例如Xlib,或更现代的非阻塞事件驱动XCB)。X协议被设计为可扩展的,并且具有许多扩展(请参阅参考资料xdpyinfo(1))。

X服务器仅执行低级操作,例如创建和销毁窗口,执行绘图操作(当今大多数绘图是在客户端上完成并作为图像发送到服务器),将事件发送到Windows,...您可以看到很少一个X服务器通过运行X :1 &(使用另一个X服务器尚未使用的任何数字)或Xephyr :1 &(Xephyr运行当前X服务器上嵌入的X服务器)来运行xterm -display :1 &,然后运行并切换到新的X服务器(您可能需要设置X授权)使用xauth(1))。

如您所见,X服务器几乎不执行任何操作,它不绘制标题栏,不执行窗口最小化/图标化,不管理窗口放置...当然,您可以手动运行命令来控制窗口放置就像xterm -geometry -0-0,但是通常会有一个特殊的X客户端来执行上述操作。该客户端称为窗口管理器。一次只能有一个活动的窗口管理器。如果您仍然有开放的前一个命令的裸X服务器,你可以尝试在其上运行的窗口管理器,例如twmmetacitykwincompizlarswmpawm,...

就像我们说的那样,X仅执行低级操作,而不提供按钮,菜单,工具栏等高级概念。这些由称为工具箱的库提供,例如:Xaw,GTK,Qt,FLTK等。

桌面环境是旨在提供统一用户体验的程序的集合。因此,桌面环境通常提供面板,应用程序启动器,系统托盘,控制面板,配置基础结构(用于保存设置的位置)。一些知名的桌面环境包括KDE(使用Qt工具包构建),Gnome(使用GTK),Enlightenment(使用其自己的工具包库),...

最好使用3d硬件完成一些现代桌面效果。于是出现了一个新组件,即复合管理器。X扩展名XComposite扩展将窗口内容发送到复合管理器。合成管理器将这些内容转换为纹理,并通过OpenGL使用3d硬件以多种方式对其进行合成(alpha混合,3d投影等)。

不久前,X服务器直接与硬件设备通信。该设备处理的重要部分已转移到OS内核:DRI(允许X 直接渲染客户端访问3d硬件),evdev(用于输入设备处理的统一接口),KMS(将图形模式设置移动到内核) ,GEM / TTM(纹理内存管理)。

因此,由于设备处理的复杂性现在大多在X之外,因此使用简化的窗口系统进行实验变得更加容易。Wayland是基于复合管理器概念的窗口系统,即,窗口系统是复合管理器。Wayland利用从X移出并使用OpenGL渲染的设备处理功能。

至于Unity,这是一个桌面环境,旨在具有适合上网本的用户界面。


对于最后一句话不同意,但是答案非常丰富。+1。
missingfaktor 2012年

“((如今,大多数绘图是在客户端上完成的,并作为图像发送到服务器)”这不是真的,即使没有合成器,也有很多人将通过xgl扩展来进行opengl渲染。
亚当·鲁珀

13

传统堆栈基于3个主要组件构建:

  • X服务器处理显示
  • 窗口管理器将窗口放入框架中,处理最小化窗口等问题。这是Unix中机制与策略分离的一部分
  • 执行有用任务的客户端,如显示stackexchange网站。他们可能直接使用X协议(自杀),使用xlib或xcb(稍微容易些)或使用工具包,例如GTK +或QT。

X体系结构成为网络,因此允许客户端位于单独的主机上,然后位于服务器上。

到目前为止,一切都很好。但是,那是过去的印象。如今,处理图形的不是CPU,而是GPU。已经进行了各种尝试将其合并到模型中-并在内核出现时进一步扩展。

首先,已经对图形卡的使用做出了一些假设。例如,仅假定屏幕上的渲染。我现在无法在Wikipedia上找到此信息,但DRI 1还假定只有一个应用程序会同时使用OpenGL(我无法立即引用,但是我可以将其挖到与WONTFIX接近的地方,并附有注释以等待DRI 2)。

已经提出了一些间接渲染的临时解决方案(复合WM需要):

  • XGL-支持应用程序直接与卡通信的早期命题
  • AIGLX-使用OpenGL协议的网络属性的公认命题
  • NVidia的专有解决方案

开始在较新的体系结构(DRI 2)上进行工作。其中包括:

  • 内核内支持内存处理(GEM / TTM)
  • 内核模式设置(KMS)允许更改内核分辨率,从而避免了在X和控制台之间切换时的延迟以及其他一些功能(例如,即使X正在运行,也会在紧急情况下显示消息-计划实施IIRC)。

已经开始以某种方式正交移至内核,运行Gallium驱动程序。Mesa库开始是在CPU上实现OpenGL,然后开始使用GPU加速。一直对OpenGL严格。在OpenGL 3.0中,模型发生了重大变化,并且不可避免地要重写库。但是,他们利用这个机会将代码分成几层来提取通用代码,并提供了底层API,允许在其之上实现各种3D API-例如,Wine提供DirectX直接与Gallium对话而不是通过OpenGL。 API层(可能没有直接的1-1调用)。


Wayland是一个项目,它认为上述内容有点复杂,而且过于“历史化”。1984年的设计(尽管经过了高度修改和改编)并不符合21 c的开始。根据支持者。

尽管它仍然缺少某些重要功能(例如,完全的OpenGL支持(对于某些情况很重要-网络支持)),但它可以提供更大的灵活性和更好的性能。


有关桌面环境和窗口管理器的更多信息。窗口管理器是负责窗口运行方式的应用程序-例如,它负责管理工作区,绘制标题栏(带有windo标题和最小/最大/关闭按钮的屏幕顶部的东西)等。

首先,仅使用了最少的WM,但随后用户开始需要桌面环境-即功能更强的版本,其中包括菜单启动,桌面背景等。但是,桌面环境的大多数部分虽然经常集成,但却不是窗口管理器。

一段时间后,引入了复合WM,该复合WM使用OpenGL和间接渲染进行工作。它们不仅提供图形效果,还使某些辅助功能(如放大镜)的实现更加容易。


因此,像QT这样的框架允许一个应用程序自行绘制,而Gnome和KDE等桌面环境决定了如何在同一桌面上绘制多个窗口?
apoorv020 2011年

不完全的。QT允许应用程序绘制自身(即,它允许应用程序指定其行为方式)。像metacity(对于Gnome)或kwin(对于KDE)这样的WM指定了窗口在环境中的行为。桌面环境是一个软件包,其中包含WM,面板和其他应用程序(例如PIM),为用户提供过硬的体验。
Maciej Piechotka 2011年

9

首先,实际上没有Linux图形堆栈。Linux没有图形显示功能。

但是,Linux应用程序可以使用图形显示,并且有许多不同的系统可以执行此操作。最常见的都是建立在X窗口之上的。

X是网络协议,因为在X协议栈的中间,您可以将网络作为标准组件。让我们看一个特定的用例。柏林的一位物理学家希望在瑞士的欧洲核子研究中心(CERN)对其中一种核对撞机进行实验。他远程登录并在CERN的一台超级计算机阵列上运行数据分析程序,并在屏幕上以图形方式显示结果。

在柏林,物理学家有一个运行某些X服务器软件的X终端设备,该软件为远程应用程序提供图形显示功能。X服务器软件具有一个帧缓冲区,该缓冲区与特定硬件的特定设备驱动程序对话。X服务器软件使用X协议。因此,这些层可能是图形设备->设备驱动程序->帧缓冲区-> X服务器-> X协议。

然后,在瑞士,应用程序使用X协议连接到显示器,并发送图形显示命令,例如“绘制矩形”或“ alpha混合”。该应用程序可能使用高级图形库,而该库又可能基于较低级的库。例如,可以使用WxWidget工具箱以Python编写应用程序,该工具箱是在GTK之上构建的,该工具箱使用名为Cairo的库来编写核心图形绘制命令。开罗顶部也可能有OPENGL。这些层可能是这样的:WxWidgets-> GTK-> Cairo-> X Toolkit-> X协议。显然,是中间的协议将事物连接在一起,并且由于Linux还支持UNIX套接字(数据的完全内部传输),因此如果需要,这两种类型的事物可以在一台机器上运行。

X是指协议和体系结构的基础,例如运行图形显示,指点设备和键盘的X服务器。

GTK和QT是两个通用的GUI库,它们支持窗口,对话框,按钮等。

GNOME和KDE是两个桌面环境,它们管理图形桌面上的窗口,提供有用的applet和诸如按钮栏之类的东西。它们还允许多个应用程序通过X服务器(X终端设备)进行通信,即使这些应用程序在不同的远程计算机上运行也是如此。例如,复制和粘贴是应用程序间通信的一种形式。GNOME建立在GTK之上。KDE建立在QT之上。可以在KDE桌面上运行GNOME应用程序,也可以在GNOME桌面上运行KDE应用程序,因为它们都可以使用相同的基础X协议。


7
这个答案已经过时了。内核已经参与图形很长时间了。
mattdm 2011年

5
为了扩展mattdm的评论,即使图形由内核树外部的驱动程序驱动,它们仍使用内核服务来控制对图形资源的访问。内核始终位于堆栈的底部。
dmckee 2011年

我不同意内核位于堆栈的底部。当然,设备驱动程序确实使用内核服务来获得对硬件的特权访问,但是X应用程序正在讨论网络,因此,甚至是网卡之外,还有更多的层。
Michael Dillon

X是建立在网络上的,而实现细节(尤其是台式机)对许多设置中的某些设置很重要,而MIT-SHM则具有扩展性。内核在当前堆栈中起着重要作用,既提供DRM驱动程序,KMS以及处理纹理。
Maciej Piechotka 2011年

DRM和KMS涉及的设备驱动程序现在必须通过专用的内部网络连接与图形卡上的图形渲染CPU通信。这可能是图形堆栈的一部分,而可能不是(即Amazon EC2 Linux)。
Michael Dillon

2

这是它的组织机构,您将从这张图片中从几页文字中了解更多信息:

在此处输入图片说明


1
这个从哪里来?圈出一些数字,这是什么意思?这似乎是Wayland特有的,而我认为X单独或Mir会有不同的组织。
muru 2015年

1
@muru做反向搜索,我想到了这个。... en.wikipedia.org/wiki/EGL_%28API%29 ...尽管它当前托管在imgur上,因为它似乎是上传的?但是我同意链接源图像,并且在哪里显示是正确的方法?
jmunsch 2015年

1
该映像实际上并不能解释xserver之外的任何内容?看着您,X11-client它只是一个斑点,但是该斑点中发生了很多事情。正如其他真棒答案所解释的。
jmunsch 2015年

1

台式机和某些服务器上的Linux仍然是所有X和帧缓冲区图形。在X窗口下-带有GTK +和Qt,是的,两者都使用X系统,再次有很多桌面环境-Gnome,KDE使用X显示器及其外壳等。

顺便说一句,最近有一个来自linux conf的视频(http://blip.tv/file/4693305/)。来自英特尔的Keith Packard谈到了X和GL *。这很有趣。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.