我知道类似的问题被问了无数次,但到目前为止,没有一个解决方案对我有效。让我们从头开始。
我有一个工作站,带有一个运行Ubuntu20.04的NVidia RTX A5000。在今天的事件之前,我能够使用SSH连接到我的工作站,并在Mac上使用OpenGL窗口呈现XQuartz。
今天,我在工作站试图运行一个窗口程序,并得到一个“未能建立dbus连接”错误。在谷歌搜索之后,这似乎是因为我的驱动程序中有一个bug (495.44,提到了这里)。我决定向司机汇报情况。“附加驱动程序”选项卡中的所有选项都是灰色的,最后它说我正在使用手动安装的驱动程序。我偶然遇到这个问题跑了
sudo ubuntu-drivers autoinstall
没有打嗝就跑了。然后我重新启动机器,没有获得登录屏幕,而是用黑色屏幕和顶部闪烁的白色光标来迎接我。幸运的是,我还能把它塞进去。过了一会儿,我发现ubuntu-drivers
已经安装了nvidia-driver-470
。我按照关于这个答案的指示删除了它
dpkg -P $(dpkg -l | grep nvidia-driver | awk '{print $2}')
apt autoremove
我没有安装noveau
( Nvidia驱动程序自述称这是个坏主意)。这次我重新启动了机器并获得了登录屏幕。打开“附加驱动程序”显示,我回到了手动安装的(和by )驱动程序(我也通过运行nvidia-smi
确认了这一点)。
这一次我决定手动安装驱动程序,然后运行
sudo apt install nvidia-driver-510
我重启了电脑,这次一切都正常了。我到了登录屏幕,bug消失了,我成功地运行了我想要的应用程序(我还发现我用不正确的参数调用它,这让我怀疑这一切是否都是徒劳的……)。当我使用附加在工作站上的显示器时,一切都很好。
我现在遇到的问题是如何在SSH上进行渲染。作为参考,xclock
工作,所以我没有完全失去远程X渲染。对于其他应用程序(我认为常见的线程是它们使用GL,但我不确定),我得到以下错误
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
我看到一些回答说要运行apt-get intall -y mesa-utils libgl1-mesa-glx
。我错过了libgl1-mesa-glx
,但这并没有解决问题。使用调试信息运行GL应用程序(如glxgears
或glxinfo
),我得到以下信息
$ LIBGL_DEBUG=verbose glxinfo
name of display: localhost:10.0
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: 16
Current serial number in output stream: 17
$ LIBGL_DEBUG=verbose glxgears
libGL: MESA-LOADER: dlopen(/usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/[my username]/.drirc: No such file or directory.
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/[my username]/.drirc: No such file or directory.
libGL: Disabling server's aux buffer support
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Error: glXCreateContext failed
我尝试了几种方法,其中包括从“附加驱动程序”选项卡中选择新驱动程序(在安装Nvidia驱动程序后不再变灰)。什么都没用。我在某个地方读到这可能是由于Nvidia驱动程序造成的,所以我决定卸载nvidia-driver-510
并返回手动安装的驱动程序。然而,在重新启动后,我的屏幕分辨率降低到640x480,所有东西都超出了比例,并且选择了新的驱动程序。我卸载了xserver-xorg-video-nouveau
并重新启动,希望得到手动安装的驱动程序,但是一旦我登录,我又有了新的(尽管没有安装xserver-xorg-video-nouveau
,我检查了)。我再次安装了nvidia-driver-510
以使我的屏幕恢复正常。
我看到其他有相同问题的用户能够通过安装特定于发行版的软件包(mesa-libGLw-devel.x86_64
在CentOS7中,mesa-dri-drivers
在Redhat中)来解决这个问题,但是我不知道如何为我的发行版找到相应的包。其他答案建议卸载Nvidia驱动程序,但仅凭这一点还不足以恢复到手动安装的驱动程序( but,但正在工作)。除了noveau
驱动程序之外,还有其他我可能错过的包吗?如果是的话,我怎样才能找到那是甚麽包裹呢?
如果这可能会有帮助的话,下面是我在其他问题中看到的人们要求的更多信息。
$ sudo ldconfig -p | grep -i gl.so
libwayland-egl.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwayland-egl.so.1
libcogl.so.20 (libc6,x86-64) => /lib/x86_64-linux-gnu/libcogl.so.20
libOpenGL.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libOpenGL.so.0
libOpenGL.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libOpenGL.so
libGL.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libGL.so.1
libGL.so.1 (libc6) => /lib/i386-linux-gnu/libGL.so.1
libGL.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libGL.so
libEGL.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libEGL.so.1
libEGL.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libEGL.so
libGL.so
和libGL.so.1
都指向/lib/x86_64-linux-gnu/libGL.so.1.7.0
。
$ lspci -k | grep -EA3 'VGA|3D|Display'
08:00.0 VGA compatible controller: NVIDIA Corporation Device 2231 (rev a1)
Subsystem: NVIDIA Corporation Device 147e
Kernel driver in use: nvidia
Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
这是个很长的问题。谢谢你一路读到这里。
发布于 2022-07-24 14:37:19
“我现在的问题是在SSH上进行渲染”是一个非常宽泛的短语。它可能意味着:
通常,如果您将SSH放入服务器并运行一个使用GPU的命令,则只有屏幕外呈现才能工作(选项1),但大多数程序都没有编码以处理此问题;因此,它们将无法处理您所拥有的神秘错误消息(因为它们必须使用EGL接口与GPU对话,而大多数OpenGL程序将尝试使用GLX X11或EGL X11)。
这可以通过设置显示环境变量(即DISPLAY=:0.0 glxinfo
)来解决,它将变成选项2(在服务器中呈现,在服务器的显示中显示命令)。
如果您想要选项3,这是很难做到的;所以我建议您使用一个可以很好地处理此任务的替代软件,如Nomachine、TeamViewer或Anydesk (警告:它们都不是FOSS)。您可以尝试其他工具,如X2Go或VNC,但不幸的是,在我的经验中,它们没有我提到的其他工具的延迟或质量。
您没有粘贴用于在SSH上打开xclock
或glxinfo
的命令,这会产生深远的影响。
另外,比较SSH中的env
输出与主机上的终端(从GNOME/Xfce/etc开始)可以帮助您识别任何错误或缺失。
swrast由libgl1-mesa-dri
提供。
尝试:
sudo apt install --reinstall libgl1-mesa-dri
./installer --uninstall
)。默认情况下,Ubuntu的软件包支持NVIDIA驱动程序,并禁用或破坏Mesa驱动程序;而官方安装程序使Mesa与NVIDIA驱动程序一起工作。在像您这样的用例中,这可能导致非常不同的结果。
发布于 2023-02-03 22:34:56
我遇到了类似的问题。
这个问题帮助我理解了发生了什么:NVIDIA 440.64 32位库包破坏64位驱动程序包
步骤:
sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \ "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"
sudo apt-get --purge remove "*nvidia*" "libxnvctrl*"
sudo apt-get autoremove
sudo dpkg --add-architecture i386
sudo apt update
sudo apt-get install nvidia-driver-515
这还将安装libnvidia-gl-515
和libnvidia-gl-515:i386
。
您可能需要在安装前检查ppa源代码:apt-cache policy nvidia-driver-515
。
NVIDIA在2022年4月进行了GPG更新:https://developer.nvidia.com/blog/updating-the-cuda-linux-gpg-repository-key/
sudo reboot
最后,我和Nvidia 515的司机一起工作。
请注意,我不必在我的机器上安装CUDA。如果您需要CUDA,根本的问题是您必须做一些解决办法,因为没有包括32位库:
https://forums.developer.nvidia.com/t/latest-cuda-driver-from-deb-repository-breaks-steam/70950
我想在NVIDIA方面讨论这个问题。问题是最新的CUDA驱动程序不再捆绑任何32位兼容性库。这破坏了需要32位兼容性的软件,如蒸汽。如果下一个CUDA驱动程序能够重新包含这些内容,那么我就可以拥有一台运行CUDA和蒸汽的Ubuntu机器,这将是非常棒的。这并不是真正的问题,你只需要用正确的方式安装驱动程序和cuda:
https://askubuntu.com/questions/1412683
复制相似问题