2025-05-11

xdotool との戯れ!Window ID の取得で、ちと悩むものの...

起動位置やウィンドウサイズを記憶してくれないアプリケーションがある。
gnome-terminal のように、--geometry オプションが使えるとありがたいが、できないアプリケーションもある。すべてのウィンドウ配置をコマンドラインで制御したいというのは、いまだ awk や sed が手放せずにいるネアンデルタール人の感覚か... 

ちなみに、nautilus や mutter では、痒いところに手が届かない。
ウィンドウのサイズは、nautilus から...
$ dconf-editor
org/gnome/nautilus/window-state に "initial-size" があり、自動で変化する模様。
ウィンドウの起動位置は、mutter から...
$ dconf-editor
org/gnome/mutter に "center-new-windows" の on/off しか見当たらない。

0. てなわけで、xdotool を試す...

$ sudo dnf install xdotool

尚、環境は...
OS: Rock Linux 9.5 (Blue Onyx)
Kernel: 5.14.0-503.38.1.el9_5.x86_64
Gnome Version: 40.4.0
Gnome 環境: スタンダード(X11ディスプレイサーバー)

1. 手順は、こんな感じ...
  1. Window ID を取得: xdotool search --name(or --class) "ウィンドウ名"
  2. Window ID を指定して移動: xdotool windowmove "Window ID" X Y
Window ID さえ取得できれば、なんとかなりそう...

2. 例えば、chrome では、素直にうまくいく。
$ xdotool search --neme chrome
39845892
$ xdotool windowmove 39845892 100 200

3. しかし例えば、baobab「ディスク使用量アナライザ」では、うまくいかない。
尚、baobab は、ウィンドウサイズは記憶してくれるが、起動位置は記憶してくれない。
$ xdotool search --name baobab
33554433
$ xdotool windowmove 33554433 100 200
これで反応なし!
xwininfo で確認すると、Window ID の取得に問題あり...

そして、こうやると、うまく取得できる。
$ xdotool selectwindow
=> 対象ウィンドウをクリック!
33554680
これは、xwininfo の取得値(16 進表記)と同じ。

さらに、こうやると、二つの値が得られる。
$ xdotool search --class baobab
33554433
33554680
欲しいのは、下の ID...

そして、こうやると、ビンゴ!
$ xdotool search --onlyvisible --class baobab
33554680
尚、"--class" を "--classname" としても結果は同じだが、違いは微妙か...

4. 結果、コードはこんな感じ... とりあえず、めでたし!めでたし!
#! /bin/bash
baobab /home/username &
sleep 1s
window_id=$(xdotool search --onlyvisible --class baobab)
xdotool windowmove $window_id 100 200

0 コメント:

コメントを投稿