コマンドラインから特定のワークスペースでウィンドウプログラムを起動する

コマンドラインから特定のワークスペースでウィンドウプログラムを起動する

コマンドラインから起動したときに、ウィンドウ化されたプログラムを特定のワークスペースに「送信」できるかどうか疑問に思います。

たとえば、異なるワークスペースで特定の数のウィンドウ プログラムを開いた状態でコンピューターを起動したいのですが、これは可能ですか? この背後にある基本的な概念は何ですか?

私はUbuntu 14.04でUnityを使用しています。

私も始めようとしましたgdevilspieが、バグの影響を受けています。

ありがとう! :)

答え1

を使用したwmctrlgedit:

gedit & sleep 3; wmctrl -i -r `wmctrl -l -p | grep $! | awk '{ print $1 }'` -t 1
  • gedit &バックグラウンドで gedit を実行する
  • sleep 33秒間スリープしてウィンドウの作成を待ちます(私のマシンは少し遅いです)
  • $!前のコマンドの PID を返します (例: gedit pid)
  • wmctrl -l -p | grep PID | awk '{ print $1 }'gedit PIDからWIDを取得する
  • wmctrl -i -r WID -t 1WID を持つウィンドウを 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

関連情報