Назад | Перейти на главную страницу

Драйвер Nvidia ломает vncserver на CentOS 7.4, есть ли решение?

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

При использовании драйвера видеокарты Nvidia с видеокартой Nvidia GeForce GT 720 в CentOS 7.4 он отлично работает с проводным монитором компьютера на консоли. Однако при попытке подключиться к vncserver вы получаете только пустой черный экран при подключении. Я удалил драйвер Nvidia, и VNC снова работает. По-видимому, я недавно узнал, что драйвер Nouveau работает с VNC, но не с проводным монитором компьютера на консоли.

Есть ли способ использовать драйвер Nvidia и заставить работать VNC? Возможные изменения файлов конфигурации или более простой графический интерфейс для использования с Gnome? В настоящее время я использую metacity в файле ~ user / .vnc / xstartup. Или есть еще одна хорошая альтернатива использованию vncserver / tigervnc?

Насколько я понимаю, основная причина в том, что NVIDIA устанавливает свои собственные библиотеки GL, которые нарушают работу других X-сред.

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

Чит заключается в том, чтобы отключить NVIDIA libGL.so, направив vncserver на / usr / lib64 ПЕРЕД / usr / lib64 / nvidia:

$ 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.

TurboVNC + VirtualGL хорошая альтернатива.

Плюсы:

Минусы в том, что это может быть сложно настроить. Я только что закончил настройку на своих CentOS 7 и NVidia K80. Я сомневаюсь, что моя конфигурация идеальна, но вот несколько моментов, которые я хотел бы выделить:

  1. Официальные гиды (1,2,3,4) на первый взгляд могут показаться слишком длинными и пугающими, но за ними довольно легко следить. Однако они упускают некоторые важные данные (1,2,3,4).

  2. Я использовал kmod-nvidia драйверы от elrepo, занесение в черный список nouveau с участием две строки echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/disable-nouveau.conf, а не одной строкой, как это предлагается во многих других руководствах (1,2).

  3. Если что-то пойдет не так, хорошей отправной точкой будет проверка следующих журналов: /var/log/messages, /var/log/Xorg.0.log, ~/.vnc/*.log. Большинство сообщений об ошибках, с которыми я столкнулся, уже обсуждены и их довольно легко погуглить.

  4. Обратите внимание на xdpyinfo -display :0 там проверка на вменяемость. Если не работает, попробуйте ответить n/n/n в vglserver_config и отключение selinux. Также лично я оказался замена gdm с участием lightdm.

  5. Хотя в целом Gnome3 работает нормально, время от времени случаются некоторые странные ошибки (например, Firefox работает, но при открытии загруженного архива с помощью встроенного диспетчера архивов возникает ошибка типа этот). Итак, я установил KDE Plasma, так что -3dwm больше не нужен. (Но мне все еще нравится сервер TurboVNC, потому что он быстрый).

Чтобы продолжить работу над проблемой NVIDIA vs native graphics с проблемой 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 "$@"

Вот мое решение на машине 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 $*