From 41d5b1455f012e7f5ed75ce37c3e4cb4d73a97ff Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Tue, 9 Jun 2020 13:01:39 +0200 Subject: [PATCH] data: Create generic org.gnome.Shell.target Move the GNOME shell service file adapation for x11/wayland into the target/service files. This means that the session definition can simply pull in org.gnome.Shell.target, without having to care about whether it is starting an X11 or wayland session. Note that this currently requires fork'ing to do the test. This will however not be needed in the long term when ConditionEnvironment becomes available (see https://github.com/systemd/systemd/pull/15817). We technically do not need to use template units. But doing so means that the unit can be translated to the app id more easily (though it is not yet completely clear how this should look like in the long term). https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/895 --- data/meson.build | 11 +++++------ data/org.gnome.Shell-x11.target | 10 ---------- ...me.Shell-wayland.target => org.gnome.Shell.target} | 4 ++-- ....service.in => org.gnome.Shell@wayland.service.in} | 9 +++++++-- ...-x11.service.in => org.gnome.Shell@x11.service.in} | 8 ++++++++ 5 files changed, 22 insertions(+), 20 deletions(-) delete mode 100644 data/org.gnome.Shell-x11.target rename data/{org.gnome.Shell-wayland.target => org.gnome.Shell.target} (70%) rename data/{org.gnome.Shell-wayland.service.in => org.gnome.Shell@wayland.service.in} (72%) rename data/{org.gnome.Shell-x11.service.in => org.gnome.Shell@x11.service.in} (69%) 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