ラップトップをTwinview外部モニターから単一の画面にドッキング解除するとき、すべてのウィンドウをプライマリ画面に移動する単一のコマンドが必要です。
Nvidiaはウィンドウのエッジが見えるようにいくつかの作業を行いますが、マウス、キーボード、またはcompizプラグインで各ウィンドウを移動するには時間がかかります。
以下で作成したスクリプトは私のために機能し、wmctrl
のみを必要とします。 UbuntuでSudo apt-get install wmctrl
コマンドを使用してこれを取得できます。
必要に応じて、いくつかのマイナーな変更を作成する必要があります。
$BEFORE_WINDOW_NAME
は、プルしたコンピューター名の最後の文字列に設定する必要があります(これはSystem Settings
> Details
> Device name
)。
$MONITORS
これは2つのモニターで機能します(1920x####
の解像度で)。ただし、デバイスに接続されている各モニターに要素を設定して設定し、この変数を再定義できます。その画面上の任意のx
座標に。
$SKIPPED_WINDOWS
は、このスクリプトが呼び出されたときに移動したくないウィンドウのリストです。アイテムを自由に追加または削除してください。コマンドwmctrl -l
を入力すると、アイテムのリストを表示できます。
最後に、このスクリプトは1つのパラメーター、つまりwindow_control.sh n
を取ります。ここで、n
はウィンドウを移動するモニターです。
#! /bin/bash
IFS=$'\n' #prevents window names from breaking in loop
#Computers Name
#change this to the last characters before window names
#0x02a00002 0 mycomputer-Envy-M3970 XdndCollectionWindowImp -> ie:last characters in computer name
BEFORE_WINDOW_NAME="M3970" #MODIFY ME!!
WINDOWS=$(wmctrl -l | grep -oh -P "(?<=$BEFORE_WINDOW_NAME\ ).*")
#MODIFY MONITORS if needed
declare -a MONITORS=(
'0' # Monitor 1
'2150' # Monitor 2
);
declare -a SKIPPED_WINDOWS=(
'XdndCollectionWindowImp'
'unity-launcher'
'unity-panel'
'unity-dash'
'Hud'
'Desktop'
'Ubuntu'
);
#loop through window names and move them
for i in $WINDOWS; do
if [[ " ${SKIPPED_WINDOWS[@]} " =~ " ${i} " ]]; then
# whatever you DO NOT want to do when arr contains value
# echo "Skipping $i"
echo ""
else
# whatever you want to do when arr contains value
echo "Moving $i"
wmctrl -r "$i" -b remove,maximized_vert,maximized_horz
wmctrl -r "$i" -e 0,"${MONITORS[$1]}",0,800,800
wmctrl -r "$i" -b add,maximized_vert,maximized_horz
fi
done
wmctrl
と小さなbashスクリプトを使用してウィンドウをループし、それらをプライマリディスプレイに配置できます。私はこれを一緒に投げました。それで十分かもしれません。
#! /bin/bash
#dump the list of windows to a file
wmctrl -l > /tmp/window_list.txt
x=40; y=40
#read the window information from the file
while read id sticky Host win_title; do
#move any non-sticky windows except the desktop
if [ "$sticky" == "0" -a "$win_title" != "x-nautilus-desktop" ]
then
wmctrl -i -r $id -e 0,$x,$y,-1,-1
x=$(($x + 40))
y=$(($y + 40))
fi
done < /tmp/window_list.txt
#delete the temporary file
rm /tmp/window_list.txt
exit 0
「move_windows.sh」などのファイルに保存し、chmod +x move_windows.sh
そして、そのためのランチャーを作成します。