UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

292 lines (191 loc) 13.2 kB
相关文章 * [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)