如何在命令行上找到窗口的位置(在桌面上)?


19

我正在尝试编写一些脚本来帮助通过键盘快捷键管理窗口。

为了执行我想做的事情,我需要能够找到“活动”(聚焦)窗口的当前位置和大小。位置是指桌面上窗口的X,Y坐标,尺寸是指窗口的高度和宽度。

是否有一个命令行实用程序可以获取此信息?

Answers:


22

您可以使用以下命令获取当前活动窗口的所有信息:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

要么

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

只需解析所需坐标的输出即可。与Windows交互时,以下是一些有用的命令:

  • xwininfo将为您提供相对和绝对几何。
  • xprop会告诉您很多信息,包括窗口是否处于活动状态,但不是其几何形状
  • xdpyinfo也会为您提供活动窗口的ID,但没有额外的信息。
  • wmctrl将为您提供有关窗口的信息列表,并允许您选择要修改的活动窗口,但没有信息。

例如,将活动窗口的标题更改为“新名称”:

wmctrl -r :ACTIVE: -N "New Name"

或更改活动窗口的位置:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

考虑wmctrl是否仅需要更改一些简单的内容,例如窗口的几何形状。仅当您要执行其他更复杂的操作时,才考虑使用上述其他脚本。


1
我只想指出,运行第二个命令时会得到不同的结果。第一个工作符合我的预期。
TM。

1
我使用Arch,但将来可能会对这里的人有所帮助。第一个不适用于我,第二个未提供正确的尺寸,可能是由于WM。但是两者的结合是可行的。xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
2013年

谢谢!但是我同意前两个意见。第二个命令xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)向我显示终端的子窗口(无名称)。当我刚xdpyinfo | grep focus得到时focus: window 0x435b877, revert to Parent,0x435b877是第一个命令返回的窗口的ID(确实对我有用)。这是Trusty 14.04.1 LTS
nealmcb,2015年

8

使用“ xdotool”,您可以使用键盘或鼠标事件轻松地与Windows进行交互。

CtrlC活动窗口发送序列的示例:

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

如果您确实需要窗口位置:

eval $(xdotool getmouselocation --shell); echo $X $Y

有关更多操作/选项,请参见手册页


有趣,但是我就明白了Error: Invalid key sequence 'ctrl-c'
l0b0
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.