diff --git a/data/meson.build b/data/meson.build index da9d704f7..25a81422f 100644 --- a/data/meson.build +++ b/data/meson.build @@ -101,21 +101,20 @@ if have_systemd unitconf.set('bindir', bindir) configure_file( - input: 'org.gnome.Shell-x11.service.in', - output: 'org.gnome.Shell-x11.service', + input: 'org.gnome.Shell@x11.service.in', + output: 'org.gnome.Shell@x11.service', configuration: unitconf, install_dir: systemduserunitdir ) configure_file( - input: 'org.gnome.Shell-wayland.service.in', - output: 'org.gnome.Shell-wayland.service', + input: 'org.gnome.Shell@wayland.service.in', + output: 'org.gnome.Shell@wayland.service', configuration: unitconf, install_dir: systemduserunitdir ) - units = files('org.gnome.Shell-x11.target', - 'org.gnome.Shell-wayland.target', + units = files('org.gnome.Shell.target', 'org.gnome.Shell-disable-extensions.service') install_data(units, install_dir: systemduserunitdir) diff --git a/data/org.gnome.Shell-x11.target b/data/org.gnome.Shell-x11.target deleted file mode 100644 index 02d61822b..000000000 --- a/data/org.gnome.Shell-x11.target +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=GNOME Shell on X11 -DefaultDependencies=no - -Requisite=gnome-session-initialized.target -PartOf=gnome-session-initialized.target -Before=gnome-session-initialized.target - -Requires=org.gnome.Shell-x11.service -After=org.gnome.Shell-x11.service diff --git a/data/org.gnome.Shell-wayland.target b/data/org.gnome.Shell.target similarity index 70% rename from data/org.gnome.Shell-wayland.target rename to data/org.gnome.Shell.target index 2cb2c2e60..358189f26 100644 --- a/data/org.gnome.Shell-wayland.target +++ b/data/org.gnome.Shell.target @@ -6,5 +6,5 @@ Requisite=gnome-session-initialized.target PartOf=gnome-session-initialized.target Before=gnome-session-initialized.target -Requires=org.gnome.Shell-wayland.service -After=org.gnome.Shell-wayland.service +Wants=org.gnome.Shell@wayland.service +Wants=org.gnome.Shell@x11.service diff --git a/data/org.gnome.Shell-wayland.service.in b/data/org.gnome.Shell@wayland.service.in similarity index 72% rename from data/org.gnome.Shell-wayland.service.in rename to data/org.gnome.Shell@wayland.service.in index 98c8aa123..28ef7154d 100644 --- a/data/org.gnome.Shell-wayland.service.in +++ b/data/org.gnome.Shell@wayland.service.in @@ -15,13 +15,18 @@ Before=gnome-session-initialized.target [Service] Type=notify +# NOTE: This can be replaced with ConditionEnvironment=XDG_SESSION_TYPE=%I +# with systemd >= 245. Also, the current solution is kind of painful +# as systemd had a bug where it retries the condition. +# Only start if the template instance matches the session type. +ExecCondition=/bin/sh -c 'test "$XDG_SESSION_TYPE" = "%I" || exit 2' ExecStart=@bindir@/gnome-shell +# Exit code 1 means we are probably *not* dealing with an extension failure +SuccessExitStatus=1 # unset some environment variables that were set by the shell and won't work now that the shell is gone ExecStopPost=-systemctl --user unset-environment GNOME_SETUP_DISPLAY WAYLAND_DISPLAY DISPLAY XAUTHORITY -# Exit code 1 means we are probably *not* dealing with an extension failure -SuccessExitStatus=1 # On wayland we cannot restart Restart=no # Kill any stubborn child processes after this long diff --git a/data/org.gnome.Shell-x11.service.in b/data/org.gnome.Shell@x11.service.in similarity index 69% rename from data/org.gnome.Shell-x11.service.in rename to data/org.gnome.Shell@x11.service.in index f3c6b6477..be2d1ff91 100644 --- a/data/org.gnome.Shell-x11.service.in +++ b/data/org.gnome.Shell@x11.service.in @@ -19,9 +19,17 @@ StartLimitBurst=3 [Service] Type=notify +# NOTE: This can be replaced with ConditionEnvironment=XDG_SESSION_TYPE=%I +# with systemd >= 245. Also, the current solution is kind of painful +# as systemd had a bug where it retries the condition. +# Only start if the template instance matches the session type. +ExecCondition=/bin/sh -c 'test "$XDG_SESSION_TYPE" = "%I" || exit 2' ExecStart=@bindir@/gnome-shell # Exit code 1 means we are probably *not* dealing with an extension failure SuccessExitStatus=1 + +# On X11 we do not need to unset any variables + # On X11 we want to restart on-success (Alt+F2 + r) and on-failure. Restart=always # Do not wait before restarting the shell