2012-12-12 11 views
7

Ho un servizio per un processo che non desidero avviare al momento dell'avvio, ma per chiamarlo in qualche modo da un'altra applicazione già in esecuzione, in un dato momento.Avvia il servizio systemd dall'applicazione C/C++ o chiama un servizio D-Bus

L'altra opzione sarebbe quella di inserire un file di servizio D-Bus (sto usando glib dbus nelle mie app) in/usr/share/dbus-1/services e in qualche modo chiamarlo dalla mia applicazione. Inoltre, non riesco a farlo neanche io.

Diciamo che il mio servizio di file dbus da /usr/share/dbus-1/services è com.callThis.service e il mio servizio di file principale da /lib/systemd/system is com.startThis.service

Se eseguo una semplice introspect da linea di comando:

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

il file del servizio D-Bus verrà chiamato e inizierà ciò che è in Exec (com.starThis). Il problema è che voglio ottenere questo dal codice C/C++ usando glib D-Bus.

+0

Hai provato a implementarlo? Mostra alcuni primi passi che hai fatto. Un sacco di documentazione e anche un esempio possono essere trovati http://developer.gnome.org/gio/2.30/GDBusConnection.html – drahnr

+1

http://www.freedesktop.org/wiki/Software/systemd/dbus/ Ecco le informazioni su API DBUS di 'systemd' –

risposta

0

Ho avuto problemi a fare la stessa cosa. La scoperta di: G_BUS_NAME_WATCHER_FLAGS_AUTO_START lo risolve.

g_bus_watch_name(G_BUS_TYPE_SYSTEM, "com.mydbus.listen", 
     G_BUS_NAME_WATCHER_FLAGS_AUTO_START, xOnNameAppeared, xOnNameVanished, 
     this, nullptr); 
Problemi correlati