Запустите службу 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.


person Cumatru    schedule 12.12.2012    source источник
comment
Вы пытались это реализовать? Покажите, какие первые шаги вы сделали. Много документации и даже пример можно найти developer.gnome.org/gio/2.30/ GDBusConnection.html   -  person drahnr    schedule 12.02.2013
comment
freedesktop.org/wiki/Software/systemd/dbus Здесь находится информация о DBUS API systemd   -  person Sergey Kanaev    schedule 25.11.2013


Ответы (2)


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

person drahnr    schedule 12.02.2013

Мне было трудно сделать то же самое. Открытие : 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);
person user3655761    schedule 05.09.2016