Wie können OpenGL-Grafiken mit VNC aus der Ferne angezeigt werden?

24

Ich versuche erfolglos, ein Programm auszuführen, das OpenGL verwendet, um ein Modell in einem Ansichtsfenster über VNC zu rendern.

Die Fehlermeldung lautet - Xlib: Erweiterung "GLX" fehlt auf Anzeige ": 1.0".

Ich habe verstanden, dass VNC so konfiguriert werden kann, dass alle Grafiken remote gerendert werden und ein komprimiertes Screen Grab vom Anzeigepuffer an den lokalen Client gesendet wird. Dies scheint die Notwendigkeit für GLX-Erweiterungen auf dem lokalen Client zu negieren. Kann VNC auf diese Weise konfiguriert werden und können Sie kurz beschreiben, wie?

Remote-Host:

vncserver auf RHEL 5

Lokaler Client:

UltraVNC unter Windows XP

Jared Brown
quelle
Funktioniert das OpenGL-Programm lokal auf der RH # L5-Konsole? Funktioniert es remote über X-Windows? Wenn nicht, funktioniert es nicht mit VNC.
kmarsh
2
Warum ist das ein Community Wiki?
Chris S
Ich dachte, wenn es ein Community-Wiki wäre, könnten die Leute die Frage bearbeiten, um sie für die Archivierung relevanter zu machen.
Jared Brown

Antworten:

17

Vielleicht möchten Sie sich Virtual GL ansehen

Zitat: "VirtualGL ist ein Open-Source-Paket, mit dem jede Unix- oder Linux-Remote-Display-Software OpenGL-Anwendungen mit voller 3D-Hardwarebeschleunigung ausführen kann."

Totaam
quelle
14

Ich verwende x11vnc , um Fernzugriff auf das zu erhalten, was auf dem Monitor angezeigt wird. x11vnc kommuniziert mit dem lokalen X11-Server und kopiert den Framebuffer über vnc vom Server auf den Client. Da der lokale X11-Server alles mit Hardwarebeschleunigung rendert, erhalte ich hardwarebeschleunigtes OpenGL über VNC, auch mit all den coolen Desktop-Effekten. So starte ich x11vnc:

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

Ich denke, fast jeder VNC-Viewer funktioniert, aber ich würde TurboVNC oder TigerVNC empfehlen. Ich habe zuerst VirtualGL ausprobiert und es funktioniert einwandfrei, aber nicht für den gesamten Desktop, sondern nur für einzelne OpenGL-Anwendungen.

Es ist sogar möglich, die Auflösung auf dem Display / VNC mit xrandr zu ändern. ZB so:

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

(Es ist möglich, neue Auflösungen hinzuzufügen, wenn die verfügbaren Modi nicht ausreichen, aber das ist hier nicht möglich.)

Jetzt habe ich eine vollständig OpenGL-Hardware-beschleunigte und skalierbare VNC-Sitzung.

Henrik
quelle
1
Versuchte diesen Ansatz mit xfce4 und Blender auf einer Tesla K80 GCE Maschine ... es funktionierte einwandfrei. Gnome-Shell wird aus irgendeinem Grund immer noch nicht richtig angezeigt, wie immer. askubuntu.com/questions/229989/…
Ray Foss
1

Deaktivieren Sie den von UltraVNC verwendeten speziellen Video Hook-Treiber oder verwenden Sie TightVNC.

Da der UltraVNC-Treiber verwendet wird, um die Leistung zu verbessern, werden alle auf der Grafikkarte ausgeführten Videoverarbeitungsvorgänge, z. B. OpenGL, gelöscht.

Der von UltraVNC standardmäßig installierte Grafiktreiber macht es so, dass keine OpenGL-Grafiken angezeigt werden können. Beachten Sie, dass das Deaktivieren des Treibers die Leistung drastisch verringert. Beachten Sie auch, dass beim Anzeigen von in OpenGL gerenderten Elementen die Leistung auf beiden Seiten beeinträchtigt wird, da der Clientcomputer jetzt viel mehr Arbeit zu erledigen hat und die erforderliche Bandbreite viel höher ist. Erwarten Sie nichts über 4 Sekunden pro Bild (nicht 4 fps, eher 0,25 fps)

IceMage
quelle
Wenn Sie sagen, dass Sie den Video-Hook in UltraVNC deaktivieren, beziehen Sie sich auf den lokalen Client? Müsste nicht stattdessen der auf dem Remote-Host ausgeführte vncserver konfiguriert werden?
Jared Brown
Nein, ich meine den lokalen Kunden. UltraVNC enthält einen Grafiktreiber, der mit installiert wird. Sofern Sie nicht ausdrücklich etwas anderes angeben, versucht der Grafiktreiber, das gesamte Video auf der Client-Seite zu verarbeiten, damit es komprimiert und zur Verwendung über das Netzwerk gestreamt werden kann. Manchmal ist es möglich, im Viewer anzugeben, dass Sie diese Funktion nicht verwenden möchten, UltraVNC hat jedoch (zumindest früher) die Tendenz, dies zu ignorieren.
IceMage
Auch Remote und Local hängen von Ihrer Perspektive ab. Wenn ich lokal sage, meine ich wirklich den Host (den Computer, der auf neue Verbindungen wartet) und Remote den Computer, der die Verbindung herstellt. Ich werde dies für zukünftige Posts korrigieren.
IceMage
OK - ich nehme an, ich benutze den entgegengesetzten Jargon. Als ich den UltraVNC-Viewer installiert habe, glaube ich nicht, dass ein Grafiktreiber installiert war. Der UltraVNC-Server, den ich kenne, verwendet das aber nicht. Ich verwende vncserver auf einem RHEL5-Rechner als Host.
Jared Brown
Meine eigentliche Frage lautet also: Wie konfiguriere ich vncserver, um keine GLX-Befehle zu senden, sondern nur einen komprimierten Bildschirm aus dem Anzeigepuffer an den UltraVNC-Viewer zu senden?
Jared Brown