次の目標を前提として、リモートサーバーでホストされているX11アプリケーションを実行するにはどうすればよいですか。
GLX
を使用するOpenGLアプリが含まれます。ここでスーパーユーザーに多くのアドバイスが浮かんでいるのを見てきましたが、その多くは部分的な修正であるか、単に悪いものです。
X11-Forwarding
が出ています:特定のアプリ、特にGLX拡張機能に依存しているアプリを実行できません。LIBGL_ALWAYS_INDIRECT=1
私にはうまくいきません。Xephyr
も出ています。現在、GLXはサポートされていませんが、開発ツリーでいくつかのGLXが機能するのを見てきました。おそらく将来的には、それが最もクリーンな方法になるでしょう。xmove
も出ています。それ以上検討するには古すぎます。編集:私は週末にいくつかの提案を解決するために戦いました、そしてxpra
が最もうまくいくものです。私は以下の答えで私のセットアップを説明しました、そしてそれが他の誰かに役立つことを願っています。
Xpra (前述のように ここ )は私が望むことをします。これにより、任意のXアプリケーションを実行できます。これらのアプリケーションは、同じコンピューター上または別のマシン上の複数のクライアントに転送できます。 OpenGLアプリの実行もサポートしており、最後のクライアントが切断された後もアプリの実行を継続できるため、後で再接続することができます。
xpra
は、クライアントとサーバーの2つの部分に分かれています。サーバーを起動するには、リモートマシンで次を実行します。
$ xpra start :100
これにより、新しいXディスプレイでxpra
が起動します。 (プロキシで使用する 回避策 があります。)
アプリケーションをxpra
で制御するには、次のようにxpra
サーバーと同じディスプレイで実行します。
$ export DISPLAY=:100
$ firefox&
$ blender&
...
これはすべて、ssh接続(X11-Forwardingの有無にかかわらず)を介して問題なく実行できます。
クライアントを起動するには、次のいずれかを実行します。
$ ssh -X user@remotehost
<gain remote connection>
$ xpra attach :100
または
$ xpra attach ssh:user@remotehost:100
後者では、xpra
クライアントをローカルマシンにインストールする必要があることに注意してください。前者はそうではありません。
xpra
クライアントは、ウィンドウマネージャーのタスクバー/パネルにアイコンを配置して、クライアントを切断できるようにします。 (または、サーバーを強制終了しないように注意している限り、強制終了することもできます。)xpra
サーバーがまだ実行されている限り、後で再接続できます。ホスト上で単一のxpra
サーバーを実行している場合は、表示番号を省略してもかまいません。xpra attach
がそれを認識します。
xpra
の非常に優れた機能の1つは、既存のディスプレイでサーバーを起動できることです。これにより、xpra
サーバーがクラッシュした場合にセッションを回復できます(そのディスプレイ上のXサーバーがまだ実行されている限り)。これを行うには、
$ xpra start --use-display :100
警告:
xpra
はウィンドウマネージャーとして実行されます。他のウィンドウマネージャーへの埋め込みではかなりうまく機能しますが、Xアプリ自体ではあまりうまく機能しません。たとえば、 rxvt-unicode
タイトルバーを削除します。また、ドロップダウンボックスやメニューが画面外に表示されるなど、画面上で操作する必要のあるスペースの量もウィンドウに通知されません。ただし、後者の問題は構成を修正することだと思います。
キーが繰り返されます。頻繁に。これはxpra attach --no-keyboard-sync
を使用して解決できますが、manページでは、これが特定のゲームではうまく機能しないと警告しています。私は、これらのゲームの1つを使用したいと思っていないので、指を交差させ続けています。
これらの理由から、Xephyr
はウィンドウマネージャーではなくXサーバーとして実行されるため、(GLXをサポートすると)より良いソリューションになる可能性があります。ただし、以前に切断されたセッションの再開をサポートするかどうかは調査していません。