From cf156b469c7d058d951e4ffde64aa1870d4c7917 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Sun, 25 Aug 2019 07:26:12 +0200 Subject: [PATCH] Notify service startup to systemd Using the bus name to notify service startup to systemd has some disadvantages. The main one being that systemd will consider a gnome-shell restart (Alt+F2 r) a service failure and restart the shell, cleaning up all its children (i.e. user launched applications). In the future the shell should launch applications in their own transient unit so that a service restart does not affect applications. Another potential issue is that we must never load gnome-shell-wayland.service and gnome-shell-x11.service at the same time, as systemd does not like two services providing the same bus name. Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1496 https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/690 --- data/gnome-shell-wayland.service.in | 3 +-- data/gnome-shell-x11.service.in | 3 +-- src/main.c | 9 +++++++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/data/gnome-shell-wayland.service.in b/data/gnome-shell-wayland.service.in index 848a3ea32..351571c7f 100644 --- a/data/gnome-shell-wayland.service.in +++ b/data/gnome-shell-wayland.service.in @@ -17,10 +17,9 @@ Before=gnome-session-initialized.target #Conflicts=gnome-shell-x11.service [Service] -Type=dbus +Type=notify ExecStart=@bindir@/gnome-shell # Exit code 1 means we are probably *not* dealing with an extension failure SuccessExitStatus=1 # On wayland we cannot restart Restart=no -BusName=org.gnome.Shell diff --git a/data/gnome-shell-x11.service.in b/data/gnome-shell-x11.service.in index 142f26b24..2c9fec1b5 100644 --- a/data/gnome-shell-x11.service.in +++ b/data/gnome-shell-x11.service.in @@ -21,7 +21,7 @@ StartLimitIntervalSec=15s StartLimitBurst=3 [Service] -Type=dbus +Type=notify ExecStart=@bindir@/gnome-shell # Exit code 1 means we are probably *not* dealing with an extension failure SuccessExitStatus=1 @@ -29,4 +29,3 @@ SuccessExitStatus=1 Restart=always # Do not wait before restarting the shell RestartSec=0ms -BusName=org.gnome.Shell diff --git a/src/main.c b/src/main.c index 6faf9934f..8be1395f7 100644 --- a/src/main.c +++ b/src/main.c @@ -24,6 +24,14 @@ #include "shell-perf-log.h" #include "st.h" +#ifdef HAVE_SYSTEMD +#include +#else +/* So we don't need to add ifdef's everywhere */ +#define sd_notify(u, m) do {} while (0) +#define sd_notifyf(u, m, ...) do {} while (0) +#endif + extern GType gnome_shell_plugin_get_type (void); #define SHELL_DBUS_SERVICE "org.gnome.Shell" @@ -524,6 +532,7 @@ main (int argc, char **argv) shell_init_debug (g_getenv ("SHELL_DEBUG")); shell_dbus_init (meta_get_replace_current_wm ()); + sd_notify (0, "READY=1"); shell_a11y_init (); shell_perf_log_init (); shell_introspection_init ();