
OpenGLを利用してリモートプロセスを開始するためにSSHを介してX11セッションを転送することに興味があります。漏斗おなじみの人のために。 )
私が経験している問題は、グラフィックカードの不一致によってGazeboがクラッシュすることです。 "NV-GLX"拡張子が見つかりません。正確なエラー出力:
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
リモートコンピュータはNVIDIAカードとして動作し、ローカルコンピュータはAMDカードを使用します。
私はNVIDIAカードを使用する2台のコンピュータ間でGazeboのX11転送をテストしました。それは非常にうまく動作します。
私が知っているところによると、次の3つのうちの1つが起こっているようです。
- 私は何か間違っていました。
- 私がしたいことは不可能です。
- Gazeboは、さまざまなハードウェアへの分岐コードパスを使用して不可知的な方法で構築しません。構築時にシステムの様子を得ることができます。
リモートコンピュータはUbuntuを実行し、私のローカルコンピュータは10.8.2を実行しているMacです。 XQuartzでxclockのような機能をオンにすることができるので、通常の使用のためにx11転送が正しく設定されていることはすでに知っています。このソリューション(存在する場合)は、WinSCPベースのWindowsを含む他のオペレーティングシステムでも最適です。
答え1
一部のコメントは以下から来ました。GLX ウィキペディア記事:
GLXは、クライアント(OpenGLアプリケーション)がXサーバー(ディスプレイを担当するソフトウェア)に3Dレンダリングコマンドを送信できるようにするXプロトコルの拡張です。クライアントとサーバーソフトウェアは、異なるコンピュータで実行できます。
そして
クライアントとサーバーが同じコンピュータで実行され、適切なドライバを含むアクセラレーション3Dグラフィックスカードを使用できる場合、DRIは最初の2つのコンポーネントをバイパスできます。この場合、クライアントアプリケーションは複数のAPIレイヤを介してビデオハードウェアに直接アクセスできます。
私は最初のポイントがこれが可能かどうかについてのあなたの質問に答えると信じています。それは確かに可能でなければなりません。クライアントプログラムがローカルXサーバー(NV GLXドライバ)の機能を使用する必要がある理由の2番目の可能な説明は、おそらく同じシステムであると考えてlocalhost:10.0
直接接続を試みることができます。
試してみる価値があるもの:
- 代わりに
gazebo
試してみてくださいglxdemo
。 - 可能であれば、両方のコンピュータを同じネットワーク上に置き、SSHを除外してください。
- 大きな銃:
strace
電話gazebo
してnv-glxがロードされる理由を学びます。
頑張ってください!