我在一个中心位置运行用于 Qt 软件开发的 Linux 主机。
在我的 Windows 机器上,我使用 Xming 作为本地 X 服务器,并使用 putty 连接到该 Linux 主机。通过此配置,我可以在 Linux 主机上使用所有 X(xclock、xterm)和 GLX(qtcreator、gxlinfo、glxgears...)程序。
我的主要工作站是带有 nvidia gfx 卡的 ubuntu 14.04 LTS。当我使用“ssh -p port# -YC my.dev.host.com”通过 ubuntu 系统连接到 linux 主机时,我也可以使用所有 X 程序 (xclock, xterm) 程序,但我不能用GLX 程序(qtcreator、gxlinfo、glxgears……)。
据我所知学到了这是因为 X-server 在 1.16 版本中默认不支持间接 GLX 上下文。
所以我的问题是:如何在我的 ubuntu 14.04 LTS 安装中启用间接 GLX 上下文(X 服务器和 nvidida 驱动程序)以使 X 服务器按预期工作。
感谢您的任何帮助!
陣容
以下是 glxgears 的输出,也许有帮助:
[email protected]:~# LIBGL_DEBUG=verbose glxgears
libGL: screen 0 does not appear to be DRI2 capable
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/tls/swrast_dri.so
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
libGL: Can't open configuration file /root/.drirc: No such file or directory.
libGL: Can't open configuration file /root/.drirc: No such file or directory.
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 154 (GLX)
Minor opcode of failed request: 3 (X_GLXCreateContext)
Value in failed request: 0x0
Serial number of failed request: 35
Current serial number in output stream: 37
答案1
当我通过“ssh -X”运行某些 GL 应用程序时,我遇到了类似的问题,并通过在 /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf 中的 xserver-command 中添加“+iglx”解决了该问题。
[SeatDefaults]
# Dump core
xserver-command=X -core +iglx
之后,您可以重新启动或按 Ctrl-Alt-F1,登录,然后“sudo service lightdm restart”。
我希望这有帮助!
答案2
添加选项的另一种方法(与显示管理器无关)是将以下部分添加到 /etc/X11/xorg.conf:
Section "ServerFlags"
Option "IndirectGLX" "on"
EndSection
答案3
我在运行自定义 OpenGL 程序时遇到了同样的问题ssh -X
。上述解决方案经过轻微修改后即可使用
Section "ServerFlags"
Option "AllowIndirectGLX" "on"
Option "IndirectGLX" "on"
EndSection
它适用于运行 kubuntu-desktop 的 ubuntu 16.04 服务器,该服务器带有通过 apt 安装的 NVIDIA GTX 1070 GPU 和 NVIDIA 二进制驱动程序。