如果您的Linux電腦有Intel + Nvidia
或AMD + Nvidia
的雙顯示卡架構,那麼你可能會需要用到Nvidia PRIME技術。
我的有一台搭載Intel + Nvidia雙顯示卡配備的筆電。
架構如下圖,這台搭載Nvidia的雙顯卡筆電會以Intel內顯(Integrated Graphics)輸出螢幕和渲染圖形程式。這會導致3D效能低下,需要手動使用「Nvidia PRIME」技術,呼叫Nvidia獨顯(Discrete GPU)出來幹活。
PRIME是在獨立顯示卡與內顯之間切換的技術,專為雙顯卡筆電打造。Nvidia版的PRIME功能叫做Optimus。
用Intel內顯開機,桌面環境用內顯渲染,節省電量;當遇到需要重度GPU渲染的遊戲程式時,才將渲染作業分配給Nvidia顯示卡,此種過程我們稱之為PRIME Render Offload
。
本文說明Ubuntu的Nvidia PRIME指令用法,適合筆電與桌電的Linux用戶參考。
1. 雙顯卡筆電的Nvidia獨顯切換方式#
於Linux 安裝Nvidia閉源驅動,再安裝 Envy Control
執行Envy Control,將顯示卡模式設定為
Hybrid
,這樣會讓兩張顯示卡保持啟用狀態。如果你設定Nvidia Only
那也不需要用Nvidia PRIME了。有些系統需要安裝
nvidia-prime
套件才可以使用PRIME指令。
2. 如何使用prime-run指令#
使用指令
lspci -k | grep -A 2 -i "VGA"
檢查目前使用的顯示卡,應會同時列出Intel和Nvidia的顯示卡所有應用程式預設都會以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指令#
- 如果prime-run無效,試試改用
PRIME環境變數
啟動程式。你需要指定以下環境變數:
__NV_PRIME_RENDER_OFFLOAD=1
__GLX_VENDOR_LIBRARY_NAME=nvidia
__VK_LAYER_NV_optimus="NVIDIA_only"
- 指令用法舉例:
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" "執行檔路徑"
- 當您要跑CUDA之類的程式的時候,也是這樣操作。預先指定以上環境變數,程式就能利用Nvidia顯示卡渲染。
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus="NVIDIA_only" "執行檔路徑"
- 若你的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運算的方法