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

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

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

次に、マルチモニター構成に戻します。画面スペースは広くなりましたが、最初はすべてのウィンドウが 1 つのモニターに積み重なっています。ウィンドウが元のモニターに戻れば便利です。

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

答え1

xdoツール

大まかなアイデアですが、いくつかのコマンドを作成することで目的を達成できます。xdotool1 台または 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が、シェル スクリプトでラップして、ショートカット キーに関連付けることができます。この方法を使用すると、ウィンドウを選択して、そのウィンドウを前面に出してフォーカスを当て、ショートカット キーの組み合わせを押すと、アプリケーションを別のウィンドウに送ることができます。この記事のタイトルは次のとおりです。モニター間でウィンドウを移動する

このメソッドは次のスクリプトを提供します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 をメイン モニターのピクセル単位の幅に置き換えてみてください。

次に、キーボード バインディング アプレットを実行します。

$ gnome-keybinding-properties

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

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

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

答え2

は必要ありませんxdotool。すべてのウィンドウの位置を記録しておき、後で だけで復元できますwmctrl

記録:wmctrl -lG > ${rcfile}

場所:

while read row; do
  IFS=" " read id g x y w h _ <<< ${row}
  wmctrl -ir ${id} -e 0,${x},${y},${w},${h}
done < ${rcfile}

関連情報