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


18

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

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

回答:


23
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: ~

これにより、これらgrepcut上下に移動できるため、ジオメトリ値(列3〜6)が残ります。

manページを引用して、列が何であるかを正確に理解するには:

-l

ウィンドウマネージャによって管理されているウィンドウを一覧表示します。ウィンドウごとに1行が出力され、その行はスペースで区切られた列に分割されます。最初の列には常に16進整数としてウィンドウIDが含まれ、2番目の列には常にデスクトップ番号が含まれます(スティッキーウィンドウの識別には-1が使用されます)。-pオプションが指定されている場合、次の列にはウィンドウのPIDが10進整数として含まれます。-Gオプションを指定すると、x-offset、y-offset、width、heightの4つの整数列が続きます。次の列には常にクライアントマシン名が含まれます。行の残りの部分には、ウィンドウのタイトルが含まれます(タイトルに複数のスペースが含まれる場合があります)。


私はそれを使用します!
アラン

1
あなたのコンピューターがバートと呼ばれる方法が大好きです:)
drnessie

5

私は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"

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

これらが使用された他の投稿

特に、xwininfoAskUbuntuの質問など、私はscripsに積極的に使用しています。


彼はよく、例を追加します;)
AB

1年後にそれらを追加しました;)しかし、決してより良い後、より良いですか?
セルギーKolodyazhnyy 16

0

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


2
確かに、シェルスクリプトは何らかの方法でXクライアントにジオメトリを照会できますか?それ以外の場合、Xアプリはどのように作成されますか?
djeikyb

@djeikybは、Xクライアントとして作成され、Xサーバーと通信します。シェルスクリプトは、あるいはXサーバを持つ環境で実行してもしなくてもよいシェルで実行し、そしてX.気にはならない
psusi

2
当然、はい。しかし、回避策があります!リポジトリのパッケージであるwmctrlを使用して、ワークスペースを移動、サイズ変更、最小化、さらには変更することができます!
drnessie

@psusiのロジックでは、デスクトップ環境は存在しないはずです。結局のところ、それらはX用に作成されたソフトウェアと対話するスクリプトの膨大なコレクションにすぎません。
andyn

0

私はtput cols非常にうまくいくことがわかりました!


2
ご協力いただき、ありがとうございます。あなたの答えを改善することをお勧めします。それが何をするのかを説明し、コマンドを修正して行数も取得します。シェルスクリプトで結果を使用する方法を示すこともできます。-例として上位の回答を参照してください。
ガントベルト

OPの言及から推測するとwmctrl、コンソールではなくグラフィカル環境ウィンドウについて話している。
-andyn

0

3つの画面を取得しました。これにより、寸法を含む3行が出力されます。

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.