回答:
wmctrl -lG
次のようなものを提供します:
oli@bert:~$ wmctrl -lG
0x0384c0d5 -1 1590 1030 330 170 bert N/A
0x01200023 -1 0 0 3840 1200 bert x-nautilus-desktop
0x01000003 -1 3840 2352 1920 24 bert Bottom Expanded Edge Panel
0x01000028 -1 0 2352 1920 24 bert Bottom Expanded Edge Panel
0x0500003e 0 676 252 1404 1015 bert Chromium
0x02e00021 0 3860 160 1361 1084 bert Liferea
0x02000047 0 6650 940 506 683 bert Social broadcast messages
0x04600004 0 4546 460 1263 833 bert oli@bert: ~
これにより、これらgrep
をcut
上下に移動できるため、ジオメトリ値(列3〜6)が残ります。
manページを引用して、列が何であるかを正確に理解するには:
-l
ウィンドウマネージャによって管理されているウィンドウを一覧表示します。ウィンドウごとに1行が出力され、その行はスペースで区切られた列に分割されます。最初の列には常に16進整数としてウィンドウIDが含まれ、2番目の列には常にデスクトップ番号が含まれます(スティッキーウィンドウの識別には-1が使用されます)。-pオプションが指定されている場合、次の列にはウィンドウのPIDが10進整数として含まれます。-Gオプションを指定すると、x-offset、y-offset、width、heightの4つの整数列が続きます。次の列には常にクライアントマシン名が含まれます。行の残りの部分には、ウィンドウのタイトルが含まれます(タイトルに複数のスペースが含まれる場合があります)。
私はwmctrlにはアクティブなウィンドウIDを直接見つけるオプションがありません。
誰かがそれを行う方法を知っているなら、私は知りたいと思い
ます。
これは、wmctrl + xdotool ...(sedを使用しない)です。
id=$(xdotool getactivewindow)
wmctrl -lpG | while read -a a; do w=${a[0]}; if (($((16#${w:2}))==id)) ; then echo -n "${a[5]} ${a[6]}"; break; fi; done
これは、xwininfo + xdotool + sedです。
xwininfo
の一部です x11-utils
set $(xwininfo -id $(xdotool getactivewindow) \
|sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p" \
-e "s/^ \+Height: \([0-9]\+\).*/\1/p")
echo -n "$1 $2"
xprop
またはを使用しxwininfo
ます。どちらもデフォルトでインストールされ、インストールは不要です
両方のコマンドは、特定のウィンドウを選択できるようにカーソルを正方形/十字に変えます。
$ xprop _NET_WM_OPAQUE_REGION
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
あるいは、コマンドラインでXID形式でウィンドウを指定できます
$ xprop _NET_WM_OPAQUE_REGION -id 83886090
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo -id 83886090 | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
特に、xwininfo
AskUbuntuの質問など、私はscripsに積極的に使用しています。
シェルスクリプトは、ウィンドウを認識または気にしません。せいぜい端末で実行されます(ウィンドウに表示される場合とされない場合があります)。端末の幅と高さを文字で取得する場合は、sttyユーティリティを使用します。