找到鼠标下的应用程序

找到鼠标下的应用程序

我经常遇到这种情况,一个应用程序弹出一个问题,我想知道这个窗口属于哪个应用程序,因为如果我查看启动器,没有当前具有焦点的应用程序(当我聚焦消息窗口时,图标右侧没有白色三角形)

有没有办法找出打开的窗口的所属?

答案1

使用 xdotool

首先确保xdotool您的系统上可用:

sudo apt-get install xdotool

以下命令将打印当前焦点窗口的进程名称:

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

为了给自己更多时间关注窗口/单击它,您可以预先设置一个较短的睡眠时间:

sleep 5 && cat "/proc/$(xdotool getwindowpid "$(xdotool getwindowfocus)")/comm"

短暂的时间之后将会显示进程名称。


使用 wininfo

Wininfo 是一个图形实用程序,可显示有关窗口及其属性的各种信息,包括与窗口关联的 PID(进程 ID):

wininfo 中的 PID 图像

wininfo应该在官方存储库中可用:

sudo apt-get install wininfo

确定窗口的 PID 后,您就可以查找与其关联的进程名称。有多种方法可以做到这一点,例如通过查看/proc

$ cat /proc/17002/comm
gnome-terminal

这将是与 PID 关联的进程名称17002

一种更优雅的方式,允许检查进程树上下文,如建议的那样@Rmano

$ pstree -a -s -l -p -u 17002
init,1
  └─lightdm,1900
      └─lightdm,3202 --session-child 12 19
          └─lxsession,3307,glutanimate -s LXDE -e LXDE
              └─openbox,3362 --config-file /home/glutanimate/.config/openbox/lxde-rc.xml
                  └─gnome-terminal,17002
                      ├─bash,1841
                      ├─bash,2332
                      ├─bash,2424
                      │   └─pstree,2484 -a -s -l -p -u 17002
                      ├─gnome-pty-helpe,1840
                      ├─{gnome-terminal},1835
                      ├─{gnome-terminal},1836
                      ├─{gnome-terminal},1842
                      └─{gnome-terminal},2269

当然你也可以pstreexdotool上面的选项结合使用(感谢@rubo77 指出这一点!):

sleep 2; pstree -spaul $(xdotool getwindowpid "$(xdotool getwindowfocus)")

资料来源:

https://unix.stackexchange.com/q/38867/29245

http://www.linuxquestions.org/questions/debian-26/how-to-find-the-process-associated-with-a-top-level-x-window-907125/

https://superuser.com/q/632979/170160

答案2

您可以使用以下命令创建键盘快捷键:

zenity --info --text $(xprop $win_id WM_CLASS | cut -d" " -f4-)

答案3

您可以使用它xprop来获取所点击窗口的进程 ID:

xprop $win_id _NET_WM_PID

然后用以下方法进行分析pstree

pstree -spaul $(xprop $win_id _NET_WM_PID | cut -d" " -f3-)

你可以使用以下命令重定向到文本信息窗口

pstree -spaul $(xprop $win_id _NET_WM_PID | cut -d" " -f3-)|zenity --text-info --title "pstree of clicked Window"

我尝试过了创建键盘快捷键对于这最后一个命令(如果您经常需要它),但由于某种原因,它不起作用。

答案4

如果您正在使用 gnome,那么可以使用以下解决方案。

全面披露:下面的 github 链接是我的项目。

请看一下https://github.com/blueray453/gnome-utils-by-blueray453/blob/main/appFunctions.js

GetAppFromFocusedWindow() {
    let w = global.get_window_actors().find(w => w.meta_window.has_focus() == true);

    let tracker = Shell.WindowTracker.get_default();
    let app = tracker.get_window_app(w.meta_window);
    return app.get_id();
}

您需要 gnome 扩展才能访问有关 windows 和 shell 的数据。您看到和global.Shell.WindowTracker您无法导入这些是 gjs 或 python。

请检查在 Python 的 GTK 绑定中找不到 Meta、Shell 和 St,gnome 扩展文档中有

如果您安装此扩展,那么您将运行的命令是:

dbus-send --print-reply=literal --session --dest=org.gnome.Shell /org/gnome/Shell/Extensions/GnomeUtilsApps org.gnome.Shell.Extensions.GnomeUtilsApps.GetAppFromFocusedWindow

您可以将此命令绑定到某个键。

相关内容