web-dev-qa-db-ja.com

OpenGLグラフィックスをVNCを使用してリモートで表示するにはどうすればよいですか?

OpenGLを使用してVNC経由でビューポートにモデルをレンダリングするプログラムを実行しようとして失敗しました。

Xlib:拡張 "GLX"がディスプレイ ":1.0"にありません。

すべてのグラフィックをリモートでレンダリングし、圧縮された画面グラブをディスプレイバッファーからローカルクライアントに送信するようにVNCを構成できることは私の理解でした。これは、ローカルクライアントでのGLX拡張の必要性を打ち消すようです。 VNCをこのように構成できますか、またその方法を簡単に説明できますか?

リモートホスト:

rHEL 5上のvncserver

ローカルクライアント:

Windows XP上のUltraVNC

25
Jared Brown

Virtual GL をご覧ください。

引用:「VirtualGLは、任意のUnixまたはLinuxリモートディスプレイソフトウェアに完全な3DハードウェアアクセラレーションでOpenGLアプリケーションを実行する機能を提供するオープンソースパッケージです。」

17
totaam

x11vnc を使用して、モニターが表示しているものすべてにリモートアクセスします。 x11vncはローカルX11サーバーと通信し、vncを介してサーバーからクライアントにフレームバッファーをコピーします。ローカルのX11サーバーはハードウェアアクセラレーションですべてをレンダリングするため、VNC経由でハードウェアアクセラレートされたOpenGLを取得します。これがx11vncの起動方法です。

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

ほとんどすべてのvncビューアが機能すると思いますが、turbovncまたはtigervncをお勧めします。私は最初にVirtualGLを試しましたが、それは正常に機能しますが、デスクトップ全体ではなく、個々のOpenGLアプリケーションでのみ機能します。

Xrandrを使用してディスプレイ/ vncの解像度を変更することも可能です。例えば。このような:

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

(利用可能なモードが十分でない場合、新しい解像度を追加することは可能ですが、それはここでは範囲外です。)

これで、完全にOpenGLハードウェアで高速化され、サイズ変更可能なVNCセッションができました。

14
Henrik

UltraVNCが使用する特別なビデオフックドライバーを無効にするか、TightVNCを使用します。

UltraVNCドライバーはパフォーマンスを向上させるために使用されるため、OpenGLなどのビデオカードで行われたあらゆる種類のビデオ処理をドロップします。

UltraVNCがデフォルトでこれをインストールするビデオドライバーは、OpenGLグラフィックスを表示できないようにします。ドライバを無効にすると、パフォーマンスが大幅に低下することに注意してください。また、OpenGLでレンダリングされたアイテムを表示すると、クライアントマシンで実行する作業が多くなり、必要な帯域幅が大幅に増えるため、両端でパフォーマンスが低下することに注意してください。フレームあたり4秒を超えることは期待しないでください(4 fpsではなく、0.25 fpsに近い)。

1
IceMage