快轉到主要內容

Linux Looking Glass安裝教學,低延遲顯示Windows QEMU/KVM的遊戲畫面

分類   資訊科技 虛擬機與容器技術
標籤   GPU Passthrough Linux Windows
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

Linux可以用QEMU/KVM安裝Windows虛擬機,並將Nvidia GPU直通給Windows虛擬機改善圖形效能。在那之後我們尚要處理一個問題,那就是如何存取Windows系統的畫面?

Virt Manager預設會插入一個虛擬顯示卡(通常是QXL),然後再透過SPICE協定通訊,我們在Virt Manager視窗所看到的畫面便是虛擬顯示卡的畫面。而直通進去的Nvidia顯示卡要輸出畫面,得再接一個實體螢幕才可以看到Nvidia輸出的畫面,此時就會產生二個螢幕。

但是這裡有二個問題:Windows應用程式即使在電源設定指定使用Nvidia算繪,QXL的畫面依然有效能低落和畫面不同步的問題。還有我不喜歡放兩個螢幕,我希望可以在單個螢幕存取Linux和Windows的畫面。

這個時候「Looking Glass」就是款有用的工具。

Looking Glass使用KVM Framebuffer技術,讓使用者能夠從Linux宿主機開一個視窗,直接存取Windows系統的畫面,畫面都是透過DXGI或Nvidia Capture傳送到Linux算繪的,所以延遲極低,玩遊戲是有可能的。

Linux透過Looking GLass存取Windows系統的桌面,Looking Glass下的3DMark分數與實機相差不遠。

唯一要考量的是Looking Glass需要額外花費資源在宿主機解碼畫面,可能會對宿主機帶來額外負擔,導致畫面傳輸效率比不上實體螢幕。

至於如何解決實體二個螢幕的問題,我們可以利用 Virtual Display Driver或HDMI欺騙器,於Windows系統虛擬出第二個螢幕,如此一來就不需要實體螢幕佔空間了,然後告訴Looking Glass擷取該螢幕內容傳送到Linux即可。

環境
#

  • 虛擬機軟體:Virt Manager + QEMU/KVM
  • Host OS:Ubuntu LTS
  • Guest OS:Windows 11

說明:

Looking Glass僅支援Windows 10以上系統。

如果你有安裝QXL顯示卡的驅動,請解除安裝,否則Looking Glass會抓不到其他螢幕。通常只要到Windows裝置管理員 → 顯示卡,解除安裝RedHat QXL WDDM DOD顯示卡驅動就可以了。

有些顯示卡可能會不認得Virtual Display Driver所虛擬的螢幕,導致顯示卡無法發揮全速,此時還是得用HDMI欺騙器插在顯示卡上才可以。

1. 安裝Windows 11虛擬機
#

參考 Ubuntu安裝QEMU/KVM

安裝Windows 11虛擬機。虛擬機顯示卡用Virtio。

然後 設定Nvidia GPU直通

2. 於Linux安裝Looking Glass Client
#

這個是負責在Linux顯示Windows畫面的客戶端。

參考 官方指示

從套件庫安裝Looking Glass Client

sudo apt install looking-glass-client

Linux的Looking Glass客戶端設定檔位於~/.looking-glass-client.ini

3. 新增IVSHMEM裝置到虛擬機
#

IVSHMEM(Inter-VM Shared Memory device)是讓宿主機與虛擬機共享記憶體的檔案。

  1. 開啟Virt Manager,編輯Windows 11的XML。

  2. <devices>區塊的加入IVSHMEM裝置。下面32M是以螢幕解析度為1920x1080下去算的。計算公式為:(螢幕寬 x 螢幕高 x 4 x 2) ÷ 1024 ÷ 1024 + 10,四捨五入取最接近的2的平方數。

<devices>
...

  <shmem name='looking-glass'>
    <model type='ivshmem-plain'/>
    <size unit='M'>32</size>
  </shmem>

...
</devices>
  1. 新增設定檔,使Linux系統開機自動建立/dev/shm/looking-glass的暫存檔
sudo vim /etc/tmpfiles.d/10-looking-glass.conf
  1. 填入以下內容。user是您的使用者名稱。
f	/dev/shm/looking-glass	0660	user	kvm	-
  1. 用以下指令立即建立tmpfs
sudo systemd-tmpfiles --create /etc/tmpfiles.d/10-looking-glass.conf

4. 於Windows安裝Looking Glass Host
#

  1. 將Windows虛擬機開機

  2. Fedora網站,下載stable-virtio目錄下的virtio-win-gt-x64.msi,點選安裝Virt-IO驅動。

  3. 在虛擬機內安裝 最新Microsoft Visual C++可轉散發,檔名為VC_redist.x64.exe

  4. 官網下載Looking Glass Host壓縮檔。照Linux所安裝的Looking Glass Client,安裝對應版本的Looking Glass Host。例如Looking Glass Client版本為B6,這裡就要下載B6版本。

  5. 解壓縮,安裝Looking Glass Host

  6. Looking Glass Host預設會在Windows開機後自動啟動,若無請到Windows的「服務」選單手動啟動Looking Glass。(建議一併用netplwiz設定開機自動登入Windows帳號)

Looking Glass Host的設定檔位於C:/Program Files/Looking Glass (host)/looking-glass-host.ini

5. 調整Looking Glass Host要擷取的螢幕
#

Windows虛擬機同時有QXL和直通Nvidia,二個顯示卡的情況下,Looking Glass Host可能會抓錯螢幕。

Looking Glass Host雖然有dxgi:output的參數,但似乎沒辦法設定預設要抓取哪個螢幕,所以只能在Windows系統手動指定。

  1. 開啟Windows系統設定 → 顯示,現在應該會看到二個螢幕

  2. 點選第二個螢幕 → 進階顯示設定,確認這是Virtual Display Driver生成的螢幕

  3. 在Linux啟動Looking Glass Guest

  4. 再將Windows螢幕改為「只在2顯示」或者「將2作為主要顯示器」。

6. 在Linux啟動Looking Glass Guest
#

輸入指令啟動,加上-F顯示全螢幕,-k顯示FPS,egl:vsync防止畫面撕裂。其餘參數參考 官方文件

looking-glass-client -F -k egl:vsync

如果Windows虛擬機有連線那麼應該就會看到桌面,此時Virt Manager的畫面會黑掉。

Looking Glass Guest預設是用SPICE來輸入鍵盤與滑鼠訊號給虛擬機的。若滑鼠位置跑來跑去,請準備第二組滑鼠,在Virt Manager新增硬體的界面直通進去。

按Scroll Lock + R旋轉螢幕。

跳出全螢幕請按Scroll Lock + F。

參考資料
#

相關文章

如何在Windows虛擬機玩遊戲 ~ Linux QEMU/KVM雙GPU直通 + Looking Glass安裝過程
分類   資訊科技 虛擬機與容器技術
標籤   GPU Passthrough QEMU-KVM Linux Windows
Ubuntu:Nvidia GPU直通給Windows虛擬機 + Looking Glass安裝教學
分類   資訊科技 虛擬機與容器技術
標籤   GPU Passthrough PCI Passthrough Ubuntu QEMU-KVM Windows
QEMU/KVM虛擬機繞過遊戲Easy Anti-Cheat的方法,隱藏KVM狀態
分類   資訊科技 虛擬機與容器技術
標籤   QEMU-KVM Linux Windows

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請貼Imgur或Postimages。