X11 transfert d'une application OpenGL d'une machine exécutant une carte NVIDIA vers une machine avec une carte AMD

15

Je souhaite transmettre une session X11 via SSH, afin de lancer un processus distant qui utilise OpenGL (en particulier, un gazebo pour toute personne familière.)

Le problème que je semble rencontrer est que le gazebo se bloque en raison d'un décalage dans les cartes graphiques; il ne trouve pas d'extensions "NV-GLX". La sortie d'erreur exacte:

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

La machine distante fonctionne avec une carte NVIDIA et ma machine locale utilise une carte AMD.

J'ai testé le transfert X11 de gazebo entre deux machines avec des cartes NVIDIA. Cela fonctionne très bien.

Autant que je sache, il semble que trois choses se produisent:

  1. Je fais quelque chose de mal,
  2. Ce que je veux faire est impossible,
  3. Gazebo ne se construit pas de manière agnostique avec des chemins de code de branchement pour différents matériels; quel que soit votre système lors de sa construction, c'est ce que vous obtenez.

La machine distante exécute Ubuntu et ma machine locale est un Mac exécutant 10.8.2; Je sais déjà que le transfert x11 est correctement configuré pour une utilisation normale, car je peux obtenir que des choses comme xclock s'ouvrent très bien dans XQuartz. La solution (si elle existe) fonctionnerait également de préférence pour d'autres systèmes d'exploitation, y compris Windows sur WinSCP.

Doug Stephen
la source

Réponses:

9

Quelques notes de l'article de GLX Wikipedia :

GLX [est] Une extension du protocole X, qui permet au client (l'application OpenGL) d'envoyer des commandes de rendu 3D au serveur X (le logiciel responsable de l'affichage). Les logiciels client et serveur peuvent s'exécuter sur des ordinateurs différents.

et

Si le client et le serveur s'exécutent sur le même ordinateur et qu'une carte graphique 3D accélérée utilisant un pilote approprié est disponible, les deux anciens composants peuvent être contournés par DRI. Dans ce cas, l'application cliente est alors autorisée à accéder directement au matériel vidéo via plusieurs couches API.

Je crois que le premier point répond à votre question de savoir si c'est possible ou non: cela devrait certainement être possible. Le second peut expliquer pourquoi votre programme client insiste pour utiliser les fonctionnalités de son serveur X local (le pilote NV GLX) - il pense peut-être qu'il localhost:10.0s'agit du même ordinateur et a donc tenté une connexion directionnelle.

Choses à essayer:

  1. Au lieu de gazebo, essayez glxdemo.
  2. Si possible, mettez les deux ordinateurs sur le même réseau et retirez ssh de l'image
  3. Le gros pistolet: stracevotre gazeboinvocation et découvrez pourquoi il charge nv-glx

Bonne chance!

ckhan
la source
Les ordinateurs sont déjà sur le même réseau, mais nous aimerions déplacer toutes nos machines gazebo dans un placard de serveur à un moment donné, mais nous avons toujours les visuels du logiciel à notre disposition, c'est pourquoi je regarde dans le tunneling SSH. À moins que vous ne disiez que les avoir sur le même réseau permet une configuration différente qui rend SSH inutile (je suppose que vous devez configurer une configuration folle de xhost / client, je ne sais pas grand chose sur X11).
Doug Stephen
Pas besoin de ssh - si c'est tout votre réseau privé de systèmes de confiance, essayez xhost +sur votre machine locale et réglez votre AFFICHAGE sur le système distant sur 'ip-or-name-of-local: 0'
ckhan
1
Je n'ai pas pu me rendre gazeboau travail, mais je marque cela comme la réponse acceptée car vos suggestions étaient techniquement correctes. Je suis capable de tunneler en glxdemoutilisant toutes les suggestions que vous avez faites (ssh et xserver / xclient sur le réseau) mais Gazebo lui-même ne semble pas construire de chemins de code de branchement et il suppose qu'il ne sera pas exécuté dans cette configuration bizarre. Merci!.
Doug Stephen
Il y a un gazebo web et c'est vraiment incroyable, vous pouvez démarrer un serveur de gazebo sur une machine distante (même WAN), tunneler avec ssh et ouvrir votre navigateur pour y voir un gazebo. La meilleure solution de tous les temps.
Mehdi