我需要一个解决方案来获取 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)
祝你好运希望它对你有用!
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可以做到这一点,但显然不是。)
比 OP 的解决方案(即没有ps
,grep
和awk
)更简单(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 下很容易获得。它可以以交互方式使用:
xprop
使用鼠标光标键入并选择您想要的窗口,然后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™(例如grep
或sed
),您可以搜索出所需的值。例如,pid
上面命令的输出可以通过管道传输到sed
:sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'
尝试 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 程序,瞧。