Bagaimana grafik OpenGL dapat ditampilkan dari jarak jauh menggunakan VNC?

24

Saya mencoba menjalankan program yang menggunakan OpenGL untuk membuat model dalam viewport melalui VNC tidak berhasil.

Pesan kesalahan yang saya terima adalah - Xlib: ekstensi "GLX" hilang di layar ": 1.0".

Ini adalah pemahaman saya bahwa VNC dapat dikonfigurasi untuk membuat semua gambar dari jarak jauh dan mengirim layar ambil terkompresi dari buffer tampilan ke klien lokal. Ini tampaknya meniadakan kebutuhan untuk ekstensi GLX pada klien lokal. Bisakah VNC dikonfigurasikan dengan cara ini dan dapatkah Anda menjelaskan secara singkat caranya?

Host jarak jauh:

vncserver di RHEL 5

Klien lokal:

UltraVNC pada Windows XP

Jared Brown
sumber
Apakah program OpenGL bekerja secara lokal di konsol RH # L5? Apakah ini akan bekerja jarak jauh melalui X-Windows? Jika tidak, itu tidak akan berfungsi pada VNC.
kmarsh
2
Mengapa ini Wiki Komunitas?
Chris S
Saya pikir jika itu adalah komunitas wiki, orang dapat mengedit pertanyaan untuk membuatnya lebih relevan untuk arsip.
Jared Brown

Jawaban:

17

Anda mungkin ingin melihat Virtual GL

Kutipan: "VirtualGL adalah paket sumber terbuka yang memberikan Unix atau Linux remote display kemampuan untuk menjalankan aplikasi OpenGL dengan akselerasi perangkat keras 3D lengkap"

totaam
sumber
14

Saya menggunakan x11vnc untuk mendapatkan akses jarak jauh ke monitor apa pun yang ditampilkan. x11vnc berbicara ke server X11 lokal dan menyalin framebuffer dari server ke klien melalui vnc. Karena server X11 lokal membuat semuanya dengan akselerasi perangkat keras, saya mendapatkan akselerasi perangkat keras OpenGL melalui VNC, bahkan dengan semua efek desktop keren. Ini adalah bagaimana saya memulai x11vnc:

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

Saya pikir hampir semua penampil vnc berfungsi, tetapi saya akan merekomendasikan turbovnc atau tigervnc. Saya mencoba VirtualGL terlebih dahulu, dan berfungsi dengan baik, tetapi tidak untuk seluruh desktop, hanya untuk aplikasi OpenGL individual.

Bahkan dimungkinkan untuk mengubah resolusi pada layar / vnc menggunakan xrandr. Misal seperti ini:

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

(Dimungkinkan untuk menambahkan resolusi baru jika mode yang tersedia tidak cukup, tapi itu di luar cakupan di sini.)

Jadi sekarang saya memiliki perangkat keras OpenGL yang sepenuhnya dipercepat dan sesi VNC resizable.

Henrik
sumber
1
Mencoba pendekatan ini dengan xfce4 dan blender pada mesin Tesla K80 GCE ... ini bekerja dengan sempurna. Gnome-shell masih tidak akan ditampilkan dengan benar karena alasan tertentu, seperti biasa. askubuntu.com/questions/229989/…
Ray Foss
1

Nonaktifkan driver Video Hook khusus yang digunakan UltraVNC, atau gunakan TightVNC.

Karena driver UltraVNC digunakan untuk meningkatkan kinerja, ia menjatuhkan segala jenis pemrosesan video yang dilakukan pada Kartu Video, seperti OpenGL.

Driver video yang UltraVNC menginstal ini secara default, itu membuatnya sehingga tidak dapat menampilkan grafis OpenGL. Perhatikan bahwa menonaktifkan driver akan menurunkan kinerja secara drastis. Juga perhatikan bahwa saat menampilkan item yang dirender dalam kinerja OpenGL akan mengalami kerugian di kedua ujungnya, karena mesin klien sekarang memiliki lebih banyak pekerjaan yang harus dilakukan, dan bandwidth yang dibutuhkan jauh lebih tinggi. Jangan mengharapkan apapun lebih dari 4 detik per frame (bukan 4 fps, lebih seperti 0,25 fps)

IceMage
sumber
Ketika Anda mengatakan menonaktifkan kait video di UltraVNC Anda merujuk ke klien lokal? Bukankah vncserver yang berjalan pada host jarak jauh harus dikonfigurasi?
Jared Brown
Tidak, maksud saya klien lokal. UltraVNC termasuk driver video yang diinstal dengannya. Kecuali jika Anda secara eksplisit mengatakan sebaliknya, driver video akan berusaha memproses semua video di sisi klien sehingga dapat mengompres dan mengalirkannya untuk digunakan melalui jaringan. Terkadang dimungkinkan untuk menentukan pada pemirsa bahwa Anda tidak ingin menggunakan fitur ini, tetapi UltraVNC (setidaknya dulu) memiliki kecenderungan untuk mengabaikan ini.
IceMage
Juga, jarak jauh dan lokal tergantung pada perspektif Anda. Ketika saya mengatakan lokal, saya benar-benar maksud Host (komputer yang mendengarkan koneksi baru), dan Remote berarti komputer membuat koneksi. Saya akan memperbaikinya untuk posting selanjutnya.
IceMage
OK - saya kira saya menggunakan istilah yang berlawanan. Ketika saya menginstal penampil UltraVNC saya tidak percaya itu memiliki driver video yang diinstal. Server UltraVNC yang saya tahu tidak, tetapi saya tidak menggunakannya. Saya menggunakan vncserver pada mesin RHEL5 sebagai tuan rumah.
Jared Brown
Jadi pertanyaan sesungguhnya saya adalah, bagaimana cara mengkonfigurasi vncserver untuk tidak mengirim perintah GLX melainkan mengirim hanya layar terkompresi dari tampilan buffer untuk penampil UltraVNC?
Jared Brown