shell: Add helpers to start/stop systemd units

These just send the respective DBus message to the systemd user service.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/680
This commit is contained in:
Carlos Garnacho 2019-08-15 13:22:24 +02:00 committed by Carlos Garnacho
parent 6dccbc5a90
commit 9194de8460
2 changed files with 66 additions and 0 deletions

View File

@ -609,3 +609,62 @@ shell_util_check_cloexec_fds (void)
fdwalk (check_cloexec, NULL); fdwalk (check_cloexec, NULL);
g_info ("Open fd CLOEXEC check complete"); g_info ("Open fd CLOEXEC check complete");
} }
static void
on_systemd_call_cb (GObject *source,
GAsyncResult *res,
gpointer user_data)
{
g_autoptr (GVariant) reply = NULL;
g_autoptr (GError) error = NULL;
const gchar *command = user_data;
reply = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source),
res, &error);
if (error)
g_warning ("Could not issue '%s' systemd call", command);
}
static gboolean
shell_util_systemd_call (const char *command,
const char *unit,
const char *mode,
GError **error)
{
g_autoptr (GDBusConnection) connection = NULL;
connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error);
if (connection == NULL)
return FALSE;
g_dbus_connection_call (connection,
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
"org.freedesktop.systemd1.Manager",
command,
g_variant_new ("(ss)",
unit, mode),
NULL,
G_DBUS_CALL_FLAGS_NONE,
-1, NULL,
on_systemd_call_cb,
(gpointer) command);
return TRUE;
}
gboolean
shell_util_start_systemd_unit (const char *unit,
const char *mode,
GError **error)
{
return shell_util_systemd_call ("StartUnit", unit, mode, error);
}
gboolean
shell_util_stop_systemd_unit (const char *unit,
const char *mode,
GError **error)
{
return shell_util_systemd_call ("StopUnit", unit, mode, error);
}

View File

@ -59,6 +59,13 @@ cairo_surface_t * shell_util_composite_capture_images (ClutterCapture *captures
void shell_util_check_cloexec_fds (void); void shell_util_check_cloexec_fds (void);
gboolean shell_util_start_systemd_unit (const char *unit,
const char *mode,
GError **error);
gboolean shell_util_stop_systemd_unit (const char *unit,
const char *mode,
GError **error);
G_END_DECLS G_END_DECLS
#endif /* __SHELL_UTIL_H__ */ #endif /* __SHELL_UTIL_H__ */