快轉到主要內容

給VNC遠端桌面啟用GPU加速,Linux VirtualGL設定方式

分類   Linux系統 Self-hosting自架
標籤   VNC VirtualGL Raspberry Pi
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

介紹如何使用VirtualGL給Linux遠端桌面啟用GPU硬體加速,跑需要OpenGL的3D應用程式。

1. VirtualGL為何?
#

VirtualGL是專為Linux VNC遠端桌面設計的解決方案,能夠讓OpenGL程式於VNC遠端桌面運作。比較常見的用法是使用遠端伺服器Nvidia GPU在VNC進行圖形渲染。

不過我卻是用在樹莓派上,主要想搞遊戲遠端串流,我試過在樹莓派跑 Moonlight + Sunshine,但看來串流太吃資源了,動不動就CPU 100%,用VNC伺服器好些。

VNC伺服器本身不吃什麼資源,TigerVNC就算是headless的Linux伺服器也能跑。但若在VNC桌面執行需要OpenGL的程式,通常都是用llvmpipe也就是CPU運算的,所以3D性能低下。

比如,我們在VNC桌面跑Firefox,WebGL Aquarium的FPS連10都不到!

安裝VirtualGL就能解決上述問題,它可以將遠端的GPU 3D渲染導向VNC畫面。於是乎VNC桌面就能執行需要GPU加速的程式了。

VirtualGL原理圖如下,取自Arch Wiki:

但由於VNC本身就不是為串流遊戲設計的,畫面品質比不上Moonlight,網速不夠快的情況下很容易出現畫面撕裂,還得自行解決PulseAudio音效串流的問題(例如 PulseAudio串流音訊)。因此就遊戲串流的用途來說,VNC + VirtualGL只能算是Moonlight不能用的時候的替代方案。

另外,VirtualGL跟VirGL (virglrenderer)是不同的專案,後者是給QEMU用的半虛擬化GPU加速方案。

2. 環境
#

  • Raspberry Pi 5
  • Raspberry Pi OS Debian 12 Bookworm
  • 沒有接上任何顯示器

實行前請先執行vulkaninfo --summary指令確認樹莓派的GPU驅動有無正常運作,應會看到V3DV Mesa

3. 安裝VNC伺服器服務
#

VirtualGL的開發者同時開發了叫做 TurboVNC的VNC伺服器,專為VirtualGL優化,不過TigerVNC、KasmVNC用戶可以直接沿用現有架構來跑VirtualGL,無需刻意安裝TurboVNC。

我使用TigerVNC, 安裝TigerVNC開機自動啟動服務。由於VirtualGL預設使用DISPLAY 0,請將VNC預設通訊埠設定為5900。

4. 安裝VirtualGL套件
#

  1. 根據 開發者指示,Debian可以透過新增VirtualGL套件庫安裝
su

wget -q -O- https://packagecloud.io/dcommander/virtualgl/gpgkey | \
  gpg --dearmor >/etc/apt/trusted.gpg.d/VirtualGL.gpg

wget -P /etc/apt/sources.list.d https://raw.githubusercontent.com/VirtualGL/repo/main/VirtualGL.list

apt update
  1. 安裝VirtualGL
sudo apt install virtualgl

5. 初始化VirtualGL
#

本節的操作請在SSH進行。

  1. 停止遠端的顯示管理器服務,例如樹莓派預設是用LightDM:
sudo systemctl stop lightdm
  1. 執行VirtualGL初始化程式
sudo /opt/VirtualGL/bin/vglserver_config
  1. 1) Configure server for use with VirtualGL (GLX + EGL back ends),所有問題都回答yes

  2. 接著,把自己的使用者帳號加入vgluser群組

sudo usermod -a -G vglusers root
sudo usermod -a -G vglusers user
  1. 重開機。

6. 在VNC使用VirtualGL
#

1, 啟動TigerVNC服務,開啟VNC客戶端連線

systemclt --user start vncserver@:0.service
  1. 檢查VirtualGL安裝是否成功,輸出PAW就代表成功了
sudo xauth merge /etc/opt/VirtualGL/vgl_xauth_key

xdpyinfo -display :0

/opt/VirtualGL/bin/glxinfo -display :0 -c
  1. VirtualGL會建立/dev/dri裝置,這可以用ls -l /dev/dri指令檢查所屬群組確認。

  2. 所有要3D加速的程式都必須以vglrun為前綴執行,例如Firefox需要指定egl為渲染後端才吃得到GPU加速

vglrun -d egl firefox

可看到WebGL Aquarium的FPS自此之後有了大幅提昇。

  1. 如果vglrun出現Could not open display :0.錯誤。請設定VGL_DISPLAY=:1環境變數,讓他們跟VNC伺服器通訊埠一致:
DISPLAY=:1 VGL_DISPLAY=:1 vglrun -d egl firefox
  1. 你還可以直接將vglrun加入VNC的設定檔(像TigerVNC就是~/.vnc/xstartup),讓整個桌面環境以3D加速啟動
vglrun startxfce4

參考資料
#

相關文章

noVNC,用任意網頁瀏覽器存取Linux VNC遠端桌面
分類   Linux系統 Self-hosting自架
標籤   VNC Remote Desktop
Linux設定TigerVNC遠端桌面,用Systemd執行vncserver
分類   Linux系統 Self-hosting自架
標籤   VNC Remote Desktop
使用內網穿透軟體 + x11VNC架設免費Linux遠端桌面
分類   Linux系統 Self-hosting自架
標籤   Remote Desktop ZeroTier VNC

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。