mac os使用X11转发报错libGL error: failed to load driver: swrast的解决方法

这是典型的间接 GLX(Indirect GLX)被禁用的报错。SSH X 转发时 OpenGL 走间接渲染,但现在的 X Server(XQuartz、Xorg)出于安全原因默认都关了 IGLX,应用找不到匹配的 visual,Mesa 回退到软件渲染 swrast 也跟着失败。

如果你是 Mac + XQuartz(最可能的情况),在 Mac 终端执行:

defaults write org.xquartz.X11 enable_iglx -bool true

然后彻底退出 XQuartz 再重开(只关窗口不算),重新 ssh 连接。改完验证一下:

glxinfo | grep -i "direct rendering"

如果显示端是 Linux 的 Xorg,在 /etc/X11/xorg.conf.d/ 里加一段:

Section "ServerFlags"    Option "AllowIndirectGLX" "on"EndSection

重启 X(或 startx -- +iglx),效果一样。

另外两个省事的办法:

  • 只是开 xeDebug 这类 GUI 的话,VNC 没这个问题——VNC 的 X Server 在远端本机直接渲染,不走间接 GLX
  • 也可以先试试 LIBGL_ALWAYS_INDIRECT=1 <应用名>,强制间接渲染(但前提还是上面那步先把 IGLX 打开)

你那边显示端是 Mac 的 XQuartz 还是 Linux?如果按上面改完还报错,把 glxinfo 的输出贴我看看。

发表回复

后才能评论