スクリプトを介してアプリケーションを移動してサイズを変更するには:

スクリプトを介してアプリケーションを移動してサイズを変更するには:

これ質問は、タイトルでウィンドウのアドレスを指定し、位置/サイズを調整する方法を示しています。

これで、ウィンドウのアドレスを指定する5つのオプションがあります。
- ウィンドウID:アプリケーションの再起動時の変更=>役に立たない
- ウィンドウタイトル:他のウィンドウタイトルと同じ=>役に立たない - ウィンドウ名前
空間:他のウィンドウタイトルと同じ名前空間=>役に立たない>役に立たない
- ユーザーをクリックして選択することができます => このタスクの全体的なポイントは、単に怠惰なことです。そうではありませんか?
- アクティブウィンドウを使用します。 =>そうかもしれませんが、これは信頼できないようです。(?)

私がやりたいことは、スクリプトを使用して複数のアプリケーションを開き、そのうちのいくつかを2回以上(同じタイトルまたは可変タイトル)自分のデスクトップに配置することです。複数形に注目してください。そのうちのいくつかは他のワークスペースにもあることを願っています。wmctrl移動とサイズ変更の両方が可能ですが、ウィンドウの選択はどうするかわかりません。

アプリケーションの実行直後にウィンドウIDを取得する方法はありますか?プロセスIDを使用してこれを実行し、wmctrl実行中のすべてのアプリケーションのPIDを取得できることを知っています。 PIDを使用してウィンドウアドレスを指定する方法はありますか?

または、wmctrlタイトルの一致を逆にすることはできますか? (--help最初の一致が使用された場合、最後に開始された(最後に仮定)一致を使用できますか?)

答え1

この解決策は、質問がほぼ終わったときに私に現れたので、私は直接答えなければならないと思いました。これは安定して機能しますが、より簡単な方法がある可能性があります。私が要求する内容を直接実行する方法がある場合は、自由に別の答えを残してください。

スクリプトを介してアプリケーションを移動してサイズを変更するには:

このサンプルコードには説明が必要です(コメントを含む)。

#!/bin/bash
DISPLAY=:0 gnome-calculator & # start app
cpid=$! # get process ID of said app
sleep 1 # give it a second to open the window (adjust to needs)
cwid=$(wmctrl -lp | grep " $cpid " | cut -d " " -f 1) # get window ID
wmctrl -i -r "$cwid" -e "0,3200,572,396,415" # move and resize!
# start the 2nd application...
DISPLAY=:0 sol &
cpid=$!
sleep 1
cwid=$(wmctrl -lp | grep " $cpid " | cut -d " " -f 1)
wmctrl -i -r "$cwid" -b "remove,maximized_vert,maximized_horz" # un-maximize
wmctrl -i -r "$cwid" -t 1 # move to desktop 1 (2nd workspace)
wmctrl -i -r "$cwid" -e "0,1497,525,1342,860"

必要なだけ多くのアプリケーションに対してこのプロセスを繰り返すと、それを使用してwmctrl -lアプリケーションの現在のジオメトリを見つけて、パラメータに何を提供するかを知ることができます-e

パラメータの形式は-e次のとおりです<gravity>,<X_pos>,<Y_pos>,<width>,<height>

関連情報