快轉到主要內容

Nvidia PRIME用法,Linux雙顯卡電腦切換獨顯跑3D渲染

分類   Linux系統 Linux使用技巧
標籤   Nvidia Linux Flatpak
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

如果您的Linux電腦有Intel + NvidiaAMD + Nvidia的雙顯示卡架構,那麼你可能會需要用到Nvidia PRIME技術。

我的有一台搭載Intel + Nvidia雙顯示卡配備的筆電。

架構如下圖,這台搭載Nvidia的雙顯卡筆電會以Intel內顯(Integrated Graphics)輸出螢幕和渲染圖形程式。這會導致3D效能低下,需要手動使用「Nvidia PRIME」技術,呼叫Nvidia獨顯(Discrete GPU)出來幹活。

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

PRIME是在獨立顯示卡與內顯之間切換的技術,專為雙顯卡筆電打造。Nvidia版的PRIME功能叫做Optimus。

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

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

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

  1. 於Linux 安裝Nvidia閉源驅動,再安裝 Envy Control

  2. 執行Envy Control,將顯示卡模式設定為Hybrid,這樣會讓兩張顯示卡保持啟用狀態。如果你設定Nvidia Only那也不需要用Nvidia PRIME了。

  3. 有些系統需要安裝nvidia-prime套件才可以使用PRIME指令。

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

  1. 使用指令lspci -k | grep -A 2 -i "VGA"檢查目前使用的顯示卡,應會同時列出Intel和Nvidia的顯示卡

  2. 所有應用程式預設都會以Intel顯示卡渲染。當需要使用Nvidia顯示卡渲染的時候,在指令前面加上prime-run

為了檢測GPU資訊,我們使用vulkan-tools套件的vulkaninfo來檢查,這個指令適用X11與Wayland工作階段。

例如vulkaninfo --summary會顯示目前使用的顯示卡是Intel。

prime-run vulkaninfo --summary會顯示Nvidia。

實際執行遊戲試試,從終端機執行Minetest,啟用光影,看FPS高低便能知道效果。

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

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

3. 如果找不到prime-run指令
#

  1. 如果prime-run無效,試試改用PRIME環境變數啟動程式。你需要指定以下環境變數:
__NV_PRIME_RENDER_OFFLOAD=1
__GLX_VENDOR_LIBRARY_NAME=nvidia
__VK_LAYER_NV_optimus="NVIDIA_only"
  1. 指令用法舉例:
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" "執行檔路徑"
  1. 當您要跑CUDA之類的程式的時候,也是這樣操作。預先指定以上環境變數,程式就能利用Nvidia顯示卡渲染。
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" "執行檔路徑"
  1. 若你的Linux發行版顯示prime-run command not found,那麼自行把以上環境變數寫成指令稿,再將其變成可執行檔。這樣你的系統就有prime-run可以用了。
cat <<EOF > /bin/prime-run
#!/bin/bash
export __NV_PRIME_RENDER_OFFLOAD=1
export __GLX_VENDOR_LIBRARY_NAME=nvidia
export __VK_LAYER_NV_optimus=NVIDIA_only
exec "$@"
EOF

sudo chmod +x /bin/prime-run

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

GNOME桌面,對應用程式圖示按右鍵會有「以獨立顯示卡啟動」的選項,背後使用switcherooctl工具設定PRIME的環境變數,這樣就會暫時以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設定PRIME環境變數,這樣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渲染。

5. Nvidia PRIME的雙螢幕輸出
#

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

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

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

6. 讓桌電也用上PRIME吧
#

Nvidia PRIME可不是筆電的專利!Linux桌電只要有雙顯示卡,且以Intel當主螢幕輸出,也是可以使用Nvidia PRIME。

關於這個作法,見 Linux讓Intel GPU負責畫面輸出,Nvidia負責3D運算的方法

參考資料
#

相關文章

Ubuntu LTS如何安裝Nvidia顯示卡驅動、CUDA、NVIDIA Container Toolkit套件
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Nvidia
Linux如何解除安裝軟體並刪除乾淨
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Flatpak Snap AppImage
給Linux螢幕進行色彩管理,套用ICC設定檔,並調整螢幕色溫
分類   Linux系統 Linux使用技巧
標籤   Linux Wayland Color Management

留言板

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

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。