快轉到主要內容

Nvidia PRIME用法,雙顯卡Linux電腦切換獨顯跑3D渲染,解決畫面撕裂

Linux系統 Linux使用技巧 Nvidia Arch Linux Ubuntu
✍ 切換正體/簡體字
Ivon Huang
作者
Ivon Huang
目錄

本文說明Nvidia PRIME指令的用法,適合桌電與筆電的Linux用戶參考。

如果您的Linux電腦有Intel + NvidiaAMD + Nvidia的雙顯示卡架構,不妨試試內顯為主,獨顯為輔的使用策略。

測試系統:Arch Linux 6.5.9。本文介紹的指令亦適用於Ubuntu。

1. 不要用Nvidia顯示卡當主顯卡的理由 #

Nvidia PRIME是Nvidia顯示卡的一種技術,專為雙顯卡筆電打造,可以在獨立顯示卡與內顯之間切換。

比如,筆電用Intel內顯開機,桌面環境用內顯渲染。當遇到需要重度GPU渲染的遊戲程式時,才將渲染作業分配給Nvidia顯示卡,此種過程稱之為PRIME Render Offload

我這裡要論述不要用Nvidia當主顯示卡的理由,即讓螢幕所有的渲染都由Nvidia顯示卡處理。

考慮一個常見情況:Intel + Nvidia筆電,Intel CPU有內顯,而Nvidia顯示卡接著HDMI輸出孔。

圖源:https://gist.github.com/Misairu-G/616f7b2756c488148b7309addc940b28

雙顯卡筆電預設開機應該是用內顯渲染畫面的,而HDMI輸出也能作動,為何?Linux在沒安裝Nvidia專有驅動的情況下會載入開源nouveau驅動,至少讓顯示卡有畫面,並且很省電。可是一旦用到Nvidia玩遊戲,或者跑渲染作業,就得安裝效能更強的Nvidia專有驅動。

那我們幹嘛不讓所有程式都用Nvidia渲染就行了?在裝好Nvidia驅動後可以用 Envy Control把Nvidia設定主顯示卡使用了(Use Nvidia only),所有軟體都會自動獲得更好的GPU性能。

可是這樣裝會造成一些問題,首先Nvidia GeForce MX系列顯示卡的電力控管很糟糕,裝上專有驅動後電是用噴的;再者,KDE X11與Nvidia相性不佳,偶有畫面撕裂情況。

偉大的Linus Torvalds曾說過:Nvidia fuck you

如果你跟我一樣有這種情況,那當然是避免掉這種問題比較好。回到本段一開始講的,使用PRIME Render Offload的方法。

2. 雙顯卡筆電的Nvidia獨顯切換方式 #

  1. 安裝 Envy Control

  2. 將模式設定為Hybrid,這樣會保持兩邊顯示卡啟用。

3. 如何使用prime-run指令 #

  1. 開機後,使用指令lspci -k | grep -A 2 -i "VGA"檢查目前使用的顯示卡,應會同時列出Intel和Nvidia的顯示卡
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)
        Subsystem: ASUSTeK Computer Inc. Device 1830
        Kernel driver in use: i915
--
01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
        Subsystem: ASUSTeK Computer Inc. Device 85d6
        Kernel driver in use: nvidia
  1. 因此,在這之後所有應用程式預設都會以Intel顯示卡渲染。當需要使用Nvidia顯示卡渲染的時候,在指令前面加上prime-run

舉例:從終端機執行Minetest,啟用光影,看FPS高低便能知道效果。

指令:minetest,用Intel顯示卡運算,FPS低落

指令:prime-run minetest,Nvidia顯示卡FPS正常。

如果prime-run無效,試試改用PRIME環境變數啟動程式:

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" minetest

當您要跑CUDA之類的程式的時候,也是這樣操作。預先指定以上環境變數,程式就能利用Nvidia顯示卡渲染。

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" "執行檔"

能不能讓應用程式切換Nvidia顯示卡更方便些?

如果安裝的是GNOME桌面,對應用程式圖示按右鍵會有「以獨立顯示卡啟動」的選項,這樣就會暫時以Nvidia顯示卡啟動該程式。

KDE的話則是右鍵 → 編輯應用程式,加入PRIME的環境變數:__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only",這樣以後點應用程式圖示就會一律以Nvidia顯示卡啟動。

4. 以Nvidia PRIME啟動Flatpak版程式 #

以Steam為例,使用flatpak override設定環境變數,這樣Steam以及其餘子行程都會以Nvidia獨顯啟動。

flatpak override --user --env='__NV_PRIME_RENDER_OFFLOAD=1' --env='__GLX_VENDOR_LIBRARY_NAME=nvidia' --env='__VK_LAYER_NV_optimus="NVIDIA_only"' com.valvesoftware.Steam

也可以點選個別Steam遊戲,右鍵 → 內容

在啟動選項加入PRIME的環境變數:__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" %command%,這樣只有該遊戲會用Nvidia渲染。

值得注意的是Proton 8.0部份遊戲配合PRIME似乎會閃退,需降版至Proton 7.0。

5. Nvidia PRIME的雙螢幕輸出 #

在KDE X11環境下是開箱即用,獨顯的HDMI孔接上第二個螢幕後應該會輸出畫面。

不過仍然需要使用prime-run指令才能指定用獨顯跑3D程式。

若沒看到畫面就用xrandr指令手動設定。

6. 讓桌電也用上PRIME吧 #

Nvidia PRIME通常是筆電在用的技術。因為Linux開機預設使用Intel內顯從而迴避了下面桌電獨顯的問題,Nvidia的獨顯需要使用Nvidai PRIME的技術才會動起來。

我的桌電有Intel i5-7400的內顯HD630,還有Nvidia的獨立顯示卡GTX 1050Ti。螢幕一部,插在獨顯的HDMI孔上,所以預設桌面環境是用Nvidia顯示卡渲染的。

同樣地,我之所以對Nvidia感到厭煩,是因為Nvidia的專有驅動在X11環境不時會造成畫面撕裂,還會讓系統動畫lag、小機率關不了機、開機無法進tty支援哩哩拉拉等小問題。

Nvidia PRIME可不是筆電的專利!Linux桌電只要有雙顯示卡,也是可以使用Nvidia PRIME。

所以囉我決定將筆電的這個技術,沿用到桌電上,採「內顯」用於畫面輸出,需要時再呼叫「獨顯」出來幹活的方案。

這樣的話,沒有Nvidia畫面撕裂問題,又能保持Nvidia的效能。預設用Intel內顯當主畫面輸出,3D運算就是用Intel,看影片解碼夠力了,還能無痛跑 Waydroid和Android-x86的 virglrenderer。等有需要重度3D計算再叫Nvidia顯示卡出來幹活即可。

將桌電設定為Intel內顯優先開機

  1. 現在我的螢幕線是插在Nvidia獨顯上。首先檢查目前使用的是nouveau還是Nvidia專有驅動,顯示nouveau就是前者了。
lsmod | egrep "nvidia|nouveau"
  1. 雖說若有安裝開源Nvidia驅動nouveau,應先將其解除安裝,但它是含在Mesa套件裡面的,而Intel驅動需要Mesa,所以頂多只能禁止其載入。在安裝Nvidia專有驅動後,nouveau應會自動被停用。

  2. 安裝Nvidia專有驅動和相關工具,重開機。

sudo pacman -S nvidia nvida-utils nvtop
  1. 使用指令lspci -k | grep -A 2 -i "VGA"列出目前使用的GPU。如果螢幕的線是插在Nvidia的HDMI孔上,那麼應該只會看到Nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
        Subsystem: ASUSTeK Computer Inc. Device 85d6
        Kernel driver in use: nvidia
  1. 因為等下要改用Intel內顯啟動,安裝Intel的開源驅動,還有Vulkan。
sudo pacman -S mesa intel-media-driver vulkan-intel
  1. 檢查GRUB參數:cat /etc/default/grub,確認GRUB_CMDLINE_LINUX_DEFAULT沒有設定nomodesetnvidia-drm.modeset=1,否則用Intel顯卡開機會沒畫面。

  2. 電腦關機。

  3. 進入電腦的BIOS,設定為內顯優先開機。我的主機板的該設定位置Advanced → System Agent (SA)Configuration,設定IGFX優先開機。

  4. 之後電腦重開機,將插在獨顯的HDMI線拔掉,改插到主機板的HDMI孔。

Nvidia PRIME用法參考上文。

參考資料 #

相關文章

Ubuntu 22.04 LTS如何安裝Nvidia顯示卡驅動、CUDA、cuDNN、NVIDIA Container Toolkit套件
Linux系統 Linux使用技巧 Ubuntu Nvidia
fontconfig調整Linux中文預設字體的優先順序,修正字體模糊、Emoji亂碼的問題
Linux系統 Linux使用技巧 Ubuntu Arch Linux
Linux如何設定開機自動執行應用程式
Linux系統 Linux使用技巧 Ubuntu Arch Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要登入Github帳號才能留言。支援markdown語法,方便您張貼程式碼,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。無論有無登入皆可留言。此處留言只有本站參與者看得到。若您選擇以訪客身份匿名留言,就不會收到後續回覆通知。