2012-12-12 45 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);