在鼠标下找到应用程序


11

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

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

Answers:


11

使用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)")

资料来源:

/unix//q/38867/29245

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

/superuser//q/632979/170160


1
+1是个不错的答案。如果PID是主应用程序的子级,则可以建议使用pstree -a -s -l -p -u $PID它是非常好的...
Rmano 2014年

@Rmano:哦,这很干净!我将其添加到答案中。
谷氨酰胺

echo $()在你的命令是没有必要的。
暂停,直到另行通知。

@DennisWilliamson感谢您的指导。编辑。
谷氨酰胺

1
xdotool getwindowpid "$(xdotool getwindowfocus)"xdotool getwindowfocus getwindowpid
Veedrac'8

2

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

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

1
+1是一个非常好的解决方案。但是,还有一个较小的问题:如果应用程序未分配适当的WMCLASS(这通常是使用隐秘对话框的情况),则xprop将无济于事。
谷氨酰胺

您是否有一个无法使用的应用程序(弹出窗口)示例,谢谢。
TuKsn 2014年

1
我手头没有什么特别的东西,但是我确实记得有几个Java应用程序以及其他未设置WMCLASS(或设置为类似通用名称java-window)的晦涩程序的问题。前一段时间,当我尝试在窗口管理器配置中实现特定于应用程序的规则时,我遇到了这类问题。
谷氨酰胺

1
您是对的,使用
qml

您如何为此创建键盘快捷键?我尝试过,如下所示,但没有显示出
禅意

2

您可以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"

我试图为最后一个命令创建快捷键(如果您经常需要的话),但是由于某种原因,这不起作用。


0

安装了xdtool和yad之后,您可以拥有一个不错的GUI应用程序。

#!/bin/bash
while true; do cat "/proc/$(xdotool getwindowpid "$(xdotool 
getwindowfocus)")/comm"; sleep 1; echo -e '\f'; done | yad --no- 
buttons --no-focus --geometry 250x10 --fixed --text-info -- 
title="Active window" --listen
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.