在 Linux 系统中,谁调用了我的 DBus API


介绍

DBus 是一种广泛使用的消息总线系统,它简化了 Linux 操作系统上不同软件应用程序之间的通信。它用于进程间通信 (IPC),并允许应用程序相互通信,即使它们在不同的上下文中运行。但是,确定哪个应用程序或进程正在调用特定的 DBus API 可能很困难。在本文中,我们将探讨在 Linux 上识别 DBus API 调用者 的不同方法。

什么是 DBus?

DBus 是一个用于 Linux 系统中进程间通信 (IPC) 的消息总线系统。它是一种低级异步协议,使不同的软件应用程序能够相互通信。DBus 被 Linux 上许多应用程序使用,包括 GNOME 和 KDE 桌面环境,以及许多其他需要相互通信的程序。

DBus 使用客户端-服务器架构,其中 DBus 守护进程充当服务器,应用程序充当客户端。守护进程维护可用服务的列表,并为客户端提供一种向这些服务发送消息的方法。DBus 还支持消息过滤,以便客户端只能接收他们感兴趣的消息。

Learn Linux/Unix in-depth with real-world projects through our Linux/Unix certification course. Enroll and become a certified expert to boost your career.

为什么难以识别 DBus API 调用者?

虽然 DBus 是一个有用且广泛使用的系统,但确定哪个应用程序或进程正在调用特定的 DBus API 可能很困难。这是因为 DBus 设计为异步且非阻塞的,这意味着多个客户端可以同时向服务发送消息。此外,消息可以由其他应用程序转发,这使得确定原始消息来自何处变得更加困难。

有几种方法可以识别 DBus API 调用者,每种方法都有其优点和缺点。我们将在下面探讨其中一些方法。

方法 1:使用 dbus-monitor

dbus-monitor 工具是一个命令行实用程序,用于显示通过 DBus 系统发送的所有消息。它可用于识别哪个进程或应用程序正在调用特定的 DBus API。要使用 dbus-monitor,请打开一个终端窗口并键入以下命令

dbus-monitor --session "interface='org.freedesktop.DBus',member='NameOwnerChanged'"

此命令将显示通过 DBus 会话总线发送的所有消息,并使用一个过滤器,该过滤器仅显示与 org.freedesktop.DBus 接口和 NameOwnerChanged 成员相关的消息。每当应用程序声明或释放 DBus 名称时,都会调用此成员,这可用于识别特定 DBus API 的调用者。

例如,如果一个应用程序正在调用 org.gnome.SettingsDaemon 接口来更改设置,则可以使用 dbus-monitor 通过运行以下命令来识别调用者

dbus-monitor --session "interface='org.freedesktop.DBus',member='NameOwnerChanged'" | grep org.gnome.SettingsDaemon

此命令将显示通过 DBus 系统发送的所有与 org.gnome.SettingsDaemon 接口相关的消息。NameOwnerChanged 成员将告诉您何时应用程序已声明或释放此接口,这可以帮助您识别 API 的调用者。

方法 2:使用 D-Feet

D-Feet 是一款图形工具,允许您浏览和与 DBus 系统交互。它可用于通过检查不同应用程序发送和接收的消息来识别 DBus API 的调用者。

要使用 D-Feet,请打开一个终端窗口并键入以下命令 -

sudo apt-get install d-feet

此命令将在您的 Linux 系统上安装 D-Feet 工具。安装完成后,您可以从应用程序菜单启动它,或在终端窗口中键入以下命令

d-feet

D-Feet 提供了一个图形界面,允许您浏览 DBus 系统并查看可用的服务及其接口。您还可以检查不同应用程序发送和接收的消息,这可以帮助您识别特定 DBus API 的调用者。

要使用 D-Feet 识别 DBus API 的调用者,请按照以下步骤操作 -

  • 从应用程序菜单或通过在终端窗口中键入“d-feet”启动 D-Feet。

  • 在 D-Feet 窗口中,单击“会话总线”选项卡以查看可用的服务。

  • 找到您感兴趣的服务并展开它以查看其接口。

  • 单击您感兴趣的接口以查看其方法。

  • 单击您感兴趣的方法以查看不同应用程序发送和接收的消息。

  • 检查消息以查看哪个应用程序或进程正在调用该方法。

D-Feet 可以是识别 DBus API 调用者的有用工具,尤其是在您更喜欢图形界面而不是像 dbus-monitor 这样的命令行工具时。

方法 3:使用进程监控工具

识别 DBus API 调用者的另一种方法是使用进程监控工具,如 top、htop 或 ps。这些工具允许您查看 Linux 系统上运行的进程及其资源使用情况。

要使用这些工具识别 DBus API 的调用者,请按照以下步骤操作 -

  • 打开一个终端窗口并键入“top”以启动 top 实用程序。

  • 按“Shift + H”键以树状视图显示进程。

  • 查找正在使用 DBus 系统的进程并展开它以查看其子进程。

  • 查找正在进行 DBus API 调用的子进程。

  • 记下正在进行调用的应用程序或进程的名称。

或者,您可以使用 htop 或 ps 实用程序查看 Linux 系统上运行的进程及其资源使用情况。这些工具可用于识别 DBus API 的调用者,尤其是在您更喜欢命令行界面而不是像 D-Feet 这样的图形工具时。

结论

识别 DBus API 的调用者可能具有挑战性,但是您可以使用多种方法来完成此任务。dbus-monitor 工具可用于监视通过 DBus 系统发送的消息,而 D-Feet 提供了一个图形界面来浏览和检查 DBus 系统。进程监控工具(如 top、htop 和 ps)也可用于识别特定 DBus API 的调用者。

每种方法都有其优点和缺点,因此选择最适合您需求的方法非常重要。有了这些工具,您可以轻松识别 DBus API 的调用者并解决 Linux 系统中可能出现的任何问题。

更新于: 2023 年 3 月 3 日

532 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告