drnessie Asked: 2011-02-25 06:16:24 +0800 CST2011-02-25 06:16:24 +0800 CST 2011-02-25 06:16:24 +0800 CST 在 shell 中获取窗口大小 772 我想从 shell 脚本中获取当前窗口的大小... 真的没什么好说的了……我更喜欢用wmctrl。 command-line 6 个回答 Voted Best Answer Oli 2011-02-25T06:34:07+08:002011-02-25T06:34:07+08:00 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 列)。 引用手册页,以便您准确了解这些列是什么: -l 列出由窗口管理器管理的窗口。每个窗口输出一行,该行被分成空格分隔的列。第一列始终包含作为十六进制整数的窗口标识,第二列始终包含桌面编号(-1 用于标识粘性窗口)。如果指定了 -p 选项,下一列将包含窗口的 PID 作为十进制整数。如果指定了 -G 选项,则后面会出现四个整数列:x-offset、y-offset、width 和 height。下一列始终包含客户端计算机名称。该行的其余部分包含窗口标题(可能在标题中有多个空格)。 Sergiy Kolodyazhnyy 2015-05-18T20:47:42+08:002015-05-18T20:47:42+08:00 使用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, 已被我积极用于 scrips ,例如在这些 AskUbuntu 问题上: 始终隐藏应用程序的窗口 如何仅在特定显示器上最小化窗口? Peter.O 2011-02-25T16:57:21+08:002011-02-25T16:57:21+08:00 我相信 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" psusi 2011-02-25T06:46:34+08:002011-02-25T06:46:34+08:00 Shell 脚本不知道也不关心 windows。充其量它们在终端中运行(可能会或可能不会显示在窗口中)。如果要以字符为单位获取终端的宽度和高度,请使用 stty 实用程序。 Milo Banks 2018-09-11T18:23:16+08:002018-09-11T18:23:16+08:00 我发现tput cols工作得很好! NVRM 2019-12-09T20:58:49+08:002019-12-09T20:58:49+08:00 有 3 个屏幕,输出 3 行,尺寸为: xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4 /* OUTPUT * * 3840x2160 * 1920x1080 * 1920x1080 ***********/
会给你类似的东西:
有了这个,你可以在这些
grep
上上下下cut
,这样你就可以得到几何值(第 3-6 列)。引用手册页,以便您准确了解这些列是什么:
使用
xprop
或xwininfo
。两者都默认提供,无需安装使用示例:
这两个命令都将光标变成方形/十字形以允许选择特定窗口。
或者,可以在命令行中以 XID 形式指定窗口
使用这些的其他帖子
特别是
xwininfo
, 已被我积极用于 scrips ,例如在这些 AskUbuntu 问题上:我相信 wmctrl 没有任何选项可以直接查找活动窗口 ID。
如果有人知道怎么做,我很想知道。
也就是说,这里有几个脚本可以打印出活动窗口的大小。
这是:wmctrl + xdotool ...(不使用 sed)。
这是:xwininfo + xdotool + sed
xwininfo
是其一部分x11-utils
Shell 脚本不知道也不关心 windows。充其量它们在终端中运行(可能会或可能不会显示在窗口中)。如果要以字符为单位获取终端的宽度和高度,请使用 stty 实用程序。
我发现
tput cols
工作得很好!有 3 个屏幕,输出 3 行,尺寸为: