二进制文件的名称与 GUI 中的名称

二进制文件的名称与 GUI 中的名称

在icedove>首选项>附件中,对于“JEPG图像”,可以选择“图像查看器”或“使用其他...”。事实证明,“Image Viewer”实际上是我系统上的“/usr/bin/eog”。我只知道,因为在命令行上打开 eog 后,单击“帮助>关于”,我看到“图像查看器”...“GNOME 图像查看器”。它不给你任何关于实际二进制文件是什么的线索,所以,当程序“通过”它在icedove中的“图像查看器”名称打开时,你到底如何知道实际二进制文件是什么?某处是否有一些表格,或者一些关联列表之类的?上面只是一个例子,这个问题在所有的GUI中都存在。这是一个悲伤的例子,Linux 努力变得像 Windows 一样愚蠢和无助:-(

答案1

在 Unix 世界中X窗口系统(X11)1,没有“应用程序”的概念。有几个概念重叠但不完全匹配:

  • — 您在包管理器中选择用于安装应用程序的名称。如果您不通过包管理器安装它,则可能没有正式的包名称。一个包可能包含多个应用程序。
  • 可执行文件— 为运行应用程序而执行的文件。可执行文件有一个文件名,该文件名可能包含也可能不包含信息(当应用程序的路径为 时/usr/bin/foo,而不是当为/opt/myapp/bin/run或 时/home/alice/work/dev/a.out)。
  • 流程— 内存中应用程序的实例。运行可执行文件会创建一个进程。究竟什么可以被认为是进程名称是复杂的并且在某种程度上依赖于系统,我不会在这里充分讨论它。在大多数情况下,您可以将进程名称视为可执行文件的文件名。
  • 顶层视窗— 根据“GUI”的定义,GUI 程序至少创建其中之一。一个窗口有几个关心某种名称的东西,所有这些都可以检索为特性并且有一些容易误导的名字:

    • WM_NAME实际上是窗口的标题。这是窗口管理器在标题栏和任务列表中显示的内容。它应该是人类可读的,并且在窗口的生命周期内经常更改(例如,当打开不同的文件、切换到另一个选项卡时等)。
    • WM_ICON_NAME与 类似WM_NAME,但在显示代表窗口的图标时使用。
    • WM_CLASS是一对名称,即实例名称和类名称。这些名称由配置机制使用,例如X资源;看配置文件中的“Xterm”或“xterm”进行简短介绍。默认情况下,这些名称通常是相同的,只是类是大写的,而实例不是大写的。我认为类名称是“应用程序名称”的最佳竞争者 - 但程序可能会显示具有不同类的多个顶级窗口。
  • 应用程序可能有一个菜单,其中包含名为“关于”的项目,该菜单显示包含名称的窗口。它放置的内容纯粹是应用程序开发人员的选择。

进程查看器,不仅是基于文本的(例如pstop和 )htop,而且还包括大多数 GUI 查看器(例如 gnome-system-properties 和 lxtask),仅显示有关进程的信息,而不显示有关顶级窗口的信息。

这是有技术原因的:没有可靠的方法来识别哪个进程显示哪个窗口。在同一个窗口中绘制多个进程是可能的,但非常不寻常。更常见的是,可能没有进程显示窗口,因为 X11 是网络透明的 — 应用程序可以通过网络向显示接口(X 服务器)发送指令。也没有万无一失的机制来跟踪远程连接创建的窗口。

如果应用程序是协作的(并且大多数都是协作的),则两个窗口属性允许您将窗口跟踪到进程:

  • _NET_WM_PID:创建窗口的进程的进程ID。
  • WM_CLIENT_MACHINE:进程运行所在机器的主机名。

什么进程创建了这个 X11 窗口?更多细节。您可以_NEW_WM_PID使用命令行工具查询属性,例如xprop,xdotool,wmctrl等。使用xprop,您可以显示所有属性。使用xdotoolxprop,单击窗口以显示有关它的信息。wmctrl可以列出所有窗口的信息。

xprop _NET_WM_PID WM_CLIENT_MACHINE  # and click on a window
xdotool selectwindow getwindowpid    # and click on a window
wmctrl -lp

给定进程 ID,您可以获得有关进程的信息,例如其可执行​​文件的路径。例如,运行以下命令,然后单击窗口即可显示有关显示该窗口的应用程序的信息。

ps -o args= -p $(xdotool selectwindow getwindowpid)

要查看可执行文件的路径,在 Linux 下:

readlink /proc/$(xdotool selectwindow getwindowpid)/exe

¹有些项目(例如 Wayland 和 Mir)致力于取代 X11,但考虑到 X11 存在多少应用程序,它们进展缓慢,并且只有在保持足够的兼容性的情况下才可行。

答案2

如果您想查看二进制执行文件的完整路径,只需在终端中执行

which programm_name

您可以在以下位置找到一般关联列表$HOME/.local/share/applications/mimeapps.list

相关内容