我想要在直通GPU的Linux虛擬機玩遊戲,又不想要接二個實體螢幕。希望能在虛擬機開機後,在Linux宿主機開一個視窗存取虛擬機的桌面。
有試過 Looking Glass Host for Linux的方案,但是不好安裝,或者說作者根本就不在乎Windows以外的系統,故我改用較為成熟的Sunshine遊戲串流。
只要直通GPU給虛擬機,再安裝Sunshine,就可以把Linux電腦桌面串流到Linux宿主機的Moonlight客戶端了。又因為是區域網路,1080p60串流幾乎沒延遲!
至於螢幕部份,Linux沒有 Virtual Display Driver的方案能快速做一個假螢幕出來,用xrandr來虛擬螢幕又好麻煩,所以最後我是用HDMI欺騙器來替代實體的螢幕了。
由於Sunshine是跨平台軟體,本文的作法應該也可以套用到Windows虛擬機,但既然已經有 Looking Glass Host for Windows方案那就不是很必要這麼做了,除非你想要遠端串流玩虛擬機內的遊戲!Sunshine跟Looking Glass的系統服務可以同時運作,沒問題的。
1. 環境#
- 宿主機:Ubuntu Desktop 24.04 LTS
- 虛擬機:Fedora Workstation 40
- 實體螢幕x1
- 實體副螢幕x1
- HDMI欺騙器x1
為了確保驅動有正常運作,還是有準備一個實體螢幕供測試,確認沒問題後才換成HDMI欺騙器。
2. 設定過程#
開啟Virt Manager,安裝Fedora虛擬機,於GNOME系統設定勾選自動登入帳號。順便設定SSH服務以防萬一。
用virsh指令 固定虛擬機的IP位址
設定Nvidia GPU直通,將Nvidia GPU分配給Fedora虛擬機
接上實體副螢幕,開機,在Fedora虛擬機內用DNF安裝Nvidia驅動
如果虛擬機同時有QXL和實體螢幕的話可能會沒畫面,故得將顯示卡和SPICE元件移除(請檢查xml)。
移除SPICE後滑鼠鍵盤就沒辦法自動切到虛擬機內了,得使用「新增USB硬體」將滑鼠直通進去。這時需要準備二支滑鼠。
於Fedora虛擬機 安裝Sunshine服務,設定開機登入後自動啟動。
嘗試啟動Sunshine服務,並用Linux宿主機的Moonlight客戶端配對連線。
確認一切OK後,虛擬機關機。實體副螢幕換成HDMI欺騙器。
這樣日後只要虛擬機按開機,等待Sunshine服務啟動就可以連線啦~