Ubuntu:Windows虛擬機Nvidia顯示卡直通 + Looking Glass安裝

目錄
本文說明如何在Ubuntu安裝Windows虛擬機,並將Nvidia顯示卡直通給虛擬機,再安裝Looking Glass,執行3D應用程式。
顯示卡直通(GPU Passthrough) 讓Windows虛擬機能以接近原生效能玩大型3D遊戲。要做到這點,需要2個顯示卡:一個CPU內顯,一個獨立顯示卡。最好採用Looking Glass,或者準備2個螢幕。
1. 硬體資訊 #
- Host OS: Ubuntu 22.04 LTS
- Guest OS: Windows 11
- CPU: Intel I5-7400,有內顯UHD 630。
- GPU: Nvidia GTX1050Ti
電腦主機後方連接主機板的連接埠是內顯,下面的是獨顯的連接埠。
一般來說主螢幕是插在獨顯的連接埠,而獨顯在直通給虛擬機後,主螢幕就要改插內顯的連接埠。
如果沒有二個以上螢幕,那麼請使用文末提及的Looking Glass增強3D效果。
2. 安裝Windows 11虛擬機 #
不可安裝SPICE Tools。
Windows虛擬機雖然有畫面,但是圖形效能很差,看看Edge瀏覽器的 WebGL Aquarium的FPS就知道,所以要直通顯示卡。
4. 禁止Linux核心載入Nvidia獨顯 #
將Windows虛擬機關機。
執行以下指令刪除Nvidia驅動,改安裝開源的nouveau驅動並重開機。
sudo apt-get purge *nvidia*
sudo apt-get install xserver-xorg-video-nouveau
重開機後使用指令
sudo lshw -C display
確認,driver區段會顯示"nouveau"啟用IOMMU,編輯
/etc/default/grub
,針對Intel CPU,在GRUB_CMDLINE_LINUX_DEFAULT
後面加入以下內容:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on"
- 更新GRUB後重開機。
sudo update-grub
sudo reboot
- 執行以下指令查找獨顯和HDMI裝置的ID
lspci -nnk
找到GTX 1050Ti和其HDMI音訊裝置,將後面的二個硬體ID記起來,例如這裡是
10de:1c82
和10de:0fb9
。將Nvidia顯示卡綁定給VFIO,再次修改
/etc/default/grub
,將GRUB_CMDLINE_LINUX_DEFAULT
增添為以下內容:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on vfio-pci.ids=10de:1c82,10de:0fb9"
- 啟用開機自動載入vfio-pci核心模組
sudo echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf
- 禁止開機載入Nvidia和nouveau核心模組
su
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist
exit
- 更新GRUB和initramfs並重開機
sudo update-grub
sudo update-initramfs -u
sudo reboot
重開機一直按著delete,進到BIOS,設定開啟混合螢幕輸出,我的是在Advanced → System Agent (SA) Configuration,設定以內顯(IGFX)優先開機。
主螢幕改插到內顯的孔,副螢幕插到獨顯的孔,重開機進入Linux系統。
3. 將獨顯加入到虛擬機 #
開啟Virt Manager,按二下開啟,點左上角i編輯Windows虛擬機
點選編輯硬體 → 新增PCI主機裝置,將獨顯和獨顯音訊HDMI都加進去
開機後,主螢幕會看到Windows畫面,副螢幕會暫時黑畫面。
安裝 GeForce Experience更新顯示卡驅動。
接著在系統設定 → 顯示器 → 圖形,指定應用程式使用Nvidia顯示卡彩現,而非QXL。
圖形效能在副螢幕上最好。
如果副螢幕有喇叭,則Windows的音效會透過HDMI從副螢幕輸出。
4. 安裝Looking Glass #
Looking Glass Host與Client的版本需一致。
Ubuntu已收錄looking-glass-client
套件,不需要手動編譯。
接著參見 設定Looking Glass