unix — запуск службы systemd из приложения C / C ++ или вызов службы D-Bus

У меня есть .service для процесса, который я не хочу запускать во время загрузки, но как-то вызвать его из другого уже запущенного приложения в данный момент времени.

Другой вариант — поместить служебный файл D-Bus (я использую glib dbus в моих приложениях) в / usr / share / dbus-1 / services и каким-то образом вызвать его из моего приложения. Кроме того, мне тоже не удается это сделать.

Допустим, мой сервисный файл dbus от /usr/share/dbus-1/services является 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-Bus, и он запустит то, что находится в Exec (com.starThis). Проблема в том, что я хочу добиться этого из кода C / C ++, используя D-Bus Glib.

7

Решение

Сочетание g_dbus_connection_send_message с g_dbus_message_new_method_call или же g_dbus_message_new_signal должно быть то, что вы ищете.

4

Другие решения

У меня были проблемы, чтобы сделать то же самое. Обнаружение: 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);
0

По вопросам рекламы [email protected]