NVIDIA Optimus
NVIDIA Optimus 是一項允許英特爾(Intel)集成圖形處理器(GPU)和英偉達(NVIDIA)獨立圖形處理器置入並通過一台筆記本電腦訪問的技術。
可用方法[編輯 | 編輯原始碼]
這裡有幾種可行的方法:
- #僅使用英特爾顯卡 - 能節約用電,因為此時英偉達圖形處理器是完全關閉(不通電)的。
- #僅使用英偉達顯卡 - 能比英特爾顯卡提供更強的性能表現,但是電量流失也更快(這對移動設備不太友好)。此方法和 optimus-manager 以及 nvidia-xrun 兩者一樣採用了相同的底層處理,所以在選用一種更自動化的方法之前,應該先利用這個方法來排除故障和驗證一些常規功能。
- 兩者兼用 (在需要的時候使用英偉達圖形處理器,其他時候關閉它以節省電量):
- #使用 PRIME 渲染分載(render offload) - 英偉達官方支持方法。
- #使用 optimus-manager - 用一個簡單的命令切換顯卡(需要註銷重新登錄來生效)。這可實現需要時使用英偉達圖形處理器達到最大性能,不用時則將後者關閉。Optimus Manager 已不再積極開發.
- #使用 nvidia-xrun - 使用英偉達顯卡在另外的 TTY 上運行單獨的 X 會話。這可實現需要時使用英偉達圖形處理器達到最大性能,不用時則將後者關閉。
- #使用大黃蜂(Bumblebee) - 提供了與 Windows 下相似的功能,可以選擇需要的程序使用英偉達顯卡,而其他的程序則用英特爾顯卡運行。不過大黃蜂有重大的性能問題。
- #使用 nouveau - (與英偉達官方提供的專有驅動相比)提供的性能較差,而且可能導致睡眠和休眠問題。不適用於最新的英偉達圖形處理器。
僅使用英特爾顯卡[編輯 | 編輯原始碼]
如果只考慮使用某一張顯卡而不用切換的話,請檢查電腦的 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
文件結合提供與此配置的兼容性。
/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]。
疑難解答[編輯 | 編輯原始碼]
垂直同步撕裂[編輯 | 編輯原始碼]
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 系統上的安裝和配置方法。