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:
parent
6dccbc5a90
commit
9194de8460
@ -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);
|
||||||
|
}
|
||||||
|
@ -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__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user