todo

Linux 图形应用背后的执行文件:从 Wayland、Looking Glass 到 Nautilus

up:2026-09-14 07:51:26 edit:2026-09-14 07:51:26 view:27

桌面上打开了一个应用,却不知道它对应哪个执行文件,该从哪里找?在 Linux 上,这个问题可以拆成两部分:应用的快捷方式如何启动它,以及正在运行的进程实际执行了哪个文件。

这篇文章从这个问题出发,介绍 Wayland 下识别窗口的方法,再解释 GNOME 的 Alt + F2、Looking Glass,以及文件管理器 Nautilus 的名字。

先区分桌面环境与显示会话

在终端运行:

echo "$XDG_CURRENT_DESKTOP"
echo "$XDG_SESSION_TYPE"

第一项帮助识别 GNOME、KDE 等桌面环境,第二项通常显示 wayland 或 x11。Wayland 并不意味着所有桌面都使用同一种窗口检查工具;GNOME 和 KDE 各有自己的办法。

从快捷方式找到启动命令

应用菜单里的启动项通常来自 .desktop 文件。常见目录包括 /usr/share/applications/~/.local/share/applications/。Flatpak 等安装方式还可能使用自己的导出目录。

例如,查找与 Nautilus 有关的启动项:

rg -il --glob '*.desktop' 'nautilus' \
  /usr/share/applications \
  ~/.local/share/applications 2>/dev/null

这里 rg 是 ripgrep 文本搜索工具;未安装时也可以用文件管理器或其他文本搜索工具查看这些目录。

打开找到的文件,关注 Name=Exec=。下面是格式示例,并非特定发行版的原始配置:

Name=Files
Exec=nautilus %U

Name 是显示名称,Exec 是启动命令。%U 是用于传入多个网址或文件 URI 的占位符,不属于程序路径。若命令没有写绝对路径,会使用桌面环境的 PATH 查找程序。Desktop Entry 规范

可以在终端继续查:

command -v nautilus

若返回的是软链接,用下面的命令解析最终路径:

readlink -f "$(command -v nautilus)"

终端和桌面会话的 PATH 可能不同;Exec 也可能调用启动脚本或 flatpak run。采用 D-Bus 激活的应用还可能通过服务启动。因此,想确认当前进程真正执行了哪个文件,应继续查进程。

从进程找到实际执行文件

在系统监视器中找到目标应用,记下 PID(Process ID,进程标识符)。知道名称时也可以搜索:

pgrep -af -i 'nautilus'

假设目标 PID 为 12345:

# 实际执行文件
readlink -f /proc/12345/exe

# 启动命令和参数
tr '\0' ' ' < /proc/12345/cmdline
printf '\n'

这两项要配合看:Python 图形应用的 exe 可能是 Python 解释器,脚本位置则出现在 cmdline 中。浏览器和 Electron 应用通常有多个进程,要结合参数区分主进程与辅助进程。应用退出后,相应的 /proc/PID 目录也会消失。

想像 xprop 一样,点窗口识别应用怎么办?

X11 下可以运行:

xprop _NET_WM_PID WM_CLASS

然后点击窗口查看进程编号和窗口类名。Wayland 会话中的 XWayland 应用可能仍可使用这个方法,但原生 Wayland 窗口需要桌面合成器提供的接口。

KDE Plasma:直接交互式选择窗口

在终端运行:

qdbus6 org.kde.KWin /KWin org.kde.KWin.queryWindowInfo

然后点击目标窗口。它会返回 captiondesktopFileresourceClasspid 等信息。不同发行版的命令名称也可能是 qdbusqdbus-qt6

这是 KWin 提供的交互式窗口查询,效果很接近 xprop。拿到 PID 后,继续查 /proc/PID/exe 即可。KWin 官方实现

GNOME:使用 Looking Glass

按住 Alt,再按 F2,松开后会出现运行命令框。输入小写的 lg,按回车,就能打开 GNOME Shell 内置的 Looking Glass 检查器。部分键盘需要同时按 Fn 才能输入 F2。

切到 Windows 页,按标题寻找目标窗口。Looking Glass 也有鼠标拾取工具,但拾取到的可能是界面组件;直接从窗口列表查找通常更方便。它包含求值、窗口、错误和扩展等检查入口。GNOME Looking Glass 说明

需要窗口 PID 时,可在 Looking Glass 的 Evaluator 输入框执行下面的 JavaScript。注意:这段代码不在普通终端中执行。

global.get_window_actors().map(a => [
  a.meta_window.get_title(),
  a.meta_window.get_wm_class(),
  a.meta_window.get_pid()
])

结果依次是窗口标题、窗口类名和 PID。窗口系统无法取得的信息可能为空或不可用。GNOME Meta.Window 接口

退出检查器按 Esc;如果正处于拾取或对象检查子界面,先返回,再按 Esc 关闭主面板。关闭检查器不会关闭被检查的应用。

不同 GNOME 版本的界面和内部接口可能变化;lg 也可能受到开发工具设置或管理员策略限制。

Alt + F2 里还能输入什么?

它可以启动程序并传递参数。例如本机安装了对应程序时:

nautilus /tmp
gnome-control-center
gnome-system-monitor
firefox https://www.gnome.org

这些命令分别打开文件夹、系统设置、系统监视器和网页。也可以输入可执行文件的绝对路径。

普通回车启动不会提供一个终端来显示文字输出;管道、重定向、变量展开等也不是直接按完整 Shell 语法处理。需要运行 ls、查看进程、使用 sudo 或组合命令时,打开终端更直观。部分版本支持 Ctrl + Enter 尝试在配置的终端中运行,效果取决于终端配置。

lg 属于 GNOME 内置命令。旧资料中的 r 是部分支持 X11 的 GNOME 版本用于重启 Shell 的命令,不能当作 Wayland 通用的桌面刷新方式;特殊命令集合会随版本改变。GNOME 运行框源码

Looking Glass 和 Nautilus,名字是什么意思?

Looking glass 是英语里“镜子”的旧式说法,lg 就是两个单词的首字母。用“镜子”来记忆这个检查桌面内部状态的工具很形象,但这只是名称的直观解释,并非已经核实的开发者命名典故。

Nautilus 则是“鹦鹉螺”,一种有螺旋外壳的海洋软体动物。GNOME 文件管理器现在面向用户显示为 Files(文件),内部仍保留历史名称 nautilus,所以它的菜单名称和启动命令看起来不一样。GNOME 官方项目说明

常见的命名解释将鹦鹉螺的 shell(外壳)与计算机的 Shell(壳层)联系起来:文件管理器提供图形化交互入口。不过,没有找到最初命名者的直接说明,不宜把这种联想写成确定的历史事实。《海底两万里》的潜艇也叫 Nautilus,同名本身不能证明软件是以那艘潜艇命名的。

日常使用时如何选择

想知道应用怎么启动,查 .desktopExec;想知道它现在实际运行哪个文件,查 /proc/PID/exe 并结合 cmdline。只认识窗口时,KDE 用 KWin 的交互式查询,GNOME 用 Looking Glass。需要查看命令输出时使用终端,单纯打开应用时使用 Alt + F2。

把“窗口”“启动项”和“进程”分开看,桌面上一个图标背后的执行过程就容易查清了。


not in sinaapp