如何在不使用 nomodeset 内核参数的情况下使用 EVGA 750 TI SC(Nvidia Gforce 750)?

如何在不使用 nomodeset 内核参数的情况下使用 EVGA 750 TI SC(Nvidia Gforce 750)?

前几天,我尝试同时启动 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 可以使用通用(非加速)电子视频标准协会接口(全部显卡共享),或硬件加速的,如nouveauintelradeon,它们分别通过 Nvidia、Intel 和 AMD 图形处理器直接渲染基础设施(DRI)用户空间组件。DRI 基本上与内核的 D​​RM 对话以提交加速向硬件发送绘图命令。未加速的 DDX 速度非常慢,因此如果可以的话,您应该始终使用加速的 DDX。

  • - 用户空间组件基本上是 Linux 内核 DRM API 的薄包装器。硬件加速 DDX 和 Mesa 都使用 libdrm。

所以,“Linux”(无论其含义如何;Mesa 不是 Linux 内核的一部分)实际上并没有认为您正在 VMware 下运行。相反,最有可能的情况是,您对专有 Nvidia 图形驱动程序的错误配置导致操作系统回退到llvmpipeMesa 后端,这是在 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 加速的人都会运行最新版本。事情正在迅速变化,您在旧版本上不会有良好的体验。

建议

根据我对您的技术经验水平的判断,我建议您执行以下操作:

  1. 从你的系统中删除 Xubuntu 和 Ubuntu。

  2. 如果你还没有 Ubuntu 14.10,请下载。获取 64 位版本。不要考虑 32 位版本。

  3. 安装它。它应该“Just Work” 并带您进入桌面。

  4. 像其他答案所建议的那样,转到“附加驱动程序”小程序并获取 Nvidia 专有驱动程序。

  5. 重启。

答案2

尝试最新的 Ubuntu 版本并检查附加驱动程序在设置中。

相关内容