2012-12-12 47 views
7

我有一个.service进程,我不想在启动时启动,但以某种方式从另一个已经运行的应用程序中调用它,在给定的时间。从C/C++应用程序启动systemd服务或调用D-Bus服务

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

比方说,从/usr/share/dbus-1/services我DBUS服务文件是com.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-巴士服务的文件将被调用,它将启动Exec(com.starThis)中的内容。问题是我想从C/C++代码中使用D-Bus glib来实现这个功能。

+0

您是否尝试过实施它?展示你所做的一些第一步。大量的文档,甚至一个例子可以在http://developer.gnome.org/gio/2.30/GDBusConnection.html – drahnr

+1

http://www.freedesktop.org/wiki/Software/systemd/dbus/这里是信息'systemd'的DBUS API –

回答

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);