NVIDIA Optimus (简体中文) - ArchWiki

Jump to content

相关文章

- Bumblebee
- Nouveau
- NVIDIA
- nvidia-xrun

翻译状态：本文是 NVIDIA_Optimus 的翻译。上次翻译日期：2020-10-25。如果英文版本有所更改，则您可以帮助同步翻译。

NVIDIA Optimus 是一项允许英特尔（Intel）集成图形处理器（GPU）和英伟达（NVIDIA）独立图形处理器置入并通过一台笔记本电脑访问的技术。

## 可用方法

这里有几种可行的方法：

- #仅使用英特尔显卡 - 能节约用电，因为此时英伟达图形处理器是完全关闭（不通电）的。
- #仅使用英伟达显卡 - 能比英特尔显卡提供更强的性能表现，但是电量流失也更快（这对移动设备不太友好）。此方法和 optimus-manager 以及 nvidia-xrun 两者一样采用了相同的底层处理，所以在选用一种更自动化的方法之前，应该先利用这个方法来排除故障和验证一些常规功能。
- 两者兼用 (在需要的时候使用英伟达图形处理器，其他时候关闭它以节省电量):
  - #使用 PRIME 渲染卸换（render offload） - 英伟达官方支持方法。
  - #使用 optimus-manager - 用一个简单的命令切换显卡（需要注销重新登录来生效）。这可实现需要时使用英伟达图形处理器达到最大性能，不用时则将后者关闭。
  - #使用 nvidia-xrun - 使用英伟达显卡在另外的 TTY 上运行单独的 X 会话。这可实现需要时使用英伟达图形处理器达到最大性能，不用时则将后者关闭。
  - #使用大黄蜂（Bumblebee） - 提供了与 Windows 下相似的功能，可以选择需要的程序使用英伟达显卡，而其他的程序则用英特尔显卡运行。不过大黄蜂有重大的性能问题。
  - #使用 nouveau - （与英伟达官方提供的专有驱动相比）提供的性能较差，而且可能导致睡眠和休眠问题。不适用于最新的英伟达图形处理器。

注意： 所有这些方法选择都是互斥的，如果测试了一种方法后又决定使用另一种方法，则必须确保在尝试另一种方法之前，还原通过遵循前一种方法所做的所有配置更改，否则可能会发生文件冲突和不定行为。

## 仅使用英特尔显卡

如果只考虑使用某一张显卡而不用切换的话，请检查电脑的 BIOS，那里应该有禁用某一显卡的选项。有些笔记本只允许禁用独立显卡，另一些则相反。但如果只想用两张显卡中的一张的话，还是值得去检查一下 BIOS 的。

如果 BIOS 不允许禁用掉英伟达显卡，那么可以从 Linux 内核本身禁用它。请参阅 Hybrid graphics#Fully power down discrete GPU。

### 在不切换渲染提供程序情况下使用 CUDA

您可以在不切换渲染到英伟达显卡的情况下使用 CUDA。所要做的就是确保在启动 CUDA 程序前英伟达显卡已经打开（通电），详情请参见 Hybrid graphics#Fully power down discrete GPU。

现在，当启动 CUDA 程序时，会自动加载必要的内核模块。在使用 CUDA 后要关闭英伟达显卡，请必须先将 `nvidia` 内核模块卸载：

    # rmmod nvidia_uvm
    # rmmod nvidia

## 仅使用英伟达显卡

专有的英伟达驱动可配置为主渲染提供程序。它也有明显的画面撕裂问题 —— 除非通过启动 DRM 内核模式设定 启用 PRIME Sync，更多信息请参见 [1]。专有驱动确实允许使用独立图形处理器，而且（截至 2017 年一月）它相比 nouveau 驱动有更明显的性能优势。

首先，安装 英伟达驱动和 xorg-xrandr 软件包。然后，配置 `/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf`，其中的选项将与软件包提供的 `/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf` 文件结合提供与此配置的兼容性。

注意： 在一些配置上，此配置会使英伟达驱动无法通过 EDID 文件自动探测显示参数值。解决方案可参考#分辨率和屏幕扫描错误“EDID errors in Xorg.log”。

    /etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf

    Section "OutputClass"
        Identifier "intel"
        MatchDriver "i915"
        Driver "modesetting"
    EndSection

    Section "OutputClass"
        Identifier "nvidia"
        MatchDriver "nvidia-drm"
        Driver "nvidia"
        Option "AllowEmptyInitialConfiguration"
        Option "PrimaryGPU" "yes"
        ModulePath "/usr/lib/nvidia/xorg"
        ModulePath "/usr/lib/xorg/modules"
    EndSection

接下来，请在 `~/.xinitrc` 文件的开头处添加下列两行内容：

    ~/.xinitrc

    xrandr --setprovideroutputsource modesetting NVIDIA-0
    xrandr --auto

现在重启以加载驱动，X 服务器也应该启动了。

如果显示 DPI 不正确，请再添加下列一行：

    xrandr --dpi 96

如果在启动 X 服务器时出现黑屏，请确保 `~/.xinitrc` 文件中的两个 `xrandr` 命令后面没有“与（&）”符号。如果有“与（&）”号，窗口管理器似乎可以在 `xrandr` 命令执行完成前就运行了，从而导致了黑屏。

### 显示管理器

如果打算使用显示管理器 (Display Manager, DM)，就不是使用 `~/.xinitrc` 文件了，而是需要为显示管理器创建或编辑显示配置脚本。

#### LightDM

为 LightDM 显示管理器创建/编辑脚本：

    /etc/lightdm/display_setup.sh

    #!/bin/sh
    xrandr --setprovideroutputsource modesetting NVIDIA-0
    xrandr --auto

然后赋予脚本可执行权限：

    # chmod +x /etc/lightdm/display_setup.sh

通过编辑 `/etc/lightdm/lightdm.conf` 的 `[Seat:*]` 部分配置 LightDM 来运行这个脚本：

    # nano /etc/lightdm/lightdm.conf

    [Seat:*]
    display-setup-script=/etc/lightdm/display_setup.sh

现在重启，然后显示管理器应该能启动了。

#### SDDM

为 SDDM 显示管理器创建/编辑脚本（SDDM 是 KDE 的默认显示管理器）：

    /usr/share/sddm/scripts/Xsetup

    xrandr --setprovideroutputsource modesetting NVIDIA-0
    xrandr --auto

#### GDM

要为 GDM 创建启动脚本，请创建两个新的 .desktop 文件，如下：

    /usr/share/gdm/greeter/autostart/optimus.desktop
    /etc/xdg/autostart/optimus.desktop

    [Desktop Entry]
    Type=Application
    Name=Optimus
    Exec=sh -c "xrandr --setprovideroutputsource modesetting NVIDIA-0; xrandr --auto"
    NoDisplay=true
    X-GNOME-Autostart-Phase=DisplayServer

并且请确保 GDM 使用 Xorg 作为后端。

### 检查 3D 设置

可通过安装 mesa-demos 并运行以下命令来检查英伟达显卡是否被使用：

    $ glxinfo | grep NVIDIA

### 更多信息

更多信息请参见英伟达官方网页上的这个主题文章 [2]。

## 疑难解答

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: If this is relevant only for #Use NVIDIA graphics only, it should be a subsection. Otherwise it should be the last section on the page. (Discuss in Talk:NVIDIA Optimus (简体中文))

### 垂直同步撕裂

xorg-server需要 1.19 或更高版本，linux内核需要4.5 或更高版本，nvidia需要370.23更高版本。还需要开启DRM kernel mode setting设置项以修复撕裂问题。

官方论坛查看详细信息：forum thread。

### Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)

添加 `rcutree.rcu_idle_gp_delay=1` 到内核参数。原始话题见[3]。

### 分辨率和屏幕扫描错误“EDID errors in Xorg.log”

这是由于NVIDIA的驱动程序没有检测显示器的EDID。你需要手动指定路径的EDID文件或以类似的方式提供相同的信息。

增加这些线路和变化部分反映你自己的系统：

    /etc/X11/xorg.conf

    Section "Device"
           	Option		"ConnectedMonitor" "CRT-0"
           	Option		"CustomEDID" "CRT-0:/sys/class/drm/card0-LVDS-1/edid"
    	Option		"IgnoreEDID" "false"
    	Option		"UseEDID" "true"
    EndSection

如果xorg不会开始尝试更换所有CRT到DFB。显示器连接通过LVDS，card0是标识为英特尔卡。EDID二进制是这个目录。如果硬件配置不同，CustomEDID的值可能有所不同，但这已得到证实。不管怎样，路径都将从/sys/class/drm开始

或者你可以生成你的工具，如读取read-edid,将驱动点指向这个文件。也可以使用modelines，但是务必要修改 "UseEDID" 和 "IgnoreEDID"。

### 锁定问题(lspci 挂起)

问题：lspci挂起，系统暂停失败，关机时挂起，optirun挂起。多出现在新的笔记本电脑或使用了类似bbswitch GTX的965m时（例如bumblebee）以及nouveau的情况。

当独立显卡接通电源，可能出现这种情况，参见 (kernel bug 156341)。

具体解决方法参见 this issue。 你可以添加`acpi_osi="!Windows 2015"` 或`acpi_osi=! acpi_osi="Windows 2009"` 到Kernel parameters中。

### 笔记本电脑未发现屏幕/NVIDIA Optimus

检查`$ lspci | grep VGA`输入内容是否类似：

    00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 02)
    01:00.0 VGA compatible controller: nVidia Corporation Device 0df4 (rev a1)

NVIDIA驱动自319.12 Beta [4]起已经包含在内核（版本3.9级以上)中。

另一个解决方案是安装Intel驱动进行显示，如果需要运行3D软件，可以使用 Bumblebee (简体中文)来使用NVIDIA显卡。

## 使用可切换显卡

### 使用 PRIME 渲染卸换（render offload）

这是英伟达为支持可切换显卡提供的官方方法。

详情请参见 PRIME#PRIME render offload。

### 使用 nouveau

要了解显卡切换相关内容，请参见 PRIME；要了解开源英伟达驱动相关内容，请参见 nouveau。

### 使用大黄蜂（Bumblebee）

请参见 Bumblebee。

### 使用 nvidia-xrun

请参见 nvidia-xrun。

### 使用 optimus-manager

请参见 Optimus-manager 上游文档。其中包含了在 Arch Linux 系统上的安装和配置方法。

Category:

- Graphics (简体中文)

Hidden category:

- Pages or sections flagged with Template:Style