Come è possibile visualizzare la grafica OpenGL in remoto tramite VNC?


24

Sto tentando di eseguire un programma che utilizza OpenGL per eseguire il rendering di un modello in una finestra tramite VNC senza successo.

Il messaggio di errore che ricevo è - Xlib: estensione "GLX" mancante sul display ": 1.0".

Ho capito che VNC può essere configurato per eseguire il rendering di tutta la grafica da remoto e inviare uno screen grab compresso dal buffer di visualizzazione al client locale. Ciò sembrerebbe negare la necessità di estensioni GLX sul client locale. VNC può essere configurato in questo modo e potresti descrivere brevemente come?

Host remoto:

vncserver su RHEL 5

Client locale:

UltraVNC su Windows XP


Il programma OpenGL funzionerà localmente sulla console RH # L5? Funzionerà in remoto tramite X-Windows? In caso contrario, non funzionerà su VNC.
kmarsh

2
Perché questo è un wiki della community?
Chris S,

Ho pensato che se fosse una comunità wiki la gente potrebbe modificare la domanda per renderla più rilevante per l'archiviazione.
Jared Brown,

Risposte:


17

Potresti voler guardare Virtual GL

Citazione: "VirtualGL è un pacchetto open source che offre a qualsiasi software di visualizzazione remota Unix o Linux la possibilità di eseguire applicazioni OpenGL con un'accelerazione hardware 3D completa"


14

Sto usando x11vnc per ottenere l'accesso remoto a tutto ciò che il monitor sta visualizzando. x11vnc comunica con il server X11 locale e copia il framebuffer dal server al client tramite vnc. Poiché il server X11 locale esegue il rendering di tutto con l'accelerazione hardware, ottengo OpenGL su VNC con accelerazione hardware, anche con tutti i fantastici effetti desktop. Ecco come inizio x11vnc:

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

Penso che quasi tutti i visualizzatori vnc funzionino, ma consiglierei turbovnc o tigervnc. Ho provato prima VirtualGL e funziona benissimo, ma non per l'intero desktop, solo per singole applicazioni OpenGL.

È anche possibile cambiare la risoluzione sul display / vnc usando xrandr. Ad esempio in questo modo:

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

(È possibile aggiungere nuove risoluzioni se le modalità disponibili non sono sufficienti, ma questo è al di fuori dell'ambito qui.)

Quindi ora ho una sessione VNC completamente accelerata e ridimensionabile hardware OpenGL.


1
Ho provato questo approccio con xfce4 e il frullatore su una macchina Tesla K80 GCE ... ha funzionato perfettamente. Gnome-shell non viene ancora visualizzato correttamente per qualche motivo, come sempre. askubuntu.com/questions/229989/…
Ray Foss del

1

Disabilita il driver speciale Video Hook utilizzato da UltraVNC o utilizza TightVNC.

Poiché il driver UltraVNC viene utilizzato per migliorare le prestazioni, elimina qualsiasi tipo di elaborazione video eseguita sulla scheda video, come OpenGL.

Il driver video che UltraVNC installa per impostazione predefinita, lo rende in modo che non possa visualizzare la grafica OpenGL. Si noti che la disabilitazione del driver ridurrà drasticamente le prestazioni. Si noti inoltre che durante la visualizzazione degli elementi resi in prestazioni OpenGL risentirà di entrambe le estremità, poiché la macchina client ha ora molto più lavoro da fare e la larghezza di banda richiesta è molto più elevata. Non aspettarti nulla di più di 4 secondi per frame (non 4 fps, più come 0,25 fps)


Quando dici di disabilitare l'hook video in UltraVNC ti riferisci al client locale? Non dovrebbe invece essere configurato il vncserver in esecuzione sull'host remoto?
Jared Brown,

No, intendo il client locale. UltraVNC include un driver video installato con esso. Salvo diversamente specificato, il driver video tenterà di elaborare tutto il video sull'estremità del client in modo che possa comprimerlo e trasmetterlo in streaming per l'uso in rete. A volte è possibile specificare nel visualizzatore che non si desidera utilizzare questa funzione, ma UltraVNC (almeno utilizzato) tende a ignorarlo.
IceMage,

Inoltre, remoto e locale dipendono dalla tua prospettiva. Quando dico locale, intendo davvero l'host (il computer che sta ascoltando nuove connessioni) e Remote significa che il computer sta effettuando la connessione. Lo correggerò per post futuri.
IceMage,

OK - Immagino che sto usando il gergo opposto. Quando ho installato il visualizzatore UltraVNC non credo che avesse un driver video installato. Il server UltraVNC che conosco lo fa, ma non lo sto usando. Sto usando vncserver su una macchina RHEL5 come host.
Jared Brown,

Quindi la mia vera domanda è: come faccio a configurare vncserver per non inviare comandi GLX ma piuttosto inviare semplicemente uno schermo compresso dal buffer di visualizzazione al visualizzatore UltraVNC?
Jared Brown,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.