[gnome-shell/benzea/systemd-3.36-units: 4/5] data: Create generic org.gnome.Shell.target



commit 3f8079476c50f5d8e39ee87cf8ae5bb451d94a33
Author: Benjamin Berg <bberg redhat com>
Date:   Tue Jun 9 13:01:39 2020 +0200

    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 ----------
 ...{org.gnome.Shell-wayland.target => org.gnome.Shell.target} |  4 ++--
 ...-wayland.service.in => org gnome Shell wayland service in} |  9 +++++++--
 ...me.Shell-x11.service.in => org gnome Shell x11 service in} |  8 ++++++++
 5 files changed, 22 insertions(+), 20 deletions(-)
---
diff --git a/data/meson.build b/data/meson.build
index da9d704f75..25a81422f8 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-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 2cb2c2e60e..358189f26f 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 98c8aa123a..28ef7154db 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 f3c6b64773..be2d1ff912 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]