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