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

Rog*_*ach 42 gnome gui window

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

是否可以?

解决方案:

获取窗口标题:

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

获取进程名称:

ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'
Run Code Online (Sandbox Code Playgroud)

或者:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm
Run Code Online (Sandbox Code Playgroud)

小智 48

就这么简单:

xdotool getactivewindow getwindowname
Run Code Online (Sandbox Code Playgroud)

祝你好运希望它对你有用!

  • 这有效,谁能解释为什么它被否决了? (2认同)

Gil*_*il' 26

您可以使用xdotool,一个多功能的 X 窗口自动化工具。

focused_window_id=$(xdotool getwindowfocus)
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")
Run Code Online (Sandbox Code Playgroud)

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

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


Ski*_*rou 9

比 OP 的解决方案(即没有ps,grepawk)更简单(IMO)来获取进程名称:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要结束行:

echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)
Run Code Online (Sandbox Code Playgroud)


小智 6

我知道这个问题很老,但我觉得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}")
Run Code Online (Sandbox Code Playgroud)

最后,使用 Your Favorite Tool™(例如grepsed),您可以搜索出所需的值。例如,pid上面命令的输出可以通过管道传输到sedsed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'


rho*_*oat 5

尝试 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,作者写了一个将窗口 ID 转换为 PID 的简短 C 程序,瞧。