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
优点:
- 好的表现。
- 适用于需要 3D 加速的桌面环境(像 Gnome3), 和
-3dwm
。 - 远程 3D 渲染作品即使使用无头 GPU。
缺点是配置起来可能比较棘手。我刚刚在 CentOS 7 和 NVidia K80 上完成了设置。我怀疑我的配置是否完美,但我想强调以下几点:
官方指南(1,2,3,4) 乍一看可能有点太长太吓人,但其实很容易理解。不过,它们确实漏掉了一些重要的信息(1,2,3,4)。
我用过kmod-nvidia来自 elrepo 的司机,被列入
nouveau
黑名单两条线echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/disable-nouveau.conf
,而不是像其他许多指南中建议的那样只用一行代码(1,2)。当出现问题时,检查以下日志是一个很好的起点:
/var/log/messages
,,/var/log/Xorg.0.log
。~/.vnc/*.log
我遇到的大多数错误消息都已经讨论过了,而且很容易在 Google 上找到。注意那里的健全性检查。如果
xdpyinfo -display :0
它不起作用,请尝试回答n
/n
/n
和vglserver_config
禁用 selinux。另外,就我个人而言,我最终替换gdm
和lightdm
。- 虽然 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 " . "edString($desktopName);
$cmd .= " -httpd $vncJavaFiles" if ($vncJavaFiles);
$cmd .= " -auth $xauthorityFile";
--- 216,222 ----
# Now start the X VNC Server
! $cmd = $exedir."Xvnc :$displayNumber";
$cmd .= " -desktop " . "edString($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 $*