在shell中获取窗口大小

我想从shell脚本中获取当前窗口的大小…

真的没什么好说的…我宁愿用wmctrl。

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列)。

引用手册页,以便准确理解列的内容:

-l

列出由窗口管理器管理的窗口。 每个窗口输出一行,该行分为空格分隔列。 第一列始终包含窗口标识作为hex整数,第二列始终包含桌面编号(-1用于标识粘性窗口)。 如果指定了-p选项,则下一列将包含窗口的PID作为十进制整数。 如果指定了-G选项,则将跟随四个整数列:x-offset,y-offset,width和height。 下一列始终包含客户端计算机名称。 该行的其余部分包含窗口标题(标题中可能有多个空格)。

我相信wmctrl没有任何选项可以直接找到活动窗口Id。
如果有人知道该怎么做,我很想知道..
也就是说,这里有一些打印出活动窗口大小的脚本。

这是:wmctrl + xdotool …(不使用sed)。

 id=$(xdotool getactivewindow) wmctrl -lpG | while read -aa; 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" 

使用xpropxwininfo 。 两者都是默认情况下,无需安装

用法示例:

两个命令都将光标转换为方形/十字形以允许选择特定窗口。

 $ xprop _NET_WM_OPAQUE_REGION _NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377 $ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}' 984 377 

或者,可以在XIDforms的命令行上指定窗口

 $ 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 

使用这些的其他post

特别是xwininfo ,我一直在积极地使用它,例如在这些AskUbuntu问题上:

  • 始终隐藏应用程序的窗口
  • 如何才能在特定显示器上最小化窗口?

Shell脚本不了解或不关心Windows。 它们最好在终端中运行(可能会也可能不会在窗口中显示)。 如果要以字符forms获取终端的宽度和高度,请使用stty实用程序。

我发现tput cols工作得很好!