在 WSL2(Windows Subsystem for Linux 2)中运行 OpenGL 程序时,出现 MESA: error: ZINK: failed to choose pdev 和 glx: failed to create drisw screen 错误是常见的问题。这是因为 WSL2 本身并不直接支持硬件加速的 OpenGL,而是依赖于软件渲染(如 MESA 的 LLVMpipe 或 ZINK)。
问题原因
- WSL2 默认不支持硬件加速的 OpenGL,因此 MESA 的 ZINK 组件无法正常工作。
glxgears能够运行并显示旋转的齿轮,是因为它使用了软件渲染(如 LLVMpipe),而不是硬件加速的 OpenGL。
解决方法
1. 使用 WSLg(WSL 的 GUI 支持)
WSLg 是 WSL 的 GUI 支持功能,它允许在 WSL2 中运行图形应用程序,并通过 Windows 的 GPU 驱动实现硬件加速。
步骤:
- 确保你的 Windows 版本支持 WSLg(需要 Windows 10 21H2 或更高版本,或 Windows 11)。
- 更新 WSL2 到最新版本:
wsl --update - 确保 WSLg 已启用:
如果未启用,可以重新安装 WSL2:wsl --list --verbosewsl --unregister Ubuntu wsl --install -d Ubuntu
验证:
运行 glxgears 或其他 OpenGL 程序,检查是否仍然有错误。
2. 禁用 ZINK
如果 WSLg 已启用,但仍然出现 ZINK 错误,可以尝试禁用 ZINK,强制使用软件渲染。
步骤:
在终端中设置以下环境变量:
export MESA_LOADER_DRIVER_OVERRIDE=llvmpipe
然后重新运行 glxgears 或你的 OpenGL 程序。
3. 使用软件渲染(LLVMpipe)
如果 WSLg 不可用或无法正常工作,可以强制使用 MESA 的软件渲染(LLVMpipe)。
步骤:
在终端中设置以下环境变量:
export LIBGL_ALWAYS_SOFTWARE=1
然后重新运行 glxgears 或你的 OpenGL 程序。
4. 安装 MESA 的软件渲染驱动
确保 MESA 的软件渲染驱动(LLVMpipe)已安装。
步骤:
在 WSL2 中运行以下命令:
sudo apt update
sudo apt install mesa-utils mesa-utils-extra
5. 验证 OpenGL 功能
运行 glxinfo 和 glxgears 验证 OpenGL 是否正常工作:
glxinfo | grep "OpenGL version"
glxgears
如果 glxgears 正常运行并显示旋转的齿轮,说明 OpenGL 功能正常。
6. 使用 Windows 的 OpenGL 实现
如果你需要在 WSL2 中使用硬件加速的 OpenGL,可以考虑使用 Windows 的 OpenGL 实现(如 NVIDIA 或 AMD 的驱动)。
步骤:
- 在 Windows 上安装最新的显卡驱动(如 NVIDIA 或 AMD)。
- 在 WSL2 中设置环境变量,使用 Windows 的 OpenGL 实现:
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 export LIBGL_ALWAYS_INDIRECT=1
然后重新运行 glxgears 或你的 OpenGL 程序。
总结
- 在 WSL2 中,默认情况下 OpenGL 依赖于软件渲染(如 LLVMpipe),因此 ZINK 错误是正常的。
- 启用 WSLg 可以使用 Windows 的 GPU 驱动实现硬件加速。
- 如果 WSLg 不可用,可以禁用 ZINK 或强制使用软件渲染。


2150

被折叠的 条评论
为什么被折叠?



