介紹如何使用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套件#
- 根據 開發者指示,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
- 安裝VirtualGL
sudo apt install virtualgl
5. 初始化VirtualGL#
本節的操作請在SSH進行。
- 停止遠端的顯示管理器服務,例如樹莓派預設是用LightDM:
sudo systemctl stop lightdm
- 執行VirtualGL初始化程式
sudo /opt/VirtualGL/bin/vglserver_config
選
1) Configure server for use with VirtualGL (GLX + EGL back ends)
,所有問題都回答yes接著,把自己的使用者帳號加入vgluser群組
sudo usermod -a -G vglusers root
sudo usermod -a -G vglusers user
- 重開機。
6. 在VNC使用VirtualGL#
1, 啟動TigerVNC服務,開啟VNC客戶端連線
systemclt --user start vncserver@:0.service
- 檢查VirtualGL安裝是否成功,輸出PAW就代表成功了
sudo xauth merge /etc/opt/VirtualGL/vgl_xauth_key
xdpyinfo -display :0
/opt/VirtualGL/bin/glxinfo -display :0 -c
VirtualGL會建立
/dev/dri
裝置,這可以用ls -l /dev/dri
指令檢查所屬群組確認。所有要3D加速的程式都必須以
vglrun
為前綴執行,例如Firefox需要指定egl為渲染後端才吃得到GPU加速
vglrun -d egl firefox
可看到WebGL Aquarium的FPS自此之後有了大幅提昇。
- 如果vglrun出現
Could not open display :0.
錯誤。請設定VGL_DISPLAY=:1
環境變數,讓他們跟VNC伺服器通訊埠一致:
DISPLAY=:1 VGL_DISPLAY=:1 vglrun -d egl firefox
- 你還可以直接將vglrun加入VNC的設定檔(像TigerVNC就是
~/.vnc/xstartup
),讓整個桌面環境以3D加速啟動
vglrun startxfce4