Как можно отображать графику OpenGL удаленно с помощью VNC?


24

Я пытаюсь запустить программу, которая использует OpenGL для рендеринга модели в области просмотра через VNC безуспешно.

Я получаю сообщение об ошибке - Xlib: расширение "GLX" отсутствует на дисплее ": 1.0".

Насколько я понимаю, VNC можно настроить для удаленной визуализации всей графики и отправки сжатого снимка экрана из буфера дисплея локальному клиенту. Это, казалось бы, сводит на нет необходимость в расширениях GLX на локальном клиенте. Можно ли настроить VNC таким образом, и не могли бы вы кратко описать, как?

Удаленный узел:

vncserver на RHEL 5

Локальный клиент:

UltraVNC в Windows XP


Будет ли программа OpenGL работать локально на консоли RH # L5? Будет ли это работать удаленно через X-Windows? Если нет, он не будет работать на VNC.
Кмарш

2
Почему это вики сообщества?
Крис С

Я подумал, что если бы это было вики-сообщество, люди могли бы отредактировать вопрос, чтобы сделать его более актуальным для архивирования.
Джаред Браун

Ответы:


17

Вы можете посмотреть на Virtual GL

Цитата: «VirtualGL - это пакет с открытым исходным кодом, который дает любому программному обеспечению для удаленного отображения Unix или Linux возможность запуска приложений OpenGL с полным аппаратным ускорением 3D»


14

Я использую x11vnc для получения удаленного доступа к тому, что отображает монитор. x11vnc общается с локальным сервером X11 и копирует кадровый буфер с сервера на клиент через vnc. Поскольку локальный сервер X11 рендерит все с аппаратным ускорением, я получаю аппаратное ускорение OpenGL по сравнению с VNC, даже со всеми классными эффектами рабочего стола. Вот как я запускаю x11vnc:

x11vnc -rfbauth ~/.vnc/passwd  -display :0 -forever -bg -repeat -nowf -o ~/.vnc/x11vnc.log

Я думаю, что почти любой просмотрщик vnc работает, но я бы порекомендовал turbovnc или tigervnc. Сначала я попробовал VirtualGL, и он отлично работает, но не для всего рабочего стола, только для отдельных приложений OpenGL.

Можно даже изменить разрешение на дисплее / VNC с помощью Xrandr. Например, вот так:

xrandr -q (to see available modes and outputs)
xrandr --output DVI-I-0 --mode "1024x768" (change mode on DVI output)

(Можно добавить новые разрешения, если доступных режимов недостаточно, но это выходит за рамки здесь.)

Так что теперь у меня есть полностью OpenGL аппаратно ускоренный и изменяемый размер сеанса VNC.


1
Опробовал этот подход с xfce4 и блендером на машине Tesla K80 GCE ... он работал безупречно. Как всегда, оболочка Gnome по-прежнему не отображалась должным образом. askubuntu.com/questions/229989/…
Рэй Фосс

1

Отключите специальный драйвер Video Hook, который использует UltraVNC, или используйте TightVNC.

Поскольку драйвер UltraVNC используется для повышения производительности, он отбрасывает любую обработку видео, выполняемую на видеокарте, например OpenGL.

Видеодрайвер, который UltraVNC устанавливает по умолчанию, позволяет не отображать графику OpenGL. Обратите внимание, что отключение драйвера резко снизит производительность. Также обратите внимание, что при отображении элементов, отображаемых в OpenGL, производительность будет снижаться с обеих сторон, поскольку клиентскому компьютеру теперь предстоит выполнить гораздо больше работы, а требуемая пропускная способность намного выше. Не ожидайте ничего более 4 секунд на кадр (не 4 кадра в секунду, больше как 0,25 кадра в секунду)


Когда вы говорите, отключить видео-хук в UltraVNC, вы имеете в виду локальный клиент? Не нужно ли вместо этого настраивать vncserver, работающий на удаленном хосте?
Джаред Браун

Нет, я имею в виду местного клиента. UltraVNC включает в себя видеодрайвер, который устанавливается вместе с ним. Если вы явно не скажете иначе, видеодрайвер попытается обработать все видео на стороне клиента, чтобы он мог сжать и передать его для использования по сети. Иногда в средстве просмотра можно указать, что вы не хотите использовать эту функцию, но UltraVNC (по крайней мере, раньше) имеет тенденцию игнорировать это.
IceMage

Кроме того, удаленный и локальный зависят от вашей перспективы. Когда я говорю «локально», я действительно имею в виду «Host» (компьютер, который прослушивает новые подключения), а «Remote» означает «компьютер, выполняющий подключение». Я исправлю это для будущих постов.
IceMage

Хорошо, я думаю, что использую противоположный жаргон. Когда я установил средство просмотра UltraVNC, я не думаю, что на нем был установлен видеодрайвер. Сервер UltraVNC, который я знаю, работает, но я им не пользуюсь. Я использую vncserver на машине RHEL5 в качестве хоста.
Джаред Браун

Поэтому мой реальный вопрос заключается в том, как настроить vncserver, чтобы он не отправлял команды GLX, а просто отправлял сжатый экран из буфера дисплея в средство просмотра UltraVNC?
Джаред Браун
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.