因此,我疯狂地在谷歌上搜索,但最终不得不求助于更了解的人。这个问题讨论了很多,但对我没有任何帮助。
设置:我们有一个 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-实用程序。
我可以从服务器机房控制台运行glxgears
,glxinfo
并且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