使用X11转发和GLX出现问题

4
新冠病毒让我远程工作,我被困在这里。 对于用户界面(UI)甚至是三维(3D)OpenSceneGraph可视化使用X11转发没有问题,但是一个我需要运行的新应用程序在远程计算机上出现以下错误:
X Error of failed request:  GLXUnsupportedPrivateRequest
Major opcode of failed request:  149 (GLX)
Minor opcode of failed request:  16 (X_GLXVendorPrivate)
Serial number of failed request:  35
Current serial number in output stream:  38

远程计算机是运行Ubuntu 16.04的Linux机器,本地计算机是使用XQuartz作为X服务器的Mac。

经过我的研究,似乎本地计算机不支持某个GLX请求。我想知道这是否只是XQuartz缺少的无法解决的GLX功能。

我尝试调查GLX是否是问题所在。如果我运行'glxdemo',我可以看到黄色正方形,没有问题。可能与此相关 - 当我运行glxgears时,我看到的齿轮没有运动,尽管没有错误并且控制台报告非零fps。

还有一些其他有趣的信息,这是我在远程计算机上运行'glxinfo'的结果。这是否与直接渲染未开启有关?我读到这与使用来自Nvidia的libGL.so有关,它不支持远程GLX。那么这是正确的解决方案吗?还有一件奇怪的事情是“OpenGL渲染器字符串”引用内部的英特尔芯片,而不是NVIDIA图形卡。这是什么原因,是否相关?

name of display: localhost:10.0
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
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
    GLX_ARB_context_flush_control, GLX_ARB_create_context,
    GLX_ARB_create_context_no_error, GLX_ARB_create_context_profile,
    GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float,
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_buffer_age,
    GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile,
    GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB,
    GLX_EXT_import_context, GLX_EXT_stereo_tree, GLX_EXT_swap_control,
    GLX_EXT_swap_control_tear, GLX_EXT_texture_from_pixmap,
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_NV_copy_buffer,
    GLX_NV_copy_image, GLX_NV_delay_before_swap, GLX_NV_float_buffer,
    GLX_NV_multisample_coverage, GLX_NV_present_video,
    GLX_NV_robustness_video_memory_purge, GLX_NV_swap_group,
    GLX_NV_video_capture, GLX_NV_video_out, GLX_SGIX_fbconfig,
    GLX_SGIX_pbuffer, GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context,
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig
OpenGL vendor string: Intel Inc.
OpenGL renderer string: Intel(R) Iris(TM) Plus Graphics 640
OpenGL version string: 1.4 (2.1 INTEL-10.25.24)
OpenGL extensions:
    GL_ARB_depth_texture, GL_ARB_draw_buffers, GL_ARB_fragment_program,
    GL_ARB_fragment_program_shadow, GL_ARB_multisample, GL_ARB_multitexture,
    GL_ARB_occlusion_query, GL_ARB_point_parameters, GL_ARB_point_sprite,
    GL_ARB_shadow, GL_ARB_texture_border_clamp, GL_ARB_texture_compression,
    GL_ARB_texture_cube_map, GL_ARB_texture_env_add,
    GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar,
    GL_ARB_texture_env_dot3, GL_ARB_texture_mirrored_repeat,
    GL_ARB_texture_non_power_of_two, GL_ARB_transpose_matrix,
    GL_ARB_vertex_program, GL_ARB_window_pos, GL_ATI_texture_mirror_once,
    GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color,
    GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate,
    GL_EXT_blend_minmax, GL_EXT_blend_subtract, GL_EXT_draw_range_elements,
    GL_EXT_fog_coord, GL_EXT_framebuffer_object, GL_EXT_multi_draw_arrays,
    GL_EXT_rescale_normal, GL_EXT_secondary_color,
    GL_EXT_separate_specular_color, GL_EXT_shadow_funcs,
    GL_EXT_stencil_two_side, GL_EXT_stencil_wrap,
    GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_s3tc,
    GL_EXT_texture_env_add, GL_EXT_texture_filter_anisotropic,
    GL_EXT_texture_lod_bias, GL_NV_blend_square, GL_NV_depth_clamp,
    GL_NV_fog_distance, GL_NV_light_max_exponent, GL_NV_texgen_reflection,
    GL_SGIS_generate_mipmap, GL_SGIS_texture_lod

非常感谢任何帮助。 远程工作有点困难,但我不得不这样做。

1个回答

1
我在我的服务器上安装了一个Nvidia GPU以运行CUDA应用程序,但遇到了与不同程序相同的问题。似乎在这样做之后,一些GL应用程序(但不是glxinfo或glxgears)会加载Nvidia的libGLX.so,而不是应该用于通过ssh进行GLX转发的Mesa indirect文件。
这个问题可以通过在远程机器上输入以下命令来解决:
sudo update-glx --config glx

然后选择Mesa驱动程序。

我认为这会全局禁用Nvidia GLX驱动程序,如果显卡用于本地视频输出,则可能不理想。


看起来在这样做之后,一些GL应用程序加载了Nvidia的libGLX.so而不是Mesa的间接库...你是怎么发现的? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接