drn*_*sie 18 command-line window
我想从 shell 脚本中获取当前窗口的大小...
真的没什么好说的......我更喜欢使用wmctrl。
Oli*_*Oli 23
wmctrl -lG
Run Code Online (Sandbox Code Playgroud)
会给你类似的东西:
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: ~
Run Code Online (Sandbox Code Playgroud)
有了这个你可以grep
和cut
打击这些,所以你留下了几何值(列3-6)。
引用手册页,以便您准确了解列是什么:
-l
列出由窗口管理器管理的窗口。每个窗口输出一行,该行被分成空格分隔的列。第一列始终包含十六进制整数形式的窗口标识,第二列始终包含桌面编号(-1 用于标识粘性窗口)。如果指定了 -p 选项,下一列将包含窗口的 PID 作为十进制整数。如果指定了 -G 选项,则将跟随四个整数列:x-offset、y-offset、width 和 height。下一列始终包含客户端计算机名称。该行的其余部分包含窗口标题(标题中可能有多个空格)。
我相信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
Run Code Online (Sandbox Code Playgroud)
这是: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"
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
或者,可以在命令行上以 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
Run Code Online (Sandbox Code Playgroud)
特别是,xwininfo
, 已被我积极用于 scrips ,例如在这些 AskUbuntu 问题上: