
コマンドラインから起動したときに、ウィンドウ化されたプログラムを特定のワークスペースに「送信」できるかどうか疑問に思います。
たとえば、異なるワークスペースで特定の数のウィンドウ プログラムを開いた状態でコンピューターを起動したいのですが、これは可能ですか? この背後にある基本的な概念は何ですか?
私はUbuntu 14.04でUnityを使用しています。
私も始めようとしましたgdevilspie
が、バグの影響を受けています。
ありがとう! :)
答え1
を使用したwmctrl
例gedit
:
gedit & sleep 3; wmctrl -i -r `wmctrl -l -p | grep $! | awk '{ print $1 }'` -t 1
gedit &
バックグラウンドで gedit を実行するsleep 3
3秒間スリープしてウィンドウの作成を待ちます(私のマシンは少し遅いです)$!
前のコマンドの PID を返します (例: gedit pid)wmctrl -l -p | grep PID | awk '{ print $1 }'
gedit PIDからWIDを取得するwmctrl -i -r WID -t 1
WID を持つウィンドウを 2 番目のデスクトップに移動する
別の方法:
wmctrl -s 1 ; gedit & sleep 3; wmctrl -s 0;
- 2番目のデスクトップに切り替え、geditを起動し、3秒待ってから、1番目のデスクトップに戻ります。
参照:
答え2
これは基本的に @user.dz の回答と同じですが、パラメーター化されており、Windows ハンドラーが作成されるまで 3 秒間スリープする代わりに、ハンドラーが見つかるまでループします。
# workspace target
_WS=3
export DISPLAY=:0
gedit &
_PID="$!"
_WID=""
while [[ $_WID == "" ]]; do
_WID=$(wmctrl -l -p 2>/dev/null | grep $_PID | awk '{ print $1 }')
sleep 1
done
wmctrl -i -r $_WID -t $_WS