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

Posted

技术标签:

【中文标题】谁在 Linux 系统中调用了我的 DBus API【英文标题】:Who called my DBus API in Linux system 【发布时间】:2011-08-18 14:53:18 【问题描述】:

场景是这样的:

在基于 Linux 的手持设备中,我有一个 C 应用程序,它具有准备好由 3rd 方应用程序调用的 dbus API。 DBus API 在启动期间被调用。

我可以在我的函数中使用任何系统 API 来打印调用者的 ID 并将其保存到 syslog 吗?

提前致谢!

【问题讨论】:

【参考方案1】:

org.freedesktop.DBus 总线上的/org/freedesktop/DBus 对象有两个属于org.freedesktop.DBus 接口的方法(哦,好吧):GetConnectionUnixUserGetConnectionUnixProcessID。两者都接受一个字符串——唯一的连接名称,可以通过调用dbus_message_get_sender(或您的高级 API 包装器提供的任何方法)获得。

【讨论】:

值得指出的是,自从写了这个答案,org.freedesktop.DBus.GetConnectionCredentials方法也被添加了,应该优先使用GetConnectionUnixUserGetConnectionUnixProcessID。这意味着一个方法调用而不是两个,消除了一些竞争条件,并为您提供有关安全标签的附加信息。见规范:dbus.freedesktop.org/doc/…

以上是关于谁在 Linux 系统中调用了我的 DBus API的主要内容,如果未能解决你的问题,请参考以下文章

dbus - 如何设置包含路径

如何使用 dbus/gio 向 bluez 注册个人资料?

dbus和qtdbus

dbus和qtdbus

在gjs中使用GDBus调用DBus方法,没有输出?

在 Python 中检查 Linux 上的 USB 驱动器?