web-dev-qa-db-ja.com

シェルでウィンドウサイズを取得する

現在のウィンドウのサイズをシェルスクリプトから取得したい...

本当に他に言うことはあまりありません... wmctrlを使用したいと思います。

17
drnessie
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つの整数列が続きます。次の列には常にクライアントマシン名が含まれます。行の残りの部分には、ウィンドウのタイトルが含まれます(タイトルに複数のスペースが含まれる場合があります)。

22
Oli

Wmctrlにはnotにはactiveウィンドウ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です。

xwininfox11-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"
5
Peter.O

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に積極的に使用しています。

2

tput colsが非常にうまく機能することがわかりました!

0
Milo Banks

シェルスクリプトは、ウィンドウを認識または気にしません。せいぜい端末で実行されます(ウィンドウに表示される場合とされない場合があります)。端末の幅と高さを文字で取得する場合は、sttyユーティリティを使用します。

0
psusi