获取外壳中的窗口大小


18

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

真的没有太多要说的了。。。我更喜欢使用wmctrl。

Answers:


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

要引用手册页,以便您确切了解各列是什么:

-l

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


我会用的!
Allan

1
我喜欢您的计算机称为bert的方式:)
drnessie 2011年

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

使用xpropxwininfo。两者均为默认设置,无需安装

用法示例:

这两个命令都将光标变成正方形/十字形,以允许选择特定的窗口。

$ 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问题:


他很普通,请添加一个示例;)
AB

一年后添加它们;)但是总比没有好,对吧?
Sergiy Kolodyazhnyy

0

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


2
当然,shell脚本可以以某种方式查询X客户端的几何形状吗?否则,如何编写X应用程序?
djeikyb 2011年

@djeikyb,它们被编写为X客户端并与X服务器通信。Shell脚本的外壳,这可能会或可能不会在甚至有一个X服务器的环境中运行运行,应该不会在乎十
psusi

2
可以理解,是的。但是有解决方法!使用仓库中的软件包wmctrl,您可以移动,调整大小,最小化甚至更改工作空间!
drnessie'2

按照@psusi的逻辑,桌面环境不应该存在。毕竟,它们只是大量脚本的集合,这些脚本与为X编写的软件进行交互
。– andyn

0

我发现tput cols工作很好!


2
感谢您的贡献。我建议改善您的答案:解释它的作用,并修改命令以获取行数。也许展示如何在shell脚本中使用结果。-请参阅评分最高的答案作为示例。
guntbert

从OP的提及推断wmctrl,我们不是在谈论控制台,而是在图形环境窗口。
andyn

0

有3个屏幕,此输出3行,其尺寸为:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.