Jak można wyświetlać grafikę OpenGL zdalnie za pomocą VNC?

24

Próbuję uruchomić program, który używa OpenGL do renderowania modelu w rzutni przez VNC bez powodzenia.

Otrzymuję komunikat o błędzie - Xlib: brak rozszerzenia „GLX” na wyświetlaczu „: 1.0”.

Rozumiałem, że VNC można skonfigurować do zdalnego renderowania całej grafiki i wysyłania skompresowanego zrzutu ekranu z bufora wyświetlania do lokalnego klienta. Wydaje się, że to neguje potrzebę rozszerzeń GLX na lokalnym kliencie. Czy VNC można skonfigurować w ten sposób i czy mógłbyś krótko opisać, w jaki sposób?

Zdalny host:

vncserver na RHEL 5

Klient lokalny:

UltraVNC w systemie Windows XP

Jared Brown
źródło
Czy program OpenGL będzie działał lokalnie na konsoli RH # L5? Czy będzie działać zdalnie przez X-Windows? Jeśli nie, nie będzie działać na VNC.
kmarsh
2
Dlaczego jest to Wiki społeczności?
Chris S
Pomyślałem, że gdyby była to wiki społeczności, ludzie mogliby edytować pytanie, aby było bardziej odpowiednie dla archiwizacji.
Jared Brown

Odpowiedzi:

17

Możesz spojrzeć na Virtual GL

Cytat: „VirtualGL to pakiet typu open source, który daje dowolnemu oprogramowaniu do zdalnego wyświetlania w systemach Unix lub Linux możliwość uruchamiania aplikacji OpenGL z pełnym przyspieszeniem sprzętowym 3D”

Totaam
źródło
14

Używam x11vnc, aby uzyskać zdalny dostęp do wszystkiego, co wyświetla monitor. x11vnc komunikuje się z lokalnym serwerem X11 i kopiuje bufor ramki z serwera do klienta przez vnc. Ponieważ lokalny serwer X11 renderuje wszystko z akceleracją sprzętową, otrzymuję akcelerację sprzętową OpenGL przez VNC, nawet przy wszystkich fajnych efektach pulpitu. Oto jak uruchamiam x11vnc:

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

Myślę, że działa prawie każda przeglądarka VNC, ale polecam turbovnc lub tigervnc. Najpierw wypróbowałem VirtualGL i działa dobrze, ale nie dla całego pulpitu, tylko dla poszczególnych aplikacji OpenGL.

Można nawet zmienić rozdzielczość na wyświetlaczu / vnc za pomocą xrandr. Np. Tak:

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

(Możliwe jest dodawanie nowych rozdzielczości, jeśli dostępne tryby nie są wystarczające, ale jest to poza zakresem.)

Więc teraz mam w pełni akcelerowaną sprzętowo OpenGL sesję VNC o zmiennym rozmiarze.

Henrik
źródło
1
Wypróbowałem to podejście z xfce4 i blenderem na maszynie Tesla K80 GCE ... działało bezbłędnie. Gnome-shell nadal nie wyświetla się poprawnie z jakiegoś powodu, jak zawsze. askubuntu.com/questions/229989/…
Ray Foss
1

Wyłącz specjalny sterownik Video Hook, którego używa UltraVNC, lub użyj TightVNC.

Ponieważ sterownik UltraVNC służy do poprawy wydajności, upuszcza wszelkiego rodzaju przetwarzanie wideo wykonywane na karcie wideo, takie jak OpenGL.

Sterownik wideo, który UltraVNC instaluje domyślnie, powoduje, że nie może wyświetlać grafiki OpenGL. Pamiętaj, że wyłączenie sterownika drastycznie obniży wydajność. Należy również pamiętać, że podczas wyświetlania elementów renderowanych w wydajności OpenGL będzie to miało negatywny wpływ na oba końce, ponieważ komputer kliencki ma teraz dużo więcej do zrobienia, a wymagana przepustowość jest znacznie wyższa. Nie oczekuj niczego przez 4 sekundy na klatkę (nie 4 fps, więcej jak 0,25 fps)

IceMage
źródło
Kiedy mówisz: wyłącz hak wideo w UltraVNC, masz na myśli lokalnego klienta? Czy vncserver działający na zdalnym hoście nie musiałby zostać skonfigurowany?
Jared Brown
Nie, mam na myśli lokalnego klienta. UltraVNC zawiera zainstalowany sterownik wideo. O ile wyraźnie nie powiesz inaczej, sterownik wideo podejmie próbę przetworzenia całego wideo po stronie klienta, aby mógł go skompresować i przesyłać strumieniowo w celu użycia w sieci. Czasami można określić w przeglądarce, że nie chcesz korzystać z tej funkcji, ale UltraVNC (przynajmniej kiedyś) miała tendencję do ignorowania tego.
IceMage
Również zdalne i lokalne zależą od twojej perspektywy. Kiedy mówię lokalnie, naprawdę mam na myśli Host (komputer, który nasłuchuje nowych połączeń), a Remote oznacza komputer nawiązujący połączenie. Poprawię to dla przyszłych postów.
IceMage
OK - chyba używam przeciwnego żargonu. Kiedy zainstalowałem przeglądarkę UltraVNC, nie sądzę, aby miał zainstalowany sterownik wideo. Znany mi serwer UltraVNC, ale go nie używam. Używam vncserver na maszynie RHEL5 jako hosta.
Jared Brown
Tak więc moje prawdziwe pytanie brzmi: jak skonfigurować vncserver, aby nie wysyłał poleceń GLX, a raczej wysyłał po prostu skompresowany ekran z bufora wyświetlania do przeglądarki UltraVNC?
Jared Brown