X11 leitet eine OpenGL-Anwendung von einem Computer mit einer NVIDIA-Karte an einen Computer mit einer AMD-Karte weiter

15

Ich bin daran interessiert, eine X11-Sitzung über SSH weiterzuleiten, um einen Remote-Prozess zu starten, der OpenGL verwendet (speziell Gazebo für alle, die damit vertraut sind).

Das Problem, auf das ich stoße, ist, dass der Pavillon aufgrund einer Nichtübereinstimmung der Grafikkarten abstürzt. Es können keine "NV-GLX" -Erweiterungen gefunden werden. Die genaue Fehlerausgabe:

Xlib:  extension "NV-GLX" missing on display "localhost:10.0".
Xlib:  extension "NV-GLX" missing on display "localhost:10.0".
X Error of failed request:  GLXUnsupportedPrivateRequest
  Major opcode of failed request:  149 (GLX)
  Minor opcode of failed request:  16 (X_GLXVendorPrivate)
  Serial number of failed request:  24
  Current serial number in output stream:  25

Auf dem Remote-Computer wird eine NVIDIA-Karte ausgeführt, und auf meinem lokalen Computer wird eine AMD-Karte verwendet.

Ich habe die X11-Weiterleitung von Pavillons zwischen zwei Computern mit NVIDIA-Karten getestet. Es funktioniert gut.

Soweit ich das beurteilen kann, scheint eines von drei Dingen vor sich zu gehen:

  1. Ich mache etwas falsch,
  2. Was ich tun möchte, ist unmöglich,
  3. Gazebo arbeitet nicht agnostisch mit verzweigten Codepfaden für unterschiedliche Hardware. Was auch immer Ihr System aussieht, wenn es erstellt wird, erhalten Sie.

Auf dem Remotecomputer wird Ubuntu ausgeführt, und auf meinem lokalen Computer läuft Mac 10.8.2. Ich weiß bereits, dass ich die x11-Weiterleitung für den normalen Gebrauch richtig eingerichtet habe, da ich Dinge wie xclock in XQuartz problemlos öffnen kann. Die Lösung (falls vorhanden) funktioniert vorzugsweise auch für andere Betriebssysteme, einschließlich Windows über WinSCP.

Doug Stephen
quelle

Antworten:

9

Ein paar Anmerkungen aus dem GLX-Wikipedia-Artikel :

GLX [is] Eine Erweiterung des X-Protokolls, mit der der Client (die OpenGL-Anwendung) 3D-Rendering-Befehle an den X-Server (die für die Anzeige verantwortliche Software) senden kann. Die Client- und Server-Software kann auf verschiedenen Computern ausgeführt werden.

und

Wenn Client und Server auf demselben Computer ausgeführt werden und eine beschleunigte 3D-Grafikkarte mit einem geeigneten Treiber verfügbar ist, können die beiden vorherigen Komponenten von DRI umgangen werden. In diesem Fall kann die Client-Anwendung dann über mehrere API-Ebenen direkt auf die Video-Hardware zugreifen.

Ich glaube, der erste Punkt beantwortet Ihre Frage, ob dies möglich ist oder nicht: Es sollte auf jeden Fall möglich sein. Die zweite kann eine Erklärung dafür liefern, warum Ihr Client-Programm darauf besteht, die Funktionen seines lokalen X-Servers (des NV GLX-Treibers) zu verwenden. Vielleicht glaubt es, dass dies localhost:10.0derselbe Computer ist, und hat daher versucht, eine Richtungsverbindung herzustellen.

Dinge zu versuchen:

  1. gazeboVersuchen Sie es stattdessen glxdemo.
  2. Wenn möglich, bringen Sie die beiden Computer in dasselbe Netzwerk und nehmen Sie ssh aus dem Bild heraus
  3. Die große Waffe: straceIhre gazeboAnrufung und finden Sie heraus, warum nv-glx geladen wird

Viel Glück!

ckhan
quelle
Die Computer befinden sich bereits im selben Netzwerk, aber wir möchten all unsere Pavillon-Maschinen irgendwann in einen Serverschrank verlegen, haben aber immer noch die Visualisierung der Software zur Verfügung, weshalb ich mich mit SSH-Tunneling befasse. Wenn Sie nicht sagen, dass sie im selben Netzwerk sind, können Sie eine andere Konfiguration vornehmen, die SSH nicht erforderlich macht (ich vermute, Sie richten ein verrücktes xhost / client-Setup ein, ich weiß nicht viel über X11).
Doug Stephen
Keine Notwendigkeit für ssh - Wenn dies Ihr ganzes privates Netzwerk von vertrauenswürdigen Systemen ist, versuchen Sie es xhost +auf Ihrem lokalen Computer und setzen Sie Ihr DISPLAY auf dem Remote-System auf "ip-or-name-of-local: 0"
ckhan
1
Ich konnte nicht zur gazeboArbeit gehen, markiere dies jedoch als akzeptierte Antwort, da Ihre Vorschläge technisch korrekt waren. Ich kann glxdemomit all Ihren Vorschlägen tunneln (ssh und xserver / xclient über das Netzwerk), aber Gazebo selbst scheint keine verzweigten Codepfade zu erstellen, und es wird davon ausgegangen, dass es nicht in dieser seltsamen Konfiguration ausgeführt wird. Vielen Dank!.
Doug Stephen
Es gibt ein Gazebo-Web und es ist wirklich erstaunlich, dass Sie einen Gazebo-Server auf einem Remote-Computer (sogar WAN) starten, mit ssh tunneln und Ihren Browser öffnen können, um den Gazebo dort zu sehen. Beste Lösung aller Zeiten.
Mehdi