shell: Check we are in a systemd environment before starting systemd units
Avoid starting/stopping the gsd-xsettings systemd unit if the shell itself was not started via systemd. In the lack of a user session manager, we have no means to neatly start/stop services, so should rely on the good ol' gnome-session to do this for us. This changes the return value meaning slightly, TRUE means "service did start", FALSE otherwise. The error is only raised if we ought to start, but it produced an error somehow. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1238 https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2755
This commit is contained in:
parent
894ca0dd07
commit
57e67e0f31
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
#ifdef HAVE_SYSTEMD
|
#ifdef HAVE_SYSTEMD
|
||||||
#include <systemd/sd-daemon.h>
|
#include <systemd/sd-daemon.h>
|
||||||
|
#include <systemd/sd-login.h>
|
||||||
#else
|
#else
|
||||||
/* So we don't need to add ifdef's everywhere */
|
/* So we don't need to add ifdef's everywhere */
|
||||||
#define sd_notify(u, m) do {} while (0)
|
#define sd_notify(u, m) do {} while (0)
|
||||||
@ -659,7 +660,27 @@ shell_util_systemd_call (const char *command,
|
|||||||
const char *mode,
|
const char *mode,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_SYSTEMD
|
||||||
g_autoptr (GDBusConnection) connection = NULL;
|
g_autoptr (GDBusConnection) connection = NULL;
|
||||||
|
g_autofree char *self_unit = NULL;
|
||||||
|
int res;
|
||||||
|
|
||||||
|
res = sd_pid_get_user_unit (getpid (), &self_unit);
|
||||||
|
|
||||||
|
if (res == -ENODATA)
|
||||||
|
{
|
||||||
|
g_debug ("Not systemd-managed, not doing '%s' on '%s'", mode, unit);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else if (res < 0)
|
||||||
|
{
|
||||||
|
g_set_error (error,
|
||||||
|
G_IO_ERROR,
|
||||||
|
g_io_error_from_errno (-res),
|
||||||
|
"Error trying to start systemd unit '%s': %s",
|
||||||
|
unit, g_strerror (-res));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error);
|
connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error);
|
||||||
|
|
||||||
@ -678,7 +699,9 @@ shell_util_systemd_call (const char *command,
|
|||||||
-1, NULL,
|
-1, NULL,
|
||||||
on_systemd_call_cb,
|
on_systemd_call_cb,
|
||||||
(gpointer) command);
|
(gpointer) command);
|
||||||
return TRUE;
|
#endif /* HAVE_SYSTEMD */
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
Loading…
Reference in New Issue
Block a user