Nvidia 驱动程序破坏了 CentOS 7.4 上的 vncserver,有办法吗?

Nvidia 驱动程序破坏了 CentOS 7.4 上的 vncserver,有办法吗?
CentOS Linux release 7.4.1708 (Core) 
uname -r output: 3.10.0-693.2.2.el7.x86_64
NVidia driver: NVIDIA-Linux-x86_64-375.66.run

在 CentOS 7.4 上使用 Nvidia 显卡驱动程序和 Nvidia GeForce GT 720 显卡时,它可以很好地用于控制台上的有线计算机显示器。但是,当尝试连接到 vncserver 时,连接时只会出现空白黑屏。我已删除 Nvidia 驱动程序,VNC 又可以正常工作了。显然,我最近才发现 Nouveau 驱动程序可以与 VNC 配合使用,但不能与控制台上的有线计算机显示器配合使用。

有没有办法使用 Nvidia 驱动程序并让 VNC 正常工作?是否有可能更改配置文件或使用更简单的 GUI 来与 Gnome 配合使用?目前我在 ~user/.vnc/xstartup 文件中使用 metacity。或者有没有其他替代 vncserver/tigervnc 的好方法?

答案1

TurboVNC+虚拟GL是一个很好的选择。

优点:

缺点是配置起来可能比较棘手。我刚刚在 CentOS 7 和 NVidia K80 上完成了设置。我怀疑我的配置是否完美,但我想强调以下几点:

  1. 官方指南(1234) 乍一看可能有点太长太吓人,但其实很容易理解。不过,它们确实漏掉了一些重要的信息(1234)。

  2. 我用过kmod-nvidia来自 elrepo 的司机,被列入nouveau黑名单两条线 echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/disable-nouveau.conf,而不是像其他许多指南中建议的那样只用一行代码(12)。

  3. 当出现问题时,检查以下日志是一个很好的起点:/var/log/messages,,/var/log/Xorg.0.log~/.vnc/*.log我遇到的大多数错误消息都已经讨论过了,而且很容易在 Google 上找到。

  4. 注意那里的健全性检查。如果xdpyinfo -display :0它不起作用,请尝试回答n/ n/nvglserver_config禁用 selinux。另外,就我个人而言,我最终替换 gdmlightdm

  5. 虽然 Gnome3 总体上可以正常工作,但还是会时不时地出现一些奇怪的错误(例如 Firefox 可以正常工作,但使用内置存档管理器打开下载的存档会失败,并出现类似以下错误)。因此,我最终安装了 KDE Plasma,这样-3dwm就不再需要它了。(但我仍然喜欢 TurboVNC 服务器,因为它速度很快)。

答案2

据我了解,根本原因是 NVIDIA 安装了自己的 GL 库,从而破坏了其他 X 环境。

$ ldd /usr/bin/Xvnc | egrep GL
libGL.so.1 => /lib64/libGL.so.1 (0x00007f7ed8f5b000)

一个作弊方法是通过将 vncserver 指向 /usr/lib64/nvidia 之前的 /usr/lib64 来跳出 NVIDIA libGL.so:

$ diff -cbtw /usr/bin/vncserver*
*** /usr/bin/vncserver  2018-12-08 11:07:14.871180204 -0500
--- /usr/bin/vncserver.rhel71   2014-03-10 12:17:32.000000000 -0400
***************
*** 216,223 ****

  # Now start the X VNC Server

! $cmd = "export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH ; ";
! $cmd .= $exedir."Xvnc :$displayNumber";
  $cmd .= " -desktop " . &quotedString($desktopName);
  $cmd .= " -httpd $vncJavaFiles" if ($vncJavaFiles);
  $cmd .= " -auth $xauthorityFile";
--- 216,222 ----

  # Now start the X VNC Server

! $cmd = $exedir."Xvnc :$displayNumber";
  $cmd .= " -desktop " . &quotedString($desktopName);
  $cmd .= " -httpd $vncJavaFiles" if ($vncJavaFiles);
  $cmd .= " -auth $xauthorityFile";
[merc_user@pair-1-host ~]$

这对我适用于 Red Hat 7.1 和 CUDA 9-2。

答案3

为了继续解决 NVIDIA libGL 问题与原生图形问题,我采取了以下措施:

$ mv /usr/sbin/gdm /usr/sbin/gdm.bin
$ mv /usr/bin/Xorg /usr/bin/Xorg.bin
$ # make edits - show results 
$ cat /usr/sbin/gdm
#!/bin/sh
#
# workaround for libGL issue
#

LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

exec /usr/sbin/gdm.bin "$@"
$ cat /usr/bin/Xorg
#!/bin/sh
#
# workaround libGL issue
#

LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

exec /usr/bin/Xorg.bin "$@"

答案4

这是我在 Fedora 29 机器上的解决方案。我相信这是一个与发行版无关的问题。
将 libGL 的发行版移动或复制到 /usr/local/vnclib:

$ ls -l /usr/local/vnclib
total 596
lrwxrwxrwx 1 root root     14 Feb 14 07:11 libGL.so -> libGL.so.1.7.0
lrwxrwxrwx 1 root root     14 Feb 14 07:11 libGL.so.1 -> libGL.so.1.7.0
-rwxr-xr-x 1 root root 610208 Feb 14 07:11 libGL.so.1.7.0
$

make a /usr/local/bin/vncserver:

$ cat /usr/local/bin/vncserver
#!/bin/bash
# added because nvidia driver overwrites these
export LD_LIBRARY_PATH=/usr/local/vnclib:$LD_LIBRARY_PATH
/usr/bin/vncserver $*

相关内容