我正在尝试在通过 ssh -Y 连接的远程服务器上运行可执行文件。我认为可执行文件使用 openGL
服务器运行Ubuntu,本地系统运行OSX。
ssh -Y 通常通过 X11 在我的本地计算机上打开显示。这与其他应用程序(firefox、matlab 等)配合良好。
这次我收到消息:
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request: GLXBadContext
Major opcode of failed request: 149 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 35
Current serial number in output stream: 34
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 149 (GLX)
Minor opcode of failed request: 24 (X_GLXCreateNewContext)
Value in failed request: 0x0
Serial number of failed request: 34
Current serial number in output stream: 35
我还运行了 glxinfo (我正在尝试在论坛上找到的东西)并得到了这个
name of display: localhost:11.0
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request: GLXBadContext
Major opcode of failed request: 149 (GLX)
Minor opcode of failed request: 6 (X_GLXIsDirect)
Serial number of failed request: 23
Current serial number in output stream: 22
有人可以帮忙解决这个问题吗?
谢谢你!
答案1
2021 年 5 月 5 日编辑:随着 XQuartz 2.8.0 的发布,配置路径似乎已从 更改org.macosforge.xquartz.X11
为org.xquartz.X11
。相同的说明仍然适用,如果您来自未来,只需将旧路径替换为新路径即可。
虽然这里的答案已经修复,但我正在提交另一个答案,当我的工作中每隔一年出现这个问题时,我可以使用它作为将来的参考:)
当 X 转发(通过 SSH、Docker 等)时,这种情况经常发生。您需要允许 OpenGL 绘图 (iglx),默认情况下,许多 X11 服务器(例如 XQuarts 或 Ubuntu 上的标准 X11 服务器)上禁用该功能。您可能会看到与此相关的一些其他日志如下。
XRequest.155: GLXBadContext 0x500003a
XRequest.155: BadValue (integer parameter out of range for operation) 0x0
XRequest.155: GLXBadContext 0x500003b
[xcb] Unknown sequence number while processing queue
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
../../src/xcb_io.c:259: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed.
修复方法是启用 iglx。首先,检查您的 XQuarts 版本是否支持此功能。截至撰写本文时的最新版本是这样,但它已被弃用,因此将来可能不会。我的版本是XQuartz 2.7.11 (xorg-server 1.18.4)
.
接下来,运行defaults write org.macosforge.xquartz.X11 enable_iglx -bool true
.您应该能够通过运行来确认它已设置
$ defaults read org.macosforge.xquartz.X11
{
"app_to_run" = "/opt/X11/bin/xterm";
"cache_fonts" = 1;
"done_xinit_check" = 1;
"enable_iglx" = 1; ####### this should be truthy
"login_shell" = "/bin/sh";
"no_auth" = 0;
"nolisten_tcp" = 0;
"startx_script" = "/opt/X11/bin/startx -- /opt/X11/bin/Xquartz";
}
最后,重新启动 xquartz(或您的整个机器)。您可能需要重新运行xhost +
以禁用安全性和身份验证(对于隔离的机器来说很好,对于暴露在互联网上的机器来说很危险)。您现在应该能够按预期运行 GUI 应用程序。希望这可以帮助!
答案2
根据大家的意见和建议,我认为可以通过以下方式进行。跑步:
quartz-wm --help
这会输出类似的东西
usage: quartz-wm OPTIONS
Aqua window manager for X11.
--version Print the version string
--prefs-domain <domain> Change the domain used for reading preferences
(default: org.xquartz.X11)
最后一行显示defaults
域:在这种情况下,您可以使用以下命令检查它
defaults read org.xquartz.X11
并改变它
defaults write org.xquartz.X11 enable_iglx -bool true
如果您现在重新启动 Zquartz(通过终止它、注销并再次登录或重新启动)。对我来说,有必要从 Xquartz xterm 会话启动 ssh 会话。这让我得到:
nicola@raspy3:~ $ glxinfo
name of display: localhost:10.0
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
display: localhost:10 screen: 0
direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_visual_info,
GLX_EXT_visual_rating, GLX_OML_swap_method, GLX_SGIS_multisample,
GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group,
GLX_SGI_make_current_read
所以,swrast 消息仍然存在,但现在我让 GL 开始工作
PS:一行代码编写必要的配置:
defaults write `quartz-wm --help | awk '/default:.*X11/ { gsub(/\)/, "", $2); print $2}'` enable_iglx -bool true
答案3
我在 Mac OS Mojave 上使用默认值得到了这种工作;在终端应用程序中编写org.macports.X11 enable_iglx -bool true
,然后在同一终端中运行 Xquartz +extension GLX`。
然后我可以运行 glxgears 并进行光栅工作,但它会将显示放入外部显示器的左上角(而不是默认/视网膜显示),并且不会绘制任何帧来调整大小/移动它。
这让我想起了 1990 年代我对 Nvidia 显卡的蹩脚驱动程序支持以及尝试运行 Linux 桌面:)
我查了一下 freedesktop.org bug repo,发现 Xquartz/X11 似乎还不支持 Retina 显示屏。其中有一些技巧,但这让我想起几年前在我的 Mac 上的 XQuartz 中运行 Wireshark 是多么笨拙。我只是想让 X11 转发正常工作,不需要大约 3 到 5 分钟来重绘帧。看https://gitlab.freedesktop.org/xorg/xserver/-/issues/187