![我如何才能知道正在运行的应用程序(实际名称,而不是发布的名称)?](https://linux22.com/image/994456/%E6%88%91%E5%A6%82%E4%BD%95%E6%89%8D%E8%83%BD%E7%9F%A5%E9%81%93%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%EF%BC%88%E5%AE%9E%E9%99%85%E5%90%8D%E7%A7%B0%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E5%8F%91%E5%B8%83%E7%9A%84%E5%90%8D%E7%A7%B0%EF%BC%89%EF%BC%9F.png)
今天早上,我经历了漫长而繁琐的过程,试图识别正在运行的应用程序。我本来是想今天早上报告一个错误,但我最终却在 AskUbuntu 上发布了一个问题。
这次我偶然找到了答案。
我尝试启动gnome-system-monitor
(发布的名称:“系统监视器”),但我无法确定我正在寻找的应用程序。
我尝试进入应用程序菜单 > 关于,但那里没有显示应用程序的实际名称。这是gnome-software
> 关于的屏幕截图,其中仅显示“Ubuntu Software”的发布名称。
我在网上搜索了“ubuntu 软件”,看看是否有搜索结果显示该应用程序的名称。我发现维基百科页面上面写着“开发已于 2015 年结束,在 Ubuntu 16.04 LTS 中它被 GNOME 软件取代”。我点击了链接GNOME 软件但应用程序的名称也没有显示在那里。
因此我无法报告该错误,所以我来到了 AskUbuntu。我搜索了“ubuntu 软件”,并在某处看到了“gnome-software”这个名字。
我打开了一个终端,使用命令gnome-software
,然后正确的应用程序启动了。
我最终在 AskUbuntu 上提问而不是报告错误。但是,在过去 10 年左右的时间里,我多次遇到过同样的问题,我非常希望一劳永逸地解决这个问题。
有没有一种快速简便的方法来识别实际的当前正在运行的应用程序的名称?
PS 该问题被标记为重复“该问题在这里已经有答案了:
如何确定应用程序的进程名称?1 个答案”,这实际上回答了我的问题“有没有一种快速简便的方法来识别实际的当前正在运行的应用程序的名称?“,但实际上我从@waltinator 收到的答案似乎提供了一种方法(通过xprop
命令)。
答案1
使用xwininfo
(参见man xwininfo
)x11-utils
包中的。为了演示,我xwininfo -all
在一个终端窗口中运行,然后按照提示单击此窗口。它所说的第一部分是:
$ xwininfo -all
xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.
xwininfo: Window id: 0x4600007 "unity - How can I find out what app is running (actual name, not published name)? - Ask Ubuntu"
Root window id: 0x7d (the root window) "QupZilla"
Parent window id: 0x2403a37 (has no name)
1 child:
0x4600008 (has no name): () 1x1+-1+-1 +65+51
Absolute upper-left X: 66
Absolute upper-left Y: 52
Relative upper-left X: 0
Relative upper-left Y: 0
Width: 1696
Height: 1148
Depth: 24
...
还有xlsclients
和xprop
(见man page
)可能有用。
答案2
据我所知,没有默认的方法可以做到这一点。
在命令行上,您可以使用它xprop
来获取有关窗口的信息(光标将会改变,并且您需要单击该窗口)。
输出通常有一行以 开头,_NET_WM_PID
其中包含程序的 PID,您可以使用例如
ps -o comm -p THE_PID
找到该程序的命令。
你可以将所有这些放在一个 shell 脚本中并用于zenity
图形显示:
#!/bin/sh
zenity --info --text "$(ps --no-headers -o comm -p $(xprop | awk '/^_NET_WM_PID/ {print $3}'))"
将其保存为文件某处,使其可执行并为其分配热键。
我想有些情况下它不起作用或显示错误的结果但通常它至少应该是有帮助的。
答案3
尝试
grep -i "access prompt" /usr/share/applications/*.desktop
/usr/share/applications/gcr-prompter.desktop:Name=Access Prompt
在这个例子中,应用程序的“通用”名称是Access Prompt
,并且在输出中显示的名称ps -o pid,ppid,stime,time,command -u $USER
类似于gcr-prompter
。
这种方法有两个限制:
- 它只查找/usr/share/applications
(因为大多数 .desktop 文件都位于其中)。但有些 .desktop 文件可能只位于 中~/.local/share/applications
。
- 根据您如何定义“应用程序”,有些应用程序可能没有 .desktop 文件。在这种情况下,应用程序的“通用”名称和实际名称将相同。