8

我有一个 .service 用于我不想在启动时启动的进程,而是在给定时间从另一个已经运行的应用程序中以某种方式调用它。

另一种选择是将 D-Bus(我在我的应用程序中使用 glib dbus)服务文件放在 /usr/share/dbus-1/services 中,并以某种方式从我的应用程序中调用它。另外,我也无法做到这一点。

假设我的 dbus 服务文件来自/usr/share/dbus-1/servicesiscom.callThis.service 和我的主要服务文件来自/lib/systemd/system is com.startThis.service

如果我从命令行运行一个简单的内省:

/home/root # dbus-send --session --type=method_call --print-reply \
--dest=com.callThis  /com/callThis org.freedesktop.DBus.Introspectable.Introspect

D-Bus 服务文件将被调用,它将启动 Exec ( com.starThis ) 中的内容。问题是我想使用 D-Bus glib 从 C/C++ 代码中实现这一点。

4

2 回答 2

6

g_dbus_connection_send_messageg_dbus_message_new_method_callg_dbus_message_new_signal的组合应该是您正在寻找的。

于 2013-02-12T08:09:00.950 回答
0

我很难做同样的事情。发现:G_BUS_NAME_WATCHER_FLAGS_AUTO_START 解决它。

g_bus_watch_name(G_BUS_TYPE_SYSTEM, "com.mydbus.listen",
      G_BUS_NAME_WATCHER_FLAGS_AUTO_START, xOnNameAppeared, xOnNameVanished,
      this, nullptr);
于 2016-09-05T12:21:35.343 回答