# NVIDIA Optimus (简体中文)

相关文章

- Bumblebee
- Nouveau
- NVIDIA
- With Xorg 1.17.1

翻译状态： 本文是英文页面 NVIDIA_Optimus 的翻译，最后翻译时间：2015-03-09，点击这里可以查看翻译后英文页面的改动。

NVIDIA Optimus是一种允许 Intel 集成 GPU 和 NVIDIA GPU 建成并通过一台笔记本电脑访问的技术。让 Optimus 显卡工作在 Arch Linux 下需要一些稍微复杂的设置步骤，下文说明了几种可用方法:

- 在 BIOS 里禁用其中之一，如果禁用 NVIDIA 显卡的话也许会提升电池续航能力。但并不适用于所有 BIOS, 也不能切换显卡。

- 使用闭源 NVIDIA 驱动提供的官方 Optimus 支持，这能让 NVIDIA 显卡发挥最大性能但不能切换显卡，同时会比开源驱动有更多 bug.

- 使用开源 nouveau 驱动提供的 PRIME 功能，它能够切换显卡但是和闭源驱动相比性能差劲，并且目前并未实现任何省电功能。

- 使用第三方程序 Bumblebee 来实现类似于 Optimus 的功能，同时支持切换显卡和省电，但需要额外设置。

这些方法在下文有详细解释。

## 禁用可交换显卡

如果你只使用某一显卡而不切换的话，检查你系统 BIOS 的选项，那里应该有禁用某一显卡的选项。某些笔记本只支持禁用独立显卡，另一些则相反，但是如果你只想用其中之一的话还是值得一看的。但是若你想同时使用两个显卡，或者无法禁用你不想要的显卡的话，请看以下的方法。

## 使用 nvidia

闭源 NVIDIA 驱动并不像 nouveau 驱动一样支持动态切换 (意味着它只能使用 NVIDIA 设备). 它还有一些已被 NVIDIA 承认但仍未修复的显著问题，然而，它使用独立显卡并 (自2013年10月) 在性能上相比 nouveau 驱动有显著优势。

首先，安装官方源的驱动包 nvidia 和软件包 xorg-xrandr.

然后，你必须创建一个 `xorg.conf`. 你需要提供 NVIDIA 显卡的 PCI 地址，可通过以下命令获取:

    $ lspci | grep -E "VGA|3D"

PCI 地址是提到 NVIDIA 的输出行的前7个字符，看起来像 `01:00.0`. 在 `xorg.conf` 中，需转换为 `#:#:#` 格式；例如 `01:00.0` 应该写成 `1:0:0`.

    # nano /etc/X11/xorg.conf

    Section "ServerLayout"
        Identifier "layout"
        Screen 0 "nvidia"
        Inactive "intel"
    EndSection

    Section "Device"
        Identifier "nvidia"
        Driver "nvidia"
        BusID "PCI:PCI address determined earlier"
        # e.g. BusID "PCI:1:0:0"
    EndSection

    Section "Screen"
        Identifier "nvidia"
        Device "nvidia"
        Option "AllowEmptyInitialConfiguration"
    EndSection

    Section "Device"
        Identifier "intel"
        Driver "modesetting"
        Option "AccelMethod"  "none"
    EndSection

    Section "Screen"
        Identifier "intel"
        Device "intel"
    EndSection

之后，把以下内容添加到 `~/.xinitrc` 开头:

    $ nano ~/.xinitrc

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

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

如果在启动 X 时黑屏，确保 `~/.xinitrc` 的两个 `xrandr` 命令后没有 `&` 符号；如果有，可能是窗口管理器在 `xrandr` 命令执行完成之前启动导致了黑屏。

### 显示管理器

如果你使用显示管理器 (Display Manager, DM)，你需要创建或编辑启动管理器的脚本而不是使用 `~/.xinitrc`.

#### LightDM

对于 LightDM:

    # nano /etc/lightdm/display_setup.sh

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

赋予脚本可执行权限:

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

编辑 `/etc/lightdm/lightdm.conf` 的 `[SeatDefaults]` 部分以配置 lightdm 运行这个脚本:

    # nano /etc/lightdm/lightdm.conf

    [SeatDefaults]
    display-setup-script=/etc/lightdm/display_setup.sh

重启，你的 DM 应该启动了。

#### SDDM

对于 SDDM:

    # nano /usr/share/sddm/scripts/Xsetup

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

#### KDM

对于 KDE 的 KDM, 添加 xrandr 命令到 `/usr/share/config/kdm/Xsetup` 中去。

### 检验 3D

你可通过安装 mesa-demos 并运行以下命令来检验 NVIDIA 是否被使用:

    $ glxinfo | grep NVIDIA

### 更多信息

更多信息参见 NVIDIA 官方页面的这个主题。

## 疑难问题

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

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

## 使用 nouveau

开源 nouveau 驱动 (xf86-video-nouveau) 能靠一种叫 PRIME 的技术动态切换到 Intel 驱动 (xf86-video-intel). 更多信息见 wiki 的 PRIME 页面。

## 使用 Bumblebee

如果你想使用 Bumblebee, 并实现省电和其他有用特性，见 wiki 的 Bumblebee 页面。

Category:

- Graphics (简体中文)