arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
292 lines (191 loc) • 13.2 kB
Markdown
相关文章
* [Bumblebee](/index.php/Bumblebee "Bumblebee")
* [Nouveau](/index.php/Nouveau "Nouveau")
* [NVIDIA](/index.php/NVIDIA "NVIDIA")
* [With Xorg 1.17.1](/index.php?title=With_Xorg_1.17.1&action=edit&redlink=1 "With Xorg 1.17.1 (page does not exist)")
**翻译状态:** 本文是英文页面 [NVIDIA_Optimus](/index.php/NVIDIA_Optimus "NVIDIA Optimus") 的[翻译](/index.php/ArchWiki_Translation_Team_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "ArchWiki Translation Team (简体中文)"),最后翻译时间:2017-09-13,点击[这里](https://wiki.archlinux.org/index.php?title=NVIDIA_Optimus&diff=0&oldid=364751)可以查看翻译后英文页面的改动。
NVIDIA Optimus是一种允许 Intel 集成 GPU 和 NVIDIA GPU 建成并通过一台笔记本电脑访问的技术。让 Optimus 显卡工作在 Arch Linux 下需要一些稍微复杂的设置步骤,下文说明了几种可用方法:
* 在 BIOS 里禁用其中之一,如果禁用 NVIDIA 显卡的话也许会提升电池续航能力。但并不适用于所有 BIOS, 也不能切换显卡。
* 使用闭源 NVIDIA 驱动提供的官方 Optimus 支持,这能让 NVIDIA 显卡发挥最大性能但不能切换显卡,同时会比开源驱动有更多 bug.
* 使用开源 nouveau 驱动提供的 PRIME 功能,它能够切换显卡但是和闭源驱动相比性能差劲,并且目前并未实现任何省电功能。
* 使用第三方程序 Bumblebee 来实现类似于 Optimus 的功能,同时支持切换显卡和省电,但需要额外设置。
* 利用nvidia-xrun,一个使用全性能的离散NVIDIA图形功能来单独运行X的使用程序。
这些方法在下文有详细解释。
## Contents
* [1 禁用可交换显卡](#.E7.A6.81.E7.94.A8.E5.8F.AF.E4.BA.A4.E6.8D.A2.E6.98.BE.E5.8D.A1)
* [2 使用 nvidia](#.E4.BD.BF.E7.94.A8_nvidia)
* [2.1 可选配置](#.E5.8F.AF.E9.80.89.E9.85.8D.E7.BD.AE)
* [2.2 显示管理器](#.E6.98.BE.E7.A4.BA.E7.AE.A1.E7.90.86.E5.99.A8)
* [2.2.1 LightDM](#LightDM)
* [2.2.2 SDDM](#SDDM)
* [2.2.3 GDM](#GDM)
* [2.3 检验 3D](#.E6.A3.80.E9.AA.8C_3D)
* [2.4 更多信息](#.E6.9B.B4.E5.A4.9A.E4.BF.A1.E6.81.AF)
* [3 疑难问题](#.E7.96.91.E9.9A.BE.E9.97.AE.E9.A2.98)
* [3.1 垂直同步撕裂](#.E5.9E.82.E7.9B.B4.E5.90.8C.E6.AD.A5.E6.92.95.E8.A3.82)
* [3.2 Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)](#Failed_to_initialize_the_NVIDIA_GPU_at_PCI:1:0:0_.28GPU_fallen_off_the_bus_.2F_RmInitAdapter_failed.21.29)
* [3.3 分辨率和屏幕扫描错误“EDID errors in Xorg.log”](#.E5.88.86.E8.BE.A8.E7.8E.87.E5.92.8C.E5.B1.8F.E5.B9.95.E6.89.AB.E6.8F.8F.E9.94.99.E8.AF.AF.E2.80.9CEDID_errors_in_Xorg.log.E2.80.9D)
* [3.4 锁定问题(lspci 挂起)](#.E9.94.81.E5.AE.9A.E9.97.AE.E9.A2.98.28lspci_.E6.8C.82.E8.B5.B7.29)
* [3.5 笔记本电脑未发现屏幕/NVIDIA Optimus](#.E7.AC.94.E8.AE.B0.E6.9C.AC.E7.94.B5.E8.84.91.E6.9C.AA.E5.8F.91.E7.8E.B0.E5.B1.8F.E5.B9.95.2FNVIDIA_Optimus)
* [4 使用 nouveau](#.E4.BD.BF.E7.94.A8_nouveau)
* [5 使用 Bumblebee](#.E4.BD.BF.E7.94.A8_Bumblebee)
* [6 使用 nvidia-xrun](#.E4.BD.BF.E7.94.A8_nvidia-xrun)
## 禁用可交换显卡
如果你只使用某一显卡而不切换的话,检查你系统 BIOS 的选项,那里应该有禁用某一显卡的选项。某些笔记本只支持禁用独立显卡,另一些则相反,但是如果你只想用其中之一的话还是值得一看的。但是若你想同时使用两个显卡,或者无法禁用你不想要的显卡的话,请看以下的方法。
另一种完全关闭独立显卡的方法请查看 [Hybrid graphics#Fully Power Down Discrete GPU](/index.php/Hybrid_graphics#Fully_Power_Down_Discrete_GPU "Hybrid graphics").
如果您想使用这两张显卡,或者不能禁用您不想要的卡,请参见下面的选项。
## 使用 nvidia
[闭源 NVIDIA 驱动](/index.php/NVIDIA "NVIDIA")并不像 nouveau 驱动一样支持动态切换 (意味着它只能使用 NVIDIA 设备). 它还有一些已被 NVIDIA 承认但仍未修复的显著问题,然而,它使用独立显卡并 (自2013年10月) 在性能上相比 nouveau 驱动有显著优势。
首先,安装[官方源](/index.php/%E5%AE%98%E6%96%B9%E6%BA%90 "官方源")的驱动包 [nvidia](https://www.archlinux.org/packages/?name=nvidia) 和软件包 [xorg-xrandr](https://www.archlinux.org/packages/?name=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`.
**注意:** 在一些设置中,此设置要通过对NVIDIA的驱动程序通过EDID文件来中断对显示器值的自动检测。可查看该文章——[#Resolution, screen scan wrong. EDID errors in Xorg.log](#Resolution.2C_screen_scan_wrong._EDID_errors_in_Xorg.log)以了解详情
如果安装了1.17.2或者更高版本的X服务([[1]](http://us.download.nvidia.com/XFree86/Linux-x86/358.16/README/randr14.html))
`/etc/X11/xorg.conf`
```
Section "Module"
Load "modesetting"
EndSection
Section "Device"
Identifier "nvidia"
Driver "nvidia"
BusID "<BusID for NVIDIA device here>"
Option "AllowEmptyInitialConfiguration"
EndSection
```
之后,把以下内容添加到 `~/.xinitrc` 开头:
`~/.xinitrc`
```
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
```
现在重启以加载驱动,X 也应该启动了。 如果你的DPI显示不正确,在上面的`~/.xinitrc`配置中指定dpi(实际dpi以你的设备为准),如:
```
xrandr --dpi 96
```
如果在启动 X 时黑屏,确保 `~/.xinitrc` 的两个 `xrandr` 命令后没有 `&` 符号;如果有,可能是窗口管理器在 `xrandr` 命令执行完成之前启动导致了黑屏。
如果依然黑屏,参考下文[#可选配置](#.E5.8F.AF.E9.80.89.E9.85.8D.E7.BD.AE)
### 可选配置
如果你使用1.17.1以上版本的Xorg服务出现崩溃,修改`/etc/X11/xorg.conf`配置如下(Intel设备):
`# nano /etc/X11/xorg.conf`
```
Section "Device"
Identifier "intel"
Driver "modesetting"
BusID "PCI:0:2:0"
Option "AccelMethod" "sna"
#Option "TearFree" "True"
#Option "Tiling" "True"
#Option "SwapbuffersWait" "True"
EndSection
```
上面文件中的`BusID`必须和lspci命令的输出相匹配。搜索带有“VGA兼容控制器”的行,其中包含英特尔的内容。例如:
```
$ lspci |grep VGA
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
```
**提示:** 上面配置文件中后三项的选项如果不注释掉**可能导致画面撕裂**,但(注释掉)换取的是一定的性能损失。注意, `TearFree` 选项只用于`"sna"` 加速, 参看 [Intel graphics (简体中文)](/index.php/Intel_graphics_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Intel graphics (简体中文)")。`"AccelMethod"` 选项中,你可以使用 `"sna"` 或 `"uxa"`。
如果X服务启动后屏幕上什么也没有出现,检查`/var/log/xorg.conf`,确保该文件含有类似此行内容:
`/var/log/xorg.conf`
```
[ 16112.937] (EE) Screen 1 deleted because of no matching config section.
```
如过具有类似上诉内容,更改`/etc/X11/xorg.conf`文件的serverlayout段,问题可能会消失:
`/etc/X11/xorg.conf`
```
Section "ServerLayout"
Identifier "layout"
Screen 1 "nvidia"
Inactive "intel"
EndSection
```
### 显示管理器
如果你使用显示管理器 (Display Manager, DM),你需要创建或编辑启动管理器的脚本而不是使用 `~/.xinitrc`.
#### LightDM
对于 [LightDM](/index.php/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](/index.php/SDDM "SDDM"):
`# nano /usr/share/sddm/scripts/Xsetup`
```
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
```
#### GDM
对于[GDM](/index.php/GDM "GDM"):
```
/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](https://www.archlinux.org/packages/?name=mesa-demos) 并运行以下命令来检验 NVIDIA 是否被使用:
```
$ glxinfo | grep NVIDIA
```
### 更多信息
更多信息参见 NVIDIA 官方页面的[这个](http://http.download.nvidia.com/XFree86/Linux-x86_64/340.32/README/randr14.html)主题。
## 疑难问题
### 垂直同步撕裂
[xorg-server](https://www.archlinux.org/packages/?name=xorg-server)需要 1.19 或更高版本,[linux](https://www.archlinux.org/packages/?name=linux)内核需要4.5 或更高版本,[nvidia](https://www.archlinux.org/packages/?name=nvidia)需要370.23更高版本。还需要开启[DRM kernel mode setting](/index.php/NVIDIA#DRM_kernel_mode_setting "NVIDIA")设置项以修复撕裂问题。
官方论坛查看详细信息:[forum thread](https://devtalk.nvidia.com/default/topic/957814/linux/prime-and-prime-synchronization/)。
### Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)
添加 `rcutree.rcu_idle_gp_delay=1` 到内核参数。原始话题见[[2]](https://bbs.archlinux.org/viewtopic.php?id=169742)。
### 分辨率和屏幕扫描错误“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](https://www.archlinux.org/packages/?name=read-edid),将驱动点指向这个文件。也可以使用modelines,但是务必要修改 "UseEDID" 和 "IgnoreEDID"。
### 锁定问题(lspci 挂起)
问题:lspci挂起,系统暂停失败,关机时挂起,optirun挂起。多出现在新的笔记本电脑或使用了类似bbswitch GTX的965m时(例如bumblebee)以及nouveau的情况。
当独立显卡接通电源,可能出现这种情况,参见 ([kernel bug 156341](https://bugzilla.kernel.org/show_bug.cgi?id=156341))。
具体解决方法参见 [this issue](https://github.com/Bumblebee-Project/Bumblebee/issues/764#issuecomment-234494238)。 你可以添加`acpi_osi="!Windows 2015"` 或`acpi_osi=! acpi_osi="Windows 2009"` 到[Kernel parameters](/index.php/Kernel_parameters "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 [[3]](http://www.nvidia.com/object/linux-display-amd64-319.12-driver.html)起已经包含在内核(版本3.9级以上)中。
另一个解决方案是安装[Intel](/index.php/Intel "Intel")驱动进行显示,如果需要运行3D软件,可以使用 [Bumblebee (简体中文)](/index.php/Bumblebee_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Bumblebee (简体中文)")来使用NVIDIA显卡。
## 使用 nouveau
开源 [nouveau](/index.php/Nouveau "Nouveau") 驱动 ([xf86-video-nouveau](https://www.archlinux.org/packages/?name=xf86-video-nouveau)) 能靠一种叫 PRIME 的技术动态切换到 Intel 驱动 ([xf86-video-intel](https://www.archlinux.org/packages/?name=xf86-video-intel)). 更多信息见 wiki 的 [PRIME](/index.php/PRIME "PRIME") 页面。
## 使用 Bumblebee
如果你想使用 Bumblebee, 并实现省电和其他有用特性,见 wiki 的 [Bumblebee](/index.php/Bumblebee "Bumblebee") 页面。
## 使用 nvidia-xrun
安装[nvidia-xrun-git](https://aur.archlinux.org/packages/nvidia-xrun-git/)。github上查看该项目 [https://github.com/Witko/nvidia-xrun](https://github.com/Witko/nvidia-xrun)