2012-12-12 26 views
7

Mam .service dla procesu, którego nie chcę uruchamiać w czasie rozruchu, ale jakoś go wywołać z innej już uruchomionej aplikacji, w wyznaczonym czasie.Uruchom usługę systemd z aplikacji C/C++ lub zadzwoń do usługi D-Bus

Inną opcją byłoby umieszczenie pliku usługi D-Bus (używam glib dbus w moich aplikacjach) w/usr/share/dbus-1/services i jakoś zadzwonić z mojej aplikacji. Ponadto nie uda mi się tego zrobić.

Powiedzmy, że mój plik usługi dbus z /usr/share/dbus-1/services jest com.callThis.service i mój główny plik usługi z /lib/systemd/system is com.startThis.service

Jeśli uruchomić prosty introspekcji z wiersza poleceń:

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

plik serwis D-Bus zostanie wywołany i uruchomi to, co jest w Exec (com.starThis). Problem polega na tym, że chcę to osiągnąć z kodu C/C++ za pomocą glib D-Bus.

+0

Czy próbowałeś to zaimplementować? Pokaż pierwsze kroki, które zrobiłeś. Mnóstwo dokumentacji, a nawet przykład można znaleźć http://developer.gnome.org/gio/2.30/GDBusConnection.html – drahnr

+1

http://www.freedesktop.org/wiki/Software/systemd/dbus/ Oto informacje na temat 'systemdy DBUS API –

Odpowiedz

0

Miałem kłopot, aby zrobić to samo. Wykryto: G_BUS_NAME_WATCHER_FLAGS_AUTO_START rozwiązać problem.

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