NVIDIA Optimus (简体中文)

翻译状态: 本文是英文页面 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[Seat:*] 部分以配置 lightdm 运行这个脚本:

# nano /etc/lightdm/lightdm.conf
[Seat:*]
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 页面。