別のモニターでウィンドウを開くにはどうすればいいですか?

複数のモニタを使用しているので、これまでウィンドウを手動でドラッグしてきました。デュアルヘッド設定で特定の画面にウィンドウを開く方法はありますか? (複数のXサーバーディスプレイと混同しないでください。)

SCREEN = 2 firefox または open-in-screen 2 firefox などです。

問題であれば、私の環境はKWinウィンドウマネージャを使ったKDEです。 KWinウィンドウのルールはtitleのようないくつかのプロパティにしかマッチできませんが、filterとしての環境変数を見つけることができませんでした。

セカンダリディスプレイはプライマリ画面を拡張します。

$ xrandr -q
Screen 0: minimum 320 x 200, current 3520 x 1080, maximum 32767 x 32767
LVDS1 connected 1600x900+0+0 (normal left inverted right x axis y axis) 382mm x 214mm
   1600x900       60.1*+
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected 1920x1080+1600+0 (normal left inverted right x axis y axis) 477mm x 268mm
   1920x1080      60.0*    50.0     59.9  
   1920x1080i     60.1     50.0     60.0  
   1680x1050      59.9  
   1280x1024      75.0     60.0  
   1440x900       59.9  
   1280x960       60.0  
   1280x720       60.0     50.0     59.9  
   1024x768       75.1     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   720x576        50.0  
   720x480        60.0     59.9  
   640x480        75.0     72.8     66.7     60.0     59.9  
   720x400        70.1  
DP1 disconnected (normal left inverted right x axis y axis)
7
奇妙なことに、私は今日早くwmctrlについての投稿を見ましたが、それをテストする機会がありませんでした。なぜそれが削除されたのですか?
追加された 著者 KDM,
kstart についての素晴らしいヒント、私もそれを知りたいと思いました。コマンドは次のとおりです。 kstart --desktop $ N firefox ここで、 $ N は1から仮想デスクトップの総数までの間の数字です。
追加された 著者 KDM,
通常は kstart を使用することをお勧めしますが、 kstart は特定のデスクトップの定義のみをサポートし、アプリケーションを起動する画面はサポートしないようです。おそらく bugs.kde.org のWISHLISTバグレポートに値するでしょう。
追加された 著者 Kevin Rutan,
wmctrlの投稿についてはまったくわかりませんでした。
追加された 著者 Kevin Rutan,
kstartに関しては、bugs.kde.orgに bugreport でこれを求めている特徴。
追加された 著者 Kevin Rutan,

5 答え

いいえ、直接できません。 Xアーキテクチャーでは、2つの物理モニターはアプリケーションからは識別できません。表示されているワークスペースのどの領域がどのモニターに対応しているかを判断してから、ウィンドウを正しいオフセットに配置することによってのみ、この抽象化を回避できます。

賢明なツールキットは -geometry オプションをサポートします。これはあなたのアプリケーションが特定の位置に置かれることを要求することを可能にします。このオプションを利用できない場合、EWMH/NetWM互換のXウィンドウマネージャを使用して既存のウィンドウを移動したりサイズ変更したりする場合は wmctrl を使用できます(wmctrl(1)を参照)。 code> -r および -e )。私は devilspie を使っていくつかのウィンドウを強制的に配置していますが、もちろんあなたが選んだウィンドウマネージャにはウィンドウの配置を強制する独自の機能があるかもしれません。

devilspie allows to apply certain actions on X windows and can use X window properties to discern different windows and applications. The key rule for you would be geometry "x++".

Yet, you always need to do the calculations of when and where another physical monitor begins yourself. But this is not too hard and xrandr does tell you how and where it uses monitors in the form of "x++ on each line staring with an output name.

実装方法は異なる可能性があるため(そしてそうするため!)、絶対にうまくいくという方法はありません。 wmctrl は通常、ウィンドウのタイトルに基づいてターゲットを識別します。 devilspie はそのクラスを参照することもできますが、Xウィンドウクラスを指定できるツールキットは知っていますが、そのジオメトリはわかりません。

もちろん、2つの xephyr インスタンスを起動して、一方を左側の画面に、もう一方を右側の画面に表示してから、環境変数 DISPLAY を使用して画面をアドレス指定することができます。その他の欠点

理論的には、ウィンドウの配置を管理する権限はウィンドウマネージャです。したがって、あなたのウィンドウマネージャができないことが欲しいなら、それは厄介なものになるでしょう、そしてそれがこれを達成するための一般的な方法がない理由でもあります。

しかし、あなたの具体的なユースケースがあなたのアンドロイドエミュレータであるなら...それはシェルで SCREEN = n fooapp を指定するオプションを求めることと非常に異なっています、そして devilspie あなたが探しているものである。ヒント:アプリケーションをウィンドウクラスで識別するのが最善の方法です。

4
追加された
あなたの答えが問題をよりよく説明している間、そうでなければSEがトップ投票の答えにそれを与えるので、私はあなたに賞金を授けました。現在の答えはまだ満足のいくものではありません。
追加された 著者 KDM,
これが簡単な機能ではない理由を説明していただきありがとうございます。 KWinには別のスクリーンに配置することを強制するウィンドウ規則もあります(これが私が今使っているものです)。 SCREEN = x app にはデフォルトの機能はありませんが、この方法でウィンドウプロパティを追加してKWinでフィルタリングできるようにすることは可能ですか?
追加された 著者 KDM,
理論的にはそうですが、私はこれに対する既存の解​​決策を知りません。プロパティを追加することはできませんが、既存のプロパティを変更することはできます。したがって、kwinが検出できるウィンドウクラスに文字列を追加するだけで済みます。
追加された 著者 PyRulez,

これはウィンドウマネージャ特有の解決策です。これはKDEのデフォルトのウィンドウマネージャであるkwinでそれを行う方法です。

If you right click on the application Title Bar and select more settings -> special application settings.

ウィンドウマッチングタブに移動します。 [ウィンドウプロパティの検出]ボタンをクリックしてください。次にマウスカーソルでアプリケーションのメインウィンドウをクリックします。ウィンドウクラスなどを選択し、ウィンドウの位置情報なども取得します。

次にサイズと位置タブをクリックしてください。両方の右側にあるボックス位置とボックスサイズとドロップダウンボックスをクリックし、覚えておくように設定します。

そしてOKをクリックします。

次回アプリを実行するときは、同じサイズで同じモニターに表示されているはずです。

私はKDEでこれを使って3モニタのセットアップで私の左モニタのuRxvt端末を開くと毎回うまくいきます。

がんばろう。

3
追加された
これが私が今やっているやり方です、私は環境変数を使うもっと直接的な方法があることを望んでいました。
追加された 著者 KDM,
これはKDE KWinユーザーの正解です。
追加された 著者 iLikeDirt,

これはデュアルモニタの設定によって異なります。

XINERAMAを使用して両方のディスプレイをXのように見せる場合は、 -geometry オプションを使用して、アプリケーションに特定の場所に表示させるようにします。ディスプレイを別の画面として設定している場合は、それを実現するために DISPLAY を使用します。

これらを試してみてください。

$ DISPLAY=0.0 xterm &
$ DISPLAY=0.1 xterm &

モニタが画面0と1の場合、これは各モニタにxtermを生成するはずです。

3
追加された
ケーシー、私が位置づけようとしているアプリケーションはそのようなオプションをサポートしていません(android emulator 、QEMUベース)。私のマウスカーソルが置かれている場所にプログラムが開きます。
追加された 著者 KDM,
私はすでにこれを試しましたが、この設定は私には適用されません、1つのスクリーンは別のスクリーンから左に配置されます。質問を更新します。
追加された 著者 KDM,
あなたはそれをサポートするアプリにジオメトリオプションを使用してみましたか? X座標> 1600を与えることは第二モニタースペースにアプリを配置するはずです。私の経験のkwinや -geometry のように、kwinの外側で試してみることもできます(それが機能するかどうかを確認するためだけです)。
追加された 著者 Andrew Ice,

I did come across this method which makes use of xdotool, xprop, & wmctrl.

これが下記のスクリプトの動作です。

  1. アクティブなウィンドウを探す
  2. 最大化された状態にして覚えておく
  3. 最大化を削除する
  4. ジオメトリを取得する
  5. 新しい職位を計算する
  6. 移動する
  7. 以前の状態に基づいて最大化する
  8. 上げる
  9. これを行うスクリプトは次のとおりです。

スクリプト

これにより、アクティブウィンドウが他のモニターに移動します。並んでいる、別名でしか扱えません。水平、モニターの設定。

wid=`xdotool getactivewindow`
max_state=`xprop -id $wid _NET_WM_STATE`

wmctrl -ir $wid -b remove,maximized_vert,maximized_horz
eval `xdotool getwindowgeometry --shell $wid`

new_x=1600
if [[ "$X" -ge "$new_x" ]]; then
  new_x=0
fi

xdotool windowmove $wid $new_x $Y
if [ -z "${max_state/*_NET_WM_STATE_MAXIMIZED_*/}" ]; then
  wmctrl -ir $wid -b add,maximized_vert,maximized_horz
fi

xdotool windowraise $wid

ソース: Xubuntu - モニタ間でウィンドウを移動する

1
追加された
@Lekensteyn - はい、私は頭の上からそれを書きました。ありがとう。私はこれが巨大なハックであることに同意しますが、それ以上にリードはありません。 GNOMEには、Compizのようにウィンドウをさまざまな場所に移動できる機能があることを覚えているようですが、KDEを使用している場合はこれは使用できません。
追加された 著者 Patrick Szalapski,
@Lekensteyn - 私はdevilspieやxdotoolなどを使ってまったく同じことを(単一のウィンドウ内で)行うことができます。実際の実装の詳細は表示されません。
追加された 著者 Patrick Szalapski,
@Lekensteyn - この解決法は、 appX;を除いて SCREEN = 2 appX の概念とそれほど変わらない1を眠る。 moveWindow.sh
追加された 著者 Patrick Szalapski,
@Lekensteyn - はい、このソリューションの目的はappXを起動してからこのcmdを実行して移動することです。私はこれをテストする方法がないので、私はそれを見つけてあなたが評価するためにここに詳細を提供しました。現在のフォーム
追加された 著者 Patrick Szalapski,
それは app&sleep 1のようになります。プログラムがデタッチしないのでmoveWindow.sh 。私はこれをKWinウィンドウルールを使用した場合の改善とは考えていません。あなたの努力に対して+1。
追加された 著者 KDM,
これはアプリケーションが開かれた後にのみ機能します。実際には私が探しているものではありません(ただし、おそらくキーバインドを追加することも可能です)。私が間違えていなければ、これは常にモニターの左側にウィンドウを配置しますか?
追加された 著者 KDM,

同様の問題がありました。以下のものが見つかりました。

  1. Right click on the window titlebar and select "More Actions" -> "Window Manager Settings".
  2. There choose "Focus" in the column to the left.
  3. Toggle option "Active screen follows mouse".

他のデフォルトが指定されていない場合、ウィンドウは現在アクティブな画面に表示されます。 上記の手順では、マウス位置によってこのアクティブ画面が定義されます。

0
追加された
正しいですが、現在の画面にカーソルを置きたい場合、これは機能しません。これはデフォルトのオプションでさえあると思いますが、すべてのプログラムがそれを尊重するわけではありません。
追加された 著者 KDM,