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
This commit is contained in:
parent
da6c154ceb
commit
cf156b469c
@ -17,10 +17,9 @@ Before=gnome-session-initialized.target
|
|||||||
#Conflicts=gnome-shell-x11.service
|
#Conflicts=gnome-shell-x11.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=dbus
|
Type=notify
|
||||||
ExecStart=@bindir@/gnome-shell
|
ExecStart=@bindir@/gnome-shell
|
||||||
# Exit code 1 means we are probably *not* dealing with an extension failure
|
# Exit code 1 means we are probably *not* dealing with an extension failure
|
||||||
SuccessExitStatus=1
|
SuccessExitStatus=1
|
||||||
# On wayland we cannot restart
|
# On wayland we cannot restart
|
||||||
Restart=no
|
Restart=no
|
||||||
BusName=org.gnome.Shell
|
|
||||||
|
@ -21,7 +21,7 @@ StartLimitIntervalSec=15s
|
|||||||
StartLimitBurst=3
|
StartLimitBurst=3
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=dbus
|
Type=notify
|
||||||
ExecStart=@bindir@/gnome-shell
|
ExecStart=@bindir@/gnome-shell
|
||||||
# Exit code 1 means we are probably *not* dealing with an extension failure
|
# Exit code 1 means we are probably *not* dealing with an extension failure
|
||||||
SuccessExitStatus=1
|
SuccessExitStatus=1
|
||||||
@ -29,4 +29,3 @@ SuccessExitStatus=1
|
|||||||
Restart=always
|
Restart=always
|
||||||
# Do not wait before restarting the shell
|
# Do not wait before restarting the shell
|
||||||
RestartSec=0ms
|
RestartSec=0ms
|
||||||
BusName=org.gnome.Shell
|
|
||||||
|
@ -24,6 +24,14 @@
|
|||||||
#include "shell-perf-log.h"
|
#include "shell-perf-log.h"
|
||||||
#include "st.h"
|
#include "st.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_SYSTEMD
|
||||||
|
#include <systemd/sd-daemon.h>
|
||||||
|
#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);
|
extern GType gnome_shell_plugin_get_type (void);
|
||||||
|
|
||||||
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
|
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
|
||||||
@ -524,6 +532,7 @@ main (int argc, char **argv)
|
|||||||
shell_init_debug (g_getenv ("SHELL_DEBUG"));
|
shell_init_debug (g_getenv ("SHELL_DEBUG"));
|
||||||
|
|
||||||
shell_dbus_init (meta_get_replace_current_wm ());
|
shell_dbus_init (meta_get_replace_current_wm ());
|
||||||
|
sd_notify (0, "READY=1");
|
||||||
shell_a11y_init ();
|
shell_a11y_init ();
|
||||||
shell_perf_log_init ();
|
shell_perf_log_init ();
|
||||||
shell_introspection_init ();
|
shell_introspection_init ();
|
||||||
|
Loading…
Reference in New Issue
Block a user