如何找出 Linux 上正在运行的 GUI 应用程序的名称和路径?

如何找出 Linux 上正在运行的 GUI 应用程序的名称和路径?

我有兴趣进一步了解我的系统。例如,启动 GUI 应用程序“打印”。标题中有一个闪亮的好听的名字。

/usr/bin 中没有文件“printing”。

是否有一些技巧可以在文件系统中显示应用程序的真实名称而不是“打印”,例如“printinggui”?

答案1

通常 GUI 应用程序是通过“启动器”启动的,即。桌面文件。您在菜单中看到的是“打印”,而不是真实名称,因为这是应用程序的“通用名称”(详细信息请参阅我发布的链接)。根据您使用的 DE,您可能能够右键单击菜单项并选择Edit或,Properties这将允许您查看可执行路径,有时还可以看到该应用程序的真实名称。这在 Gnome 3 等 DE 中是不可能的,因此这里有一个无论您的 DE 是什么都应该有效的解决方案。

.desktop文件位于/usr/share/applications如此简单的grep-ing通用名称=打印应该列出至少一个包含该字符串的启动器。

例如,我的系统上没有“打印”,但有“文本编辑器”。我想知道应用程序/可执行文件的真实名称,因此我运行:

grep "GenericName=Text Editor" /usr/share/applications/*

输出:

/usr/share/applications/gedit.desktop:GenericName=Text Editor

因此,“文本编辑器”的“启动器”是/usr/share/applications/gedit.desktop。现在,为了知道“文本编辑器”的真实名称和可执行文件,我必须 grep 两个键的值:NameExec

grep -E '(^Name=|^Exec=)' /usr/share/applications/gedit.desktop 

输出:

Name=gedit
Exec=gedit %U

对于可执行文件的完整路径,这只是一个运行的问题:

which gedit

返回结果:

/usr/bin/gedit

答案2

我将上面的答案转置到脚本中执行命令Gnome3.sh如下所示。我使用此实用程序来找出如何从我知道其 gnome shell 名称的终端调用应用程序。

#!/bin/bash
#
# Name: execCmdGnome3.sh
# Usage e.g.: sudo execCmdGnome3.sh "Document Viewer" 
# Output: Found Launcher: "evince.desktop"
#         Name=Document Viewer
#         Exec=evince %U

launcher=`grep "$1" /usr/share/applications/* | sed s/.*applications.// | sed s/:.*// | uniq`
echo "Found Launcher: \"$launcher\""
grep -E '(^Name=|^Exec=)' "/usr/share/applications/$launcher"

相关内容