前几天,我尝试同时启动 Windows 8、Xubuntu 和普通的 Ubuntu,结果遇到了问题。我使用的是 EVGA 750 TI SC,我认为 Linux 不支持开箱即用的 Nvidia 驱动程序,因为存在法律问题。我当时并不知道这一点,甚至无法安装操作系统(我已经安装了 Windows 8,接下来要尝试 Ubuntu)。
GRUB 启动菜单后,我一直收到黑屏,但我发现这可能是视频驱动程序问题。因此,我将显示器连接到主板的内置图形端口,并取出 750 TI。这有效,我能够安装 Ubuntu 并正常启动一切。我在 Ubuntu 和 Xubuntu 上都安装了 Nvidia 驱动程序,但只要我不在启动选项中启用“nomodeset”,我的 Nvidia 卡就无法工作。我认为这没问题,直到我尝试进行基准测试,我发现 Linux 认为我正在使用 VMware,即使在最低设置下玩 Minecraft 也能获得 10-15 fps。
那么我该如何解决这个问题?
答案1
澄清误解
由于法律问题,Linux 不支持开箱即用的 Nvidia 驱动程序
虽然从技术上来说这确实是正确的,但原因却截然不同,Ubuntu(这不是只是Linux;它是 Linux 加上许多其他(独立)东西的组合)做将专有的 Nvidia 和 AMD 图形驱动程序作为其发行版的默认部分。事实上,安装它们相当简单,你不需要做任何太技术性的事情就可以成功完成。我不确定你尝试安装 Nvidia 图形驱动程序时采取了哪些步骤,但听起来你没有使用官方支持的方法。
Linux 以为我正在使用 vmware
不。VMware 实际上为开源图形堆栈(简称 OSGS)。由于 Mesa 的创建者是 VMware 的员工(他创办 Mesa 时还不是,但现在是),如果您使用 OSGS,则 OpenGL 供应商字符串中通常会出现“VMware”这个名称。OSGS 实际上由以下组件组成:
台面- 用户空间 OpenGL 实现,包含基于软件和硬件加速的 OpenGL 实现。最近还实现了一些其他 API,例如 OpenCL、可能是 Direct3D 9、OpenVG 等。基本上,Mesa 就是利用开源内核驱动程序的公开硬件来绘制 3D 内容。在 Mesa 中,有硬件特定的 OpenGL 实现,它们要么基于经典的Mesa(目前,只有英特尔 GPU 驱动程序基于经典 Mesa),或者镓3D它是 Mesa 的一部分,提供了大量共享代码,可用于相对快速地为新硬件提供 OpenGL 支持。
Linux 内核- 内核包含直接渲染管理器(缩写为 DRM,但与数字限制管理无关),它包含所有受支持硬件的 OSGS 的“内核端”组件。
Xorg 显示服务器- 也称为“X”、“X11”或其背后的组织“X.Org”,这是一个提供基本输入(鼠标/键盘/操纵杆)和显示基础设施的用户空间组件。程序连接使用 TCP 或 UNIX 域套接字连接到 Xorg 显示服务器,并提交绘图命令到服务器。然后服务器使用显示设备扩展(DDXes)将绘制命令传递给视频硬件。
DDX- DDXes 实现发送到 Xorg 服务器的绘图命令的实际“后端”。DDXes 可以使用通用(非加速)电子视频标准协会接口(全部显卡共享),或硬件加速的,如
nouveau
、intel
或radeon
,它们分别通过 Nvidia、Intel 和 AMD 图形处理器直接渲染基础设施(DRI)用户空间组件。DRI 基本上与内核的 DRM 对话以提交加速向硬件发送绘图命令。未加速的 DDX 速度非常慢,因此如果可以的话,您应该始终使用加速的 DDX。库- 用户空间组件基本上是 Linux 内核 DRM API 的薄包装器。硬件加速 DDX 和 Mesa 都使用 libdrm。
所以不,“Linux”(无论其含义如何;Mesa 不是 Linux 内核的一部分)实际上并没有认为您正在 VMware 下运行。相反,最有可能的情况是,您对专有 Nvidia 图形驱动程序的错误配置导致操作系统回退到llvmpipe
Mesa 后端,这是在 CPU 上进行软件渲染的尽力尝试(但与硬件加速驱动程序相比,它仍然非常慢)。但是,如果您不发布完整的 OpenGL 版本字符串,就不可能知道您到底看到了什么。您可以使用命令显示您的 OpenGL 版本字符串glxinfo
(您可能必须先安装一个软件包)。
只要我不在启动选项中启用“nomodeset”,我的 nvidia 卡就无法工作。
让我尝试通过重写来解析这个令人困惑的句子:
如果我做在我的启动选项中启用“nomodeset”,然后我的 Nvidia 卡做工作。
您的情况是这样吗,或者您有其他的意思?
如果这是真的,你应该意识到,这nomodeset
实际上告诉欧空局驱动程序启用用户模式设置,这主要会破坏 3D 加速。
澄清:
桌面 GNU/Linux 上常用的图形驱动程序堆栈有两种类型:
- 所有权:Nvidia 和 AMD 开发了快速图形驱动程序,但它们不与任何人共享源代码。这些统称为专有驱动程序,因为它们具有相似的特性和集成问题。
- 开源:我上面讨论过的OSGS。
有两种类型的模式设置在桌面 GNU/Linux 上常用:
用户模式设置:这是专有驱动程序支持的唯一模式设置类型。过去,这也是 OSGS 支持的唯一模式设置类型。但近年来,OSGS 越来越多地转向内核模式设置,以至于人们普遍认为,用户模式设置是一种不受支持的配置,在使用 OSGS 时可能会中断。但是,只要 OSGS 完全不受干扰,用户模式设置仍然可以与专有驱动程序很好地配合使用。
内核模式设置:由 OSGS 支持仅有的。如果您打算使用专有驱动程序,如果 OSGS 的内核组件(直接渲染管理器)已启动内核模式设置,则您无法使用它们。您必须重新启动系统才能解决此问题。
不幸的是,专有图形驱动程序由践踏OSGS 包含的文件。例如,文件/usr/lib/libGL.so
(我在这里过度简化了确切的文件名)是系统的默认 OpenGL 实现。默认安装会将此文件“链接”到 OSGS——具体来说是 Mesa。一旦您安装了专有图形驱动程序,此文件将“链接”到专有驱动程序的特定 libGL 实现,而不是 Mesa。
专有图形安装程序的另一部分是更改一些配置文件,以便 OSGS 的内核组件不会尝试加载。如果 OSGS 的内核组件加载,它可能会尝试控制图形硬件,这将阻止专有图形驱动程序自己的内核模块成功加载,最终导致您的系统处于“损坏”状态。
事实上,由于图形堆栈的组件化架构(专有和 OSGS 都有类似的架构),存在大量可能的“损坏”配置,这些配置要么根本不提供任何显示输出,要么将您限制在纯文本终端,要么将加载 Xorg 但不提供 3d 加速。
以下是一些损坏配置示例的非详尽列表:
您从 OSGS 加载了内核 DRM,但您的 libGL 来自专有图形驱动程序。
您加载了专有图形驱动程序内核模块和 libGL,但您的 Xorg DDX 来自 OSGS。
您从 OSGS 加载了内核 DRM和专有图形驱动程序内核模块,但 OSGS 内核 DRM“获胜”(获得对硬件的独占控制权)。同时,您的 DDX 和 libGL 都来自专有图形驱动程序。
在以下情况下可能会发生此类损坏配置:
专有显卡驱动安装工具存在bug;
专有图形驱动程序需要特殊定制才能与您的 GNU/Linux 发行版配合使用,但您正在安装驱动程序的“原始”版本(从互联网上的 nvidia.com 或 amd.com 下载),而不是使用发行版的包管理器安装它。发行版将经过您的 Linux 发行版的测试,并且如果您以正确的方式安装它,几乎可以保证它可以正常运行。
专有图形驱动程序的安装以期望特定类型的 OSGS 安装的方式完成,但您的 OSGS 比预期的更新/更旧,因此文件或配置不匹配,导致上述错误情况之一。
您正在使用太新了或者太老专有图形驱动程序的版本。通常,最好使用与您正在运行的 Linux 发行版发布时间大致相同(至少在 6 个月内)的专有驱动程序版本。例如,如果您运行的是 Ubuntu 10.04(2010 年 4 月),则不是想要安装 2014 年 9 月发布的 Nvidia 驱动程序。另一方面,你可能想要运行最新版本的 Ubuntu;它是非常由于近年来做出的所有增强,不建议运行旧版本。
确保你正在运行 Ubuntu/Xubuntu 14.10-- 这是最新版本 (2014截至撰写本文时,最新版本已于 2017 年 10 月 23 日(2017 年 10 月 23 日)发布。出于充分的理由,任何认真考虑 (x)Ubuntu 上的 3D 加速的人都会运行最新版本。事情正在迅速变化,您在旧版本上不会有良好的体验。
建议
根据我对您的技术经验水平的判断,我建议您执行以下操作:
从你的系统中删除 Xubuntu 和 Ubuntu。
如果你还没有 Ubuntu 14.10,请下载。获取 64 位版本。不要考虑 32 位版本。
安装它。它应该“Just Work” 并带您进入桌面。
像其他答案所建议的那样,转到“附加驱动程序”小程序并获取 Nvidia 专有驱动程序。
重启。
答案2
尝试最新的 Ubuntu 版本并检查附加驱动程序在设置中。