4

Covid has me working remotely, and I'm pretty stuck here.

I've had no problem using X11 forwarding for UIs and even for 3D OpenSceneGraph visualizations, but a new application I need to run gives the following error on the remote computer:

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

The remote computer is a linux machine running ubuntu 16.04, the local computer is a mac using XQuartz as the X server.

To the best of my research it seems like the local computer does not support a certain GLX request. I'm wondering if this is just a missing GLX feature from XQuartz that can't be solved.

I tried to investigate if GLX was the problem. If I run 'glxdemo' I see the yellow square no problem. Possibly related - when I run glxgears, I see gears that are NOT moving, despite no errors and the console reporting non-zero fps.

Some other interesting information, here is the result of me running 'glxinfo' on the remote computer. Is this related to direct rendering not being on? I read this has something to do with using libGL.so from NVidia which doesn't support remote GLX. Is that the right path to go down? Something else that is weird is that 'OpenGL renderer string' references the intel chip inside, not the nvidia graphics card. Why would that be the case and is it related?

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

Any help would be super appreciated. Working remotely is kind of tough but I'm forced to do it.

Alex Kyriazis
  • 311
  • 1
  • 4
  • 11

1 Answers1

1

I ran into the same issue with a different program, after installing an Nvidia GPU in my server in order to run CUDA applications. It seems that after doing so, some GL applications (but not glxinfo or glxgears) load Nvidia's libGLX.so instead of the Mesa indirect one that should be used for GLX forwarding over ssh.

This was solved by entering the following on the remote machine:

sudo update-glx --config glx

And then selecting the Mesa driver.

I do think this disables the Nvidia GLX driver system-wide, which may not be desirable if the graphics card is used for local video output.

user5434231
  • 579
  • 3
  • 16