web-dev-qa-db-ja.com

複数のモニターに切り替えるときのウィンドウの配置

複数のモニターに分散して開いている複数のウィンドウがあるとします。次に、単一のモニターの使用に切り替えます(おそらく、ラップトップをドッキングステーションから取り外したためです)。これで、すべてのウィンドウが1つの画面に表示されます。

次に、マルチモニター構成に切り替えます。これで画面スペースが増えましたが、最初はすべてのウィンドウが1つのモニターに積み上げられています。あなたの窓が彼らが元々あったモニターに戻るならば、それは素晴らしいでしょう。

これを実現する方法について何かアイデアはありますか?

3
user31765

xdotool

大まかなアイデアですが、 xdotool を使用していくつかのコマンドを作成することで、必要なことを実現できます。次に、1つまたは2つのモニターが接続されている場合は、それに応じてそれらを実行できます。

この記事のタイトルでこれを行う方法のかなり良い例があります: Xubuntu –モニター間でウィンドウを移動する

セクションからの抜粋:アクティブウィンドウを他のモニターに移動する(ついに!)

これが私たちがする必要があることです:

  • アクティブなウィンドウを見つける
  • 最大化された状態を取得し、それを覚えておいてください
  • 最大化を削除します
  • そのジオメトリを取得します
  • 新しい位置を計算します
  • それを移動
  • 前の状態に基づいて最大化
  • それを上げる

これを行うスクリプトは次のとおりです。

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

よりインタラクティブな方法

また、xdotoolを利用する別のアプローチを見つけましたが、それをシェルスクリプトでラップして、ショートカットキーに関連付けることができました。この方法を使用すると、ウィンドウを選択してウィンドウを表示し、フォーカスを合わせることができます。ショートカットキーの組み合わせを押すと、アプリケーションが別のウィンドウに送信されます。記事のタイトルは次のとおりです。 モニター間でWindowsを移動する

このメソッドは、次のスクリプトwindowmove.shを提供します。

#!/bin/bash
if [ $1 -eq 2 ]
then
POS1=`xrandr --current | head -2 | tail -1 | cut -d 'x' -f1 | cut -d ' ' -f3`
POS2=0
else
POS1=0
POS2=0
fi
/usr/bin/xdotool windowmove `/usr/bin/xdotool getwindowfocus` $POS1 $POS2
exit 0

POS1は、xrandrの出力を使用してメイン画面の幅を計算します。スクリプトでウィンドウを右に移動できないが、ウィンドウを左に移動できる場合は、その行をPOS1 = 1920に置き換え、1920をメインモニターのピクセル単位の幅に置き換えてみてください。

次に、KeyboardBindingsアプレットを実行します。

$ gnome-keybinding-properties

注:これは、GUIを介してさまざまなディストリビューションのさまざまな場所から実行できます。

次の2つのアプリケーション起動を使用して、2つのキーバインディングを作成します。

  • バインディング#1のコマンド:./Scripts/windowmove.sh 1
  • バインディング#2のコマンド:./Scripts/windowmove.sh 2
2
slm