web-dev-qa-db-ja.com

Ubuntuで利用できる動的なマルチモニター対応のデスクトップ環境はありますか?

私はラップトップを使用し、日中に1つの(物理的な)職場から別の職場に移行し、可能であれば外部モニターに接続します。

また、多くのマルチタスクを行う必要があるため、特定の時間に多数のウィンドウを開いて、それらを整理するための多くの(仮想)ワークスペースを用意します。

しかし、外部モニターを接続/切断するたびに、私の注意深い配置はすべてなくなります。これにより、私は 本当に気違い になります。

2台目のモニターを接続/切断するときに、ウィンドウをそのままにするデスクトップ環境はありますか?それとも、モニター配置ごとのウィンドウ配置を覚えているでしょうか?ホームオフィス(ラップトップ画面の上部にある17インチモニター)から通常の職場(ラップトップ画面の左側にある21インチモニター)または同僚の机(ラップトップ画面の右側にある19インチモニター)に移動したとき、ウィンドウは、最後にモニターが接続された場所になります-このモニターを見たことがない場合は、そのままにしておきます。

外部モニターを団結して「処理」する方法は悲しく、接続する余分なモニターがすべてなかったらいいのにと思います。一度接続すると、床に釘付けされたデスクトップマシンがあるように、この配置にチェーンされます。

14
artm

2つのシェルスクリプトを提供しています。 ウィンドウの位置とサイズの配置を保存するに役立ちます。どういうわけか目的のウィンドウの配置が乱れた場合、復元これらのスクリプトを使用して、すべてのウィンドウの正確なウィンドウサイズと位置を持つ配置を行うことができます。

既にインストールしていない限り、wmctrlをインストールする必要があります。ターミナル経由でインストール、

Sudo apt-get install wmctrl

Windows構成を保存するスクリプト

# Script_Name: save_window_conf.sh
#!/bin/bash
if [ -f $HOME/.my_windows_config.txt ]; then
    echo -e "Information: Previous configuration file \"$HOME/.my_windows_config.txt\" already exists.\nTo save a new configuration remove it manually using the following command,\n\n\trm $HOME/.my_windows_config.txt"
    exit 1
else
    wmctrl -p -G -l | awk '($2 != -1)&&($3 != 0)&&($NF != "Desktop")' | awk '{print $1}' | while read mywinid
    do
        xwininfo -id "$mywinid" >> $HOME/.my_windows_config.txt
    done
fi

実行時に、上記のスクリプトは、開いているすべてのウィンドウのウィンドウの位置とサイズを、ホームディレクトリの.my_windows_config.txtという名前のファイルに保存します。非表示のテキストファイルです。

Windows構成を再ロードするスクリプト

# Script_Name: load_window_conf.sh
#!/bin/bash

file=$HOME/.my_windows_config.txt
declare -a mywinid
declare -a x
declare -a y
declare -a width
declare -a height

nl=$(cat "$file" | grep xwininfo |wc -l)

for i in $(seq 1 $nl)
do
    mywinid[i]=$(cat "$file" | grep "xwininfo" | awk -v p="$i" '{if(NR==p) print $4}')
    x[i]=$(cat "$file" | grep "Absolute upper-left X" | awk -v p="$i" '{if(NR==p) print $NF}')
    y[i]=$(cat "$file" | grep "Absolute upper-left Y" | awk -v p="$i" '{if(NR==p) print $NF}')
    width[i]=$(cat "$file" | grep "Width" | awk -v p="$i" '{if(NR==p) print $NF}')
    height[i]=$(cat "$file" | grep "Height" | awk -v p="$i" '{if(NR==p) print $NF}')
done

for it in $(seq 1 $nl)
do
    wmctrl -i -r "${mywinid[$it]}" -e 0,"${x[$it]}","${y[$it]}","${width[it]}","${height[it]}"
done

2番目のスクリプトを実行すると、すべてのウィンドウの正確なサイズでウィンドウの位置が復元されます。

使用法

これらのスクリプトを$HOME/bin/ディレクトリに保存します。 PATH$HOME/bin/を追加します。このため、$HOME/.bashrcの最後にこれらの行を追加します

PATH=$HOME/bin:$PATH
export PATH

これらのスクリプトを名前のみで実行できます。スクリプトの実行許可を与えます。

chmod +x $HOME/bin/save_window_conf.sh
chmod +x $HOME/bin/load_window_conf.sh

構成を$HOME/.my_windows_config.txtに保存するには

ターミナルで実行するすべてのウィンドウを開いて調整した後、

save_window_conf.sh

$HOME/.my_windows_config.txtから設定を再読み込みするには

load_window_conf.sh

それがあなたの問題を解決することを願っています。これがスクリーンショットです

enter image description here

10
souravc