是否可以在Gnome中检索活动的窗口进程/标题?


28

我需要一个解决方案来在Gnome 2桌面上获取当前的活动窗口(焦点)。我对运行该窗口和窗口标题的过程最感兴趣。

可能吗?

解:

获取窗口标题:

xwininfo -root -children | grep $(printf '%x\n' $(xdotool getwindowfocus)) | grep -oEi '"[^"]+"' | head -1

获取进程名称:

ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'

要么:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

Answers:


17

您可以使用xdotool(一种通用的X窗口自动化工具)。

focused_window_id=$(xdotool getwindowfocus)
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")

(我不知道专注和主动之间有什么区别。)

(我以为wmctrl可以做到这一点,但显然不能。)


26

就这么简单:

xdotool getactivewindow getwindowname

祝您好运,对您有用!


这行得通,有人能解释为什么它被否决吗?
lfzawacki 2015年

8

比OP解决方案简单(IMO)(即没有psgrepawk),得到的进程名:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

或者,如果您想要行尾:

echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)

是的,cat /proc/很好(并且可以说更快,因为它不涉及对整个ps输出进行grep处理)。我将其添加到问题正文的解决方案中,以便将来的用户可以找到它。
罗加奇

4

尝试使用xwininfo命令http://www.xfree86.org/4.2.0/xwininfo.1.html,它肯定会返回窗口标题,并且就进程而言,很好...

X为它分配了一个ID并成为窗口的父PID,并且默认情况下也将其隐藏,因此,假设Gnome支持NET_WM_PID(如2001年的补丁所示),http://mail.gnome.org/ archives / gtk-devel-list / 2001-October / msg00238.html,那么我们可以查看这篇帖子http://www.mail-archive.com/devel@xfree86.org/msg05809.html,作者在其中写了一个简短的C程序,将窗口ID转换为PID,瞧。


但这似乎xwininfo需要我手动选择所需的窗口。我希望有一种方法可以使bash获得聚焦的窗口。
罗加奇(Rogach)2012年

例如,xwininfo -root -children | grep -oEi'窗口ID:(?[0-9a-zA-Z] +)| grep -oEi'(?0-9a-zA-Z)'-编辑:我的手指滑了,我的窗口ID正则表达式不好。请查看其他网站以获取不同的参考:davygoat.com/software/rizzle/How_it_works.html
rhoyerboat 2012年

此命令仅提供“根”窗口ID,而不提供活动的窗口ID :(
Rogach 2012年

1

我知道这个问题很老,但是我觉得xprop在这里也应该提到。它在X下很容易获得。它可以以交互方式使用:

  1. xprop使用鼠标光标键入并选择所需的窗口,然后
  2. WM_NAME给你窗口的标题,_NET_WM_PID给pid

或者,您可以xprop通过-id-name选项直接告诉您需要哪个窗口。使用,awk您可以获取活动的窗口ID并将其传递回去xprop(从此处获取):

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}")

最后,使用“您的收藏夹工具”(例如grepsed)可以重新配置所需的值。例如,pid上述命令的输出可以通过管道传递给sedsed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

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.