X11 przekierowuje aplikację OpenGL z komputera z kartą NVIDIA na komputer z kartą AMD

15

Jestem zainteresowany przekazywaniem sesji X11 przez SSH, aby uruchomić zdalny proces korzystający z OpenGL (konkretnie altana dla każdego znajomego).

Problem, na który chyba wpadam, polega na tym, że altana ulega awarii z powodu niedopasowania kart graficznych; nie może znaleźć rozszerzeń „NV-GLX”. Dokładny wynik błędu:

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

Zdalny komputer działa z kartą NVIDIA, a mój komputer lokalny korzysta z karty AMD.

Przetestowałem przekazywanie altanki X11 między dwiema maszynami z kartami NVIDIA. Działa dobrze.

O ile wiem, wydaje się, że dzieje się jedna z trzech rzeczy:

  1. Robię coś złego
  2. To, co chcę zrobić, jest niemożliwe
  3. Altana nie buduje w sposób agnostyczny z rozgałęzionymi ścieżkami kodowymi dla różnych urządzeń; dostajesz to, co wygląda twój system podczas kompilacji.

Na zdalnym komputerze działa Ubuntu, a na moim komputerze lokalnym jest Mac z systemem 10.8.2; Wiem już, że mam poprawnie skonfigurowane przekazywanie x11 do normalnego użytku, ponieważ mogę dobrze otworzyć Xclock w XQuartz. Rozwiązanie (jeśli istnieje) najlepiej również działa w przypadku innych systemów operacyjnych, w tym Windows za pomocą WinSCP.

Doug Stephen
źródło

Odpowiedzi:

9

Kilka uwag z artykułu w Wikipedii GLX :

GLX [to] Rozszerzenie protokołu X, który pozwala klientowi (aplikacji OpenGL) wysyłać polecenia renderowania 3D do serwera X (oprogramowania odpowiedzialnego za wyświetlanie). Oprogramowanie klienta i serwera może działać na różnych komputerach.

i

Jeśli klient i serwer działają na tym samym komputerze i dostępna jest przyspieszona karta graficzna 3D z odpowiednim sterownikiem, DRI może ominąć dwa poprzednie komponenty. W takim przypadku aplikacja kliencka może następnie uzyskać bezpośredni dostęp do sprzętu wideo za pośrednictwem kilku warstw API.

Uważam, że pierwszy punkt odpowiada na pytanie, czy jest to możliwe, czy nie: na pewno powinno być możliwe. Drugi może wyjaśnić, dlaczego twój program kliencki nalega na użycie funkcji lokalnego serwera X (sterownik NV GLX) - być może myśli, że localhost:10.0to ten sam komputer, i dlatego próbował nawiązać połączenie.

Rzeczy do wypróbowania:

  1. Zamiast tego gazebospróbuj glxdemo.
  2. Jeśli to możliwe, uzyskaj dwa komputery w tej samej sieci i usuń ssh ze zdjęcia
  3. Wielka broń: stracetwoje gazebowywołanie i dowiedz się, dlaczego ładuje się NV-GLX

Powodzenia!

ckhan
źródło
Komputery są już w tej samej sieci, ale w pewnym momencie chcielibyśmy przenieść wszystkie nasze maszyny do altanki do szafy serwerowej, ale nadal mamy do dyspozycji wizualizacje oprogramowania, dlatego szukam tunelowania SSH. Chyba że mówisz, że posiadanie ich w tej samej sieci pozwala na inną konfigurację, która sprawia, że ​​SSH nie jest konieczny (domyślam się, aby skonfigurować szaloną konfigurację xhost / klienta, nie wiem dużo o X11).
Doug Stephen
Nie potrzebujesz ssh - jeśli to cała Twoja prywatna sieć zaufanych systemów, spróbuj xhost +na lokalnym komputerze i ustaw DISPLAY w systemie zdalnym na „ip-or-name-of-local: 0”
ckhan
1
Nie mogłem zabrać się gazebodo pracy, ale zaznaczam to jako zaakceptowaną odpowiedź, ponieważ Twoje sugestie były technicznie poprawne. Jestem w stanie tunelować glxdemoprzy użyciu wszystkich sugestii (ssh i xserver / xclient przez sieć), ale sama Gazebo po prostu wydaje się nie budować rozgałęzionych ścieżek kodu i zakłada, że ​​nie będzie działać w tej dziwnej konfiguracji. Dzięki!.
Doug Stephen
Jest tam altanka i to jest naprawdę niesamowite, możesz uruchomić serwer altany na zdalnej maszynie (nawet WAN), tunelować za pomocą ssh i otworzyć przeglądarkę, aby zobaczyć altanę. Najlepsze rozwiązanie w historii.
Mehdi,