快轉到主要內容

讓WSL Docker的OpenGL程式可以使用Windows GPU硬體加速

Linux系統 虛擬機與容器技術 Nvidia Windows Subsystem for Linux Docker
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字

問題點:WSL Ubuntu跑圖形程式支援使用Winodws GPU加速,WSLg會把Mesa轉譯成DirectX的指令。

可一到Docker容器內就不行了,變成llvmpipe CPU渲染。

此時,只要設定正確的環境變數,還有使用支援WGLg的發行版映像檔,即可讓Docker容器使用Windows的GPU加速。

  1. 登入WSL Ubuntu
wsl
  1. 我這裡使用環境變數MESA_D3D12_DEFAULT_ADAPTER_NAME,指定使用Intel GPU驅動 (如果你是Nvidia要記得安裝 Nvidia WSL驅動,並將下面字串改為NVIDIA)
export MESA_D3D12_DEFAULT_ADAPTER_NAME=Intel
  1. 跑Docker容器。此處必須使用Debian Stable或者Ubuntu LTS容器。方能掛載WSLg的函式庫轉譯。
docker run \
--device /dev/dxg \
--device /dev/dri/card0 \
--device /dev/dri/renderD128 \
--env DISPLAY=$DISPLAY \
--env WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
--env XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
--env PULSE_SERVER=$PULSE_SERVER \
--volume /tmp/.X11-unix:/tmp/.X11-unix \
--volume /mnt/wslg:/mnt/wslg \
--volume /usr/lib/wsl:/usr/lib/wsl \
--name debian \
debian:latest
  1. 進入Debian容器的shell
docker exec debian
  1. 在Debian內安裝以下套件
apt-get install \
    libxext-dev \
    libx11-dev \
    libglvnd-dev \
    libglx-dev \
    libgl1-mesa-dev \
    libgl1-mesa-glx \
    libgl1-mesa-dri \
    libegl1-mesa-dev \
    libgles2-mesa-dev \
    freeglut3-dev \
    mesa-utils \
    mesa-utils-extra
  1. 並設定環境變數
export LD_LIBRARY_PATH=/usr/lib/wsl/lib
export LIBVA_DRIVER_NAME=d3d12
  1. 執行指令glxinfo | grep "OpenGL",看容器是否成功認到Windows的GPU

現在你知道了必須使用支援的映像檔才能於Docker達成硬體加速。為此你可能需要用Dockerfile,修改專案,重新建置映像檔。

參考資料

WSL2 + Docker + OpenGL + NVIDIA not working (uses llvmpipe) - Github

相關文章

ReDroid,在Windows電腦架設Android雲手機的方法
Linux系統 虛擬機與容器技術 ReDroid Docker Android Windows Subsystem for Linux Scrcpy
如何在Windows 11安裝WSL2子系統 (Ubuntu)
Linux系統 虛擬機與容器技術 Windows Subsystem for Linux Docker Ubuntu
Distrobox使用例:Docker跑GNOME X11桌面環境
Linux系統 虛擬機與容器技術 Distrobox GNOME Docker

留言板

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

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

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