NVIDIA Optimus

出自 Arch Linux 中文维基

NVIDIA Optimus 是一項允許英特爾(Intel)集成圖形處理器(GPU)和英偉達(NVIDIA)獨立圖形處理器置入並通過一台筆記本電腦訪問的技術。

可用方法[編輯 | 編輯原始碼]

這裡有幾種可行的方法:

  • #僅使用英特爾顯卡 - 能節約用電,因為此時英偉達圖形處理器是完全關閉(不通電)的。
  • #僅使用英偉達顯卡 - 能比英特爾顯卡提供更強的性能表現,但是電量流失也更快(這對移動設備不太友好)。此方法和 optimus-manager 以及 nvidia-xrun 兩者一樣採用了相同的底層處理,所以在選用一種更自動化的方法之前,應該先利用這個方法來排除故障和驗證一些常規功能。
  • 兩者兼用 (在需要的時候使用英偉達圖形處理器,其他時候關閉它以節省電量):
    • #使用 PRIME 渲染分載(render offload) - 英偉達官方支持方法。
    • #使用 optimus-manager - 用一個簡單的命令切換顯卡(需要註銷重新登錄來生效)。這可實現需要時使用英偉達圖形處理器達到最大性能,不用時則將後者關閉。Optimus Manager 已不再積極開發.
    • #使用 nvidia-xrun - 使用英偉達顯卡在另外的 TTY 上運行單獨的 X 會話。這可實現需要時使用英偉達圖形處理器達到最大性能,不用時則將後者關閉。
    • #使用大黃蜂(Bumblebee) - 提供了與 Windows 下相似的功能,可以選擇需要的程序使用英偉達顯卡,而其他的程序則用英特爾顯卡運行。不過大黃蜂有重大的性能問題。
    • #使用 nouveau - (與英偉達官方提供的專有驅動相比)提供的性能較差,而且可能導致睡眠和休眠問題。不適用於最新的英偉達圖形處理器。
注意: 所有這些方法選擇都是互斥的,如果測試了一種方法後又決定使用另一種方法,則必須確保在嘗試另一種方法之前,還原通過遵循前一種方法所做的所有配置更改,否則可能會發生文件衝突和不定行為。
警告: Optimus Manager (以及類似應用) 通過生成 Xorg Config 來切換顯卡的方案不穩定, 請考慮使用官方 NVIDIA Prime 方案.

僅使用英特爾顯卡[編輯 | 編輯原始碼]

如果只考慮使用某一張顯卡而不用切換的話,請檢查電腦的 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

僅使用英偉達顯卡[編輯 | 編輯原始碼]

專有的英偉達驅動可配置為主渲染提供程序。它也有明顯的畫面撕裂問題 —— 除非通過啟動 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

接下來,依所使用的登錄圖形的方式不同而有所不同,請按實際情況選擇閱讀。

startx[編輯 | 編輯原始碼]

請在 ~/.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-utils 並運行以下命令來檢查英偉達顯卡是否被使用:

$ glxinfo | grep NVIDIA

更多信息[編輯 | 編輯原始碼]

更多信息請參見英偉達官方網頁上的這個主題文章 [2]

疑難解答[編輯 | 編輯原始碼]

本文或本章節的語言、語法或風格需要改進。參考:Help:Style

原因: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.(在Talk:NVIDIA Optimus討論)

垂直同步撕裂[編輯 | 編輯原始碼]

xorg-server需要 1.19 或更高版本,linux內核需要4.5 或更高版本,nvidia需要370.23更高版本。還需要開啟NVIDIA#DRM內核級顯示模式設置設置項以修復撕裂問題。

官方論壇查看詳細信息: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"內核參數中。

筆記本電腦未發現屏幕/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 渲染分載

使用 nouveau[編輯 | 編輯原始碼]

要了解顯卡切換相關內容,請參見 PRIME;要了解開源英偉達驅動相關內容,請參見 nouveau

使用大黃蜂(Bumblebee)[編輯 | 編輯原始碼]

請參見 Bumblebee

使用 nvidia-xrun[編輯 | 編輯原始碼]

請參見 nvidia-xrun

使用 optimus-manager[編輯 | 編輯原始碼]

請參見 Optimus-manager 上游文檔。其中包含了在 Arch Linux 系統上的安裝和配置方法。