我经常遇到这种情况,一个应用程序弹出一个问题,我想知道这个窗口属于哪个应用程序,因为如果我查看启动器,没有当前具有焦点的应用程序(当我聚焦消息窗口时,图标右侧没有白色三角形)
有没有办法找出打开的窗口的所属?
答案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
应该在官方存储库中可用:
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
当然你也可以pstree
与xdotool
上面的选项结合使用(感谢@rubo77 指出这一点!):
sleep 2; pstree -spaul $(xdotool getwindowpid "$(xdotool getwindowfocus)")
资料来源:
答案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
您可以将此命令绑定到某个键。