我试图整理我对 Linux 上图形不同部分的理解,但我对以下每个概念所扮演的角色感到困惑。
- 显示服务器
- 窗口管理器
- 显卡驱动程序
我的问题:
- 图形驱动程序是在 Linux 内核内部还是外部实现的?如果在内核之外,为什么当网络、磁盘、文件系统都在内核内部时它们被排除在外?
- X Windows、Gnome、Ubuntu Unity、KDE、Mir、Wayland 谁在显示服务器、窗口管理器和图形驱动程序方面做了什么?
我回答这个问题的目标是了解哪些项目贡献了 Linux 图形体验的哪些部分?
更新 http://blog.mecheye.net/2012/06/the-linux-graphics-stack/ 有很多我一直在寻找的细节。
答案1
- 图形驱动程序作为必须加载到其中的内核模块来实现。所以,基本上,他们是外部内核。是否可以构建一个内核来包含它们,这是一个比我更有知识的人来回答的问题。我认为它们被排除在内核之外,因为如果内核是用驱动程序构建的,那么
nouveau
稍后加载专有的 NVIDIA 驱动程序就会发生冲突。 - X Windows、Wayland 和 Mir 是显示服务器。
- Gnome、Ubuntu Unity 和 KDE 都是桌面环境而不是窗口管理器。窗口管理器是桌面环境的一部分(例如 Gnome 使用
metacity
)。也就是说,您可以运行独立的窗口管理器(没有桌面环境),例如惊人的,xmonad或者开箱
至于哪个组件扮演哪个部分:
- 显卡驱动程序是内核与显卡“对话”的方式。
- 显示服务器用于创建和管理窗口以及显示的其他图形元素。
- 桌面环境或窗口管理器充当显示服务器的客户端,并指示它如何绘制/装饰窗口、面板......
答案2
术语“图形驱动程序”用于指代几种不同的事物。其中之一是内核驱动程序。内核驱动程序主要只是设置视频模式并促进将数据传入/传出卡。它还通常将固件下载到卡上的 GPU 中。固件是 GPU 本身运行的程序,但不幸的是,图形供应商仅将其作为二进制 blob 提供,因此您无法查看其源代码。
除此之外,您通常会运行 Xorg,它有自己的驱动程序,可将通用 X11 或 OpenGL 绘图调用转换为卡理解的命令,并将它们发送到卡执行。它还可以自行完成一些工作,具体取决于 GPU 支持和不支持的命令。在 OpenGL 调用的情况下,直接渲染基础设施允许这部分驱动程序实际上直接在客户端应用程序而不是 X 服务器中执行,以获得可接受的性能。它还允许客户端应用程序中的驱动程序将其命令直接发送到 GPU,这要归功于 Xorg 和内核驱动程序在启动时的协调和帮助。
Wayland 和 Mir 应该取代 Xorg 作为简化类型的显示服务器。
Unity 既是 shell(提供桌面/启动器)又是合成窗口管理器。
GNOME 和 KDE 是桌面环境。它们是由许多组件组成的大型项目。它们的核心是各自的应用工具包,分别是 GNOME 的 GTK 和 KDE 的 Qt。这是一个用于编写应用程序的库框架,并为构建其他所有内容提供了基础。它们提供的一些基本服务包括事件和对象处理、Windows、基本绘图功能、I/O 等等。