Linux雙顯卡電腦:讓內顯用於顯示螢幕,獨顯用於繪圖運算

如果Linux電腦有雙顯示卡,不妨試試內顯為主,獨顯為輔的策略。

作業系統:Arch Linux 6.1.10,KDE Plasma X11

我的桌上型電腦有Intel i5-7400的內顯HD630,還有Nvidia的獨立顯示卡GTX 1050Ti。螢幕一部,插在獨顯的HDMI孔上。

Nvidia不時會造成Linux畫面撕裂,還會讓系統動畫lag、小機率關不了機、開機無法進tty、對Wayland的支援哩哩拉拉,等等的問題。一度讓我想不開想買AMD顯示卡取而代之,或是改用nouveau驅動。但一想到要跑AI相關程式沒CUDA不行,便打消了念頭,

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

所以採用「內顯」用於畫面輸出,需要時再呼叫「獨顯」出來幹活的方案。用Intel內顯當主畫面輸出,看影片解碼夠力了,還能無痛跑Waydroid和Android-x86的virglrenderer

其實,有雙顯卡的筆電就常常會碰到這個問題,通常Linux開機會使用Intel內顯,而Nvidia的獨顯需要另外裝軟體才能叫出來使用。常見的方案有Optimus-manager,能在內顯和獨顯之間切換。此外還有Nvidia官方支援的方法:PRIME Render Offload,允許在使用Intel顯示卡顯示螢幕時,用prime-run指令以Nvidia顯示卡執行特定應用程式。

Nvidia PRIME現已支援X和Wayland工作階段,本文說明Nvidia PRIME指令的用法。

1. 安裝Nvidia專有驅動

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

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

1
sudo pacman -S nvidia nvida-utils nvtop
  1. 列出目前使用的GPU。如果螢幕的線是插在獨顯的HDMI孔上,那麼應該只會看到Nvidia
1
2
3
4
[ivon@Lk31cdk ~]$ lspci -k | grep -A 2 -i "VGA"
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。
1
sudo pacman -S mesa intel-media-driver vulkan-intel
  1. 檢查GRUB參數:cat /etc/default/grub,確認GRUB_CMDLINE_LINUX_DEFAULT沒有設定nomodeset,否則用Intel顯卡開機會沒畫面。

  2. 電腦關機。

2. BIOS調整為內顯優先開機

進入電腦的BIOS,設定為內顯優先開機。

我的主機板的該設定位置Advanced → System Agent (SA)Configuration,設定IGFX優先開機。

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

3. 使用prime-run指令

開機後,檢查目前使用的顯示卡,應會同時列出Intel和Nvidia的顯示卡

1
2
3
4
5
6
7
8
[ivon@Lk31cdk ~]$ lspci -k | grep -A 2 -i "VGA"
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

因此,在這之後所有應用程式預設都會以Intel顯示卡啟動。當需要使用Nvidia顯示卡運算的時候,在指令前面加上prime-run

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

指令:minetest

指令:prime-run minetest

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

1
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus=NVIDIA_only VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json minetest

那切換Nvidia顯示卡能不能更方便些?

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

KDE的話則是右鍵編輯應用程式,加入PRIME的環境變數:__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus=NVIDIA_only VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json,這樣以後點應用程式圖示就會一律以Nvidia顯示卡啟動。

4. 以獨顯啟動Steam遊戲

方法一:從終端機用prime-run啟動Steam,這樣所有遊戲都會以Nivdia顯示卡啟動。

方法二:點選個別Steam遊戲,右鍵→內容

在啟動選項加入PRIME的環境變數:__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia __VK_LAYER_NV_optimus=NVIDIA_only VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json %command%

5. PRIME的雙螢幕輸出

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

但仍然需要使用prime-run指令才能指定用獨顯渲染程式。

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

參考資料

如果本網站文章對您有幫助,歡迎贊助我。