Comment les graphiques OpenGL peuvent-ils être affichés à distance à l'aide de VNC?

24

J'essaie d'exécuter un programme qui utilise OpenGL pour restituer un modèle dans une fenêtre via VNC sans succès.

Le message d'erreur que je reçois est - Xlib: extension "GLX" manquante sur l'affichage ": 1.0".

J'ai cru comprendre que VNC peut être configuré pour rendre tous les graphiques à distance et envoyer une capture d'écran compressée du tampon d'affichage au client local. Cela semblerait annuler le besoin d'extensions GLX sur le client local. VNC peut-il être configuré de cette façon et pourriez-vous décrire brièvement comment?

Hôte distant:

vncserver sur RHEL 5

Client local:

UltraVNC sur Windows XP

Jared Brown
la source
Le programme OpenGL fonctionnera-t-il localement sur la console RH # L5? Cela fonctionnera-t-il à distance via X-Windows? Sinon, cela ne fonctionnera pas sur VNC.
kmarsh du
2
Pourquoi est-ce un wiki communautaire?
Chris S
Je pensais que s'il s'agissait d'un wiki communautaire, les gens pourraient modifier la question pour la rendre plus pertinente pour l'archivage.
Jared Brown

Réponses:

17

Vous voudrez peut-être regarder Virtual GL

Citation: "VirtualGL est un package open source qui donne à n'importe quel logiciel d'affichage à distance Unix ou Linux la possibilité d'exécuter des applications OpenGL avec une accélération matérielle 3D complète"

totaam
la source
14

J'utilise x11vnc pour accéder à distance à tout ce que le moniteur affiche. x11vnc parle au serveur X11 local et copie le framebuffer du serveur au client via vnc. Étant donné que le serveur X11 local restitue tout avec une accélération matérielle, j'obtiens une accélération matérielle OpenGL sur VNC, même avec tous les effets de bureau sympas. Voici comment je démarre x11vnc:

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

Je pense que presque n'importe quel visualiseur vnc fonctionne, mais je recommanderais turbovnc ou tigervnc. J'ai d'abord essayé VirtualGL, et cela fonctionne bien, mais pas pour l'ensemble du bureau, uniquement pour les applications OpenGL individuelles.

Il est même possible de changer la résolution sur l'affichage / vnc en utilisant xrandr. Par exemple, comme ceci:

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

(Il est possible d'ajouter de nouvelles résolutions si les modes disponibles ne suffisent pas, mais cela sort du cadre ici.)

Alors maintenant, j'ai une session VNC accélérée et redimensionnable entièrement OpenGL.

Henrik
la source
1
J'ai essayé cette approche avec xfce4 et blender sur une machine Tesla K80 GCE ... cela a fonctionné parfaitement. Gnome-shell ne s'afficherait toujours pas correctement pour une raison quelconque, comme toujours. askubuntu.com/questions/229989/…
Ray Foss
1

Désactivez le pilote spécial Video Hook qu'UltraVNC utilise ou utilisez TightVNC.

Étant donné que le pilote UltraVNC est utilisé pour améliorer les performances, il supprime tout type de traitement vidéo effectué sur la carte vidéo, comme OpenGL.

Le pilote vidéo qu'UltraVNC installe cela par défaut, il le fait de sorte qu'il ne peut pas afficher les graphiques OpenGL. Notez que la désactivation du pilote diminuera considérablement les performances. Notez également que l'affichage des éléments rendus en OpenGL souffrira aux deux extrémités, car la machine cliente a maintenant beaucoup plus de travail à faire et la bande passante requise est beaucoup plus élevée. Ne vous attendez à rien de plus de 4 secondes par image (pas 4 images par seconde, plutôt 0,25 image par seconde)

IceMage
la source
Lorsque vous dites désactiver le hook vidéo dans UltraVNC, vous faites référence au client local? Le serveur vnc exécuté sur l'hôte distant ne devrait-il pas être configuré à la place?
Jared Brown
Non, je veux dire le client local. UltraVNC inclut un pilote vidéo qui est installé avec. À moins que vous ne disiez explicitement le contraire, le pilote vidéo tentera de traiter toute la vidéo du côté client afin de pouvoir la compresser et la diffuser pour une utilisation sur le réseau. Parfois, il est possible de spécifier sur la visionneuse que vous ne souhaitez pas utiliser cette fonctionnalité, mais UltraVNC (au moins utilisé pour) a tendance à l'ignorer.
IceMage
En outre, les sites distants et locaux dépendent de votre point de vue. Quand je dis local, je veux vraiment dire l'hôte (l'ordinateur qui écoute les nouvelles connexions) et distant, c'est-à-dire l'ordinateur qui établit la connexion. Je vais corriger cela pour les prochains articles.
IceMage
OK - je suppose que j'utilise le jargon opposé. Lorsque j'ai installé la visionneuse UltraVNC, je ne pense pas qu'elle ait installé un pilote vidéo. Le serveur UltraVNC que je connais le fait, mais je ne l'utilise pas. J'utilise vncserver sur une machine RHEL5 en tant qu'hôte.
Jared Brown
Donc, ma vraie question est, comment configurer vncserver pour ne pas envoyer de commandes GLX mais plutôt envoyer simplement un écran compressé du tampon d'affichage au visualiseur UltraVNC?
Jared Brown