glxgears/glxinfo/glxheads 均通过 ssh -X 失败

glxgears/glxinfo/glxheads 均通过 ssh -X 失败

因此,我疯狂地在谷歌上搜索,但最终不得不求助于更了解的人。这个问题讨论了很多,但对我没有任何帮助。

设置:我们有一个 Ubuntu 设置:

  • 描述:Ubuntu 16.04.4 LTS
  • 版本:16.04
  • 代号:xenial
  • 显卡:Quadro K5200

我们从服务器机房控制台通过以下方式安装了 nvidia 驱动程序:

sudo -E  add-apt-repository ppa:graphics-drivers
sudo -E  apt-get update
sudo -E  apt-get install nvidia-390
sudo nvidia-xconf

编辑xorg配置文件通过增加:

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

Section "Device"
     Identifier     "Device0"
      Driver         "nvidia"
      VendorName     "NVIDIA Corporation"
      BoardName      "Quadro K5200"
      Option    "AllowUnofficialGLXProtocol" "true" (added)
EndSection

我还添加了+iglx/usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf

[SeatDefaults]

#Dump core

xserver-command=X -core +iglx

重新启动服务器并将 DVI 电缆连接到屏幕,以便驱动程序可以加载并且看起来不错:

sudo lshw -c video

  *-display               
       description: VGA compatible controller
       product: GK110GL [Quadro K5200]
       vendor: NVIDIA Corporation
       physical id: 0
       bus info: pci@0000:03:00.0
       version: a1
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress vga_controller bus_master cap_list rom
       configuration: driver=nvidia latency=0
       resources: irq:186 memory:a3000000-a3ffffff memory:90000000-9fffffff memory:a0000000-a1ffffff ioport:2000(size=128) memory:c0000-dffff

已安装mesa-实用程序

我可以从服务器机房控制台运行glxgearsglxinfo并且glxheads没有问题。

当我从我的 Ubuntu 机器连接时,ssh -X我得到了经典错误:

$ glxgears 
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:  24
  Current serial number in output stream:  25

(安装驱动程序后,thinlinc 也不再起作用)。

库和符号链接看起来没问题吗?

sudo find /usr -iname "*libGL.so*" -exec ls -l -- {} + 
lrwxrwxrwx 1 root root      10 maj 16 22:00 /usr/lib32/nvidia-390/libGL.so -> libGL.so.1    
lrwxrwxrwx 1 root root      15 maj 16 22:00 /usr/lib32/nvidia-390/libGL.so.1 -> libGL.so.390.59    
-rw-r--r-- 1 root root  523944 maj 10 06:49 /usr/lib32/nvidia-390/libGL.so.1.7.0    
-rw-r--r-- 1 root root 1129724 maj 10 06:51 /usr/lib32/nvidia-390/libGL.so.390.59    
lrwxrwxrwx 1 root root      10 maj 16 22:00 /usr/lib/nvidia-390/libGL.so -> libGL.so.1    
lrwxrwxrwx 1 root root      15 maj 16 22:00 /usr/lib/nvidia-390/libGL.so.1 -> libGL.so.390.59    
-rw-r--r-- 1 root root  665720 maj 10 06:52 /usr/lib/nvidia-390/libGL.so.1.7.0    
-rw-r--r-- 1 root root 1268112 maj 10 06:53 /usr/lib/nvidia-390/libGL.so.390.59    
lrwxrwxrwx 1 root root      14 maj 30 14:44 /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 -> libGL.so.1.2.0    
-rw-r--r-- 1 root root  467520 jan 29 21:08 /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0

我知道使用ssh -X不使用服务器卡来渲染图形(下一步是安装 virtualGL),但我只是希望用户至少能够打开使用 openGL 的程序(我不是计算机科学家所以不确定这是否正确,我的意思是例如显示 3D 对象的程序)。

在我们以前使用 RedHat 的设置中,我做到了这一点。用户可以通过以下方式打开 3D 程序

ssh -X= 虽然有点滞后,但可以本地渲染(我的电脑)

thinlinc= 由于渲染是通过 CPU 在服务器上完成的,因此延迟更少

vglconnect= 由于本地服务器 GPU 进行渲染,因此没有延迟

但在这里我无法超越第 1 步。

我无法知道是否使用了正确的库,因为即使这样也会出现同样的错误:

LIBGL_DEBUG=verbose glxgears

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:  24    
  Current serial number in output stream:  25

有人知道哪里出了问题吗?上次我通过 nvidia .run 文件安装了驱动程序,但大多数人似乎建议使用 apt-get,因为通过 .run 安装对内核更新很敏感(?)。

编辑:在我们另一台非常相似的没有显卡的服务器上,我遇到了与安装 nvidia 驱动程序之前在该服务器上遇到的相同错误:

$ glxgears 
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Error: couldn't get an RGB, Double-buffered visual

glxinfo确实给出了输出。

编辑 2:当我通过 mobaXterm 从我的 Windows 笔记本电脑使用 ssh -X 时,glxinfo 和 glxgears 可以工作。尽管它说:

GL_VERSION 1.4 (2.1 Mesa 10.5.4)
GL_VENDOR Mesa Project
GL_RENDERER Software Rasterizer

相关内容