web-dev-qa-db-ja.com

同じホスト上でウィンドウをあるXスクリーンから別のXスクリーンに移動できますか?

3台のモニターがセットアップされたXFCE 4.12を、同じコンピューター上の2つのX画面と2つのビデオカードに実行しています。 2つのモニターがnvidia twinview機能を使用して単一のX画面を形成します。これは、Xorg構成のDevice0上のScreen0です。 3番目のモニターは、Xorg構成のDevice1のScreen1である2番目の画面用です。 Screen0のモニター間でウィンドウをうまくドラッグできます。 Screen0とScreen1の間でマウスを自由に移動することもでき、クリップボードのデータも2つのX画面間で転送されます。

これらのX画面はどちらも、独自のビューポートのセットを持つ独立したデスクトップとして機能します。私はこの方法が好きで、片側を自動的に「固定」するのに便利です。ただし、あるX画面でプログラムを起動すると、ドラッグするだけでは別のX画面に移動できません。他の画面でそのプログラムを実行したい場合は、その画面で再起動する必要があります。

私の質問は、いくつかのコマンドまたはXウィンドウの他の機能を使用して、プログラムの実行中に他の画面にプログラムを移動する方法があるかどうかです。ありがとう。

pdate:この質問について賞金を獲得するつもりですが、これについてしばらく考えていました。賞金を獲得するには、証拠としていくつかの引用を提供する必要があります。

16
deltaray

アプリケーションが最終的に表示されるXサーバーで直接開始されたXアプリケーションを移動することはできません。これは、Xクライアントが「存続期間中に開始されたXサーバー(Xディスプレイ)に関連付けられているためです」[ 1 ]これは、Xサーバー間で簡単に転送できないクライアントのウィンドウについてXサーバーが保持するメタデータに関係している可能性が最も高いです。

個別に構成された画面(XineramaやTwinviewなどの拡張機能を使用していない場合)にも、マルチスクリーンサポートが明示的に記述されていないプログラムに同じことが当てはまります。「この構成では、ウィンドウを画面間で移動することはできません。マルチスクリーンをサポートするGIMPやEmacsのようないくつかの特別なプログラム。 "[ 2 ]

理論的には、アプリケーションがXサーバーのコンテキストスイッチに対応するように設計されている場合、新しいディスプレイ/画面番号を提供し、そのウィンドウの状態を保存し、新しいXサーバー/画面に接続して、そのウィンドウを復活させることができますが、アプリケーションはこのように設計され、必然的に大量のボイラープレートまたはこれを何らかの形で促進するライブラリーを含める必要があります。

GNU screenをコンソールアプリケーションとに使用できるのと同じように、Xクライアントと表示中のXサーバーの間でプロキシとして機能できる他のアプリケーションを使用するのがおそらく最良のオプションです。 XmoveとXpra [& 4 ]は、これを行うために最も広く使用されている実装のようです。これらを使用する場合の注意点は、開始するアプリケーションがXmoveまたはXpraをXサーバーとして登録し、異なるディスプレイサーバー間でコンテキストを切り替えられるようにします。

最後に、SuperUserに関する別の質問があります。これは、少し異なる目的で同様の質問をすることです(クライアントの意図的な切断/再接続ではなく、Xクラッシュ後にXに再接続します)[ 5 ]

13
Benjamin