Wmctrl如何使用
如何使用 wmctrl
通過 PID 調整視窗大小和移動視窗?
我正在使用 21:9 顯示器並編寫了一個腳本,使用鍵盤快捷鍵將我的視窗平鋪/對齊到顯示器的左側、中心和右側:
┌─────────┬─────────┬─────────┐ │ window1 │ window2 │ window3 │ │ left │ centre │ right │ │ aligned │ aligned │ aligned │ └─────────┴─────────┴─────────┘
該腳本通過獲取目前聚焦視窗的名稱來工作:
WINDOW_NAME=$(xdotool getwindowfocus getwindowname)
並使用其視窗名稱對齊視窗:
wmctrl -ir "$WINDOW_NAME" -e 1,$X_OFFSET,$Y_OFFSET,$X_WIDTH,$Y_HEIGHT
問題是,當打開多個具有相同視窗名稱的視窗(例如 2 個 Firefox 瀏覽器或 3 個終端等)時,它不會移動目前焦點視窗,而是從所有具有相同名稱的視窗中移動,即第一個打開的視窗.
即假設我打開了 3 個終端,並且我想要對齊終端 T2,腳本將對齊 T1 而不是 T2,因為首先打開了 T1。
所以我的想法是使用程序ID(PID)而不是使用視窗名稱,因為與視窗名稱不同,PID是唯一的。問題是:是否可以
wmctrl
使用 PID?在我的手冊頁中,
wmctrl
我找到了-i
將變數解釋<WIN>
為數字而不是字元串名稱的選項。$ man wmctrl [...] -e <MVARG> Resize and move a window that has been specified with a -r action according to the <MVARG> argument. [...] -r <WIN> Specify a target window for an action. [...] -i Interpret window arguments (<WIN>) as a numeric value rather than a string name for the window. If the numeric value starts with the prefix '0x' it is assumed to be a hexadecimal number. [...]
我真的不明白這個
-i
選項的含義,並認為這可能意味著可以使用 PID 而不是視窗名稱:WINDOW_ID=$(xdotool getactivewindow getwindowpid) WINDOW_ID=$(printf 0x%x $WINDOW_ID) wmctrl -ir "$WINDOW_ID" -e 1,$X_OFFSET,$Y_OFFSET,$X_WIDTH,$Y_HEIGHT
不幸的是,這不起作用(無論是十進制數,還是十六進制數)。
Q1:是否可以使用
wmctrl
PID 而不是視窗名稱?Q2:這個
-i
選項實際上是什麼意思?
該
-i
選項需要一個視窗 id,如果你只是執行,你會得到這個xdotool getactivewindow
它列印一個十進制數,如 20971543。所以你可以這樣做
wmctrl -i -r "$(xdotool getactivewindow)" ...
但是你不需要這樣做,因為它
wmctrl
接受一個偽視窗 id 字元串:ACTIVE:
來表示焦點視窗,所以你可以這樣做wmctrl -r :ACTIVE: ...