[gnome-shell/benzea/systemd-user-units: 6/9] data: Update systemd units
- From: Benjamin Berg <bberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/benzea/systemd-user-units: 6/9] data: Update systemd units
- Date: Fri, 2 Aug 2019 08:00:52 +0000 (UTC)
commit 1556f398eace5f42391d8989cd129784d8262d24
Author: Benjamin Berg <bberg redhat com>
Date: Sat Apr 20 00:21:55 2019 +0200
data: Update systemd units
The existing units were never used as the corresponding support was
never merged into gnome-session.
This commits updates units to be usable with the newer gnome-session
unit definitions. Also added is appropriate failure/restart logic
including the ability to disable extensions. Note that extensions will
only be disabled if a failure happens in the first two minutes after
login.
https://gitlab.gnome.org/GNOME/gnome-session/merge_requests/13
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/507
data/gnome-shell-disable-extensions.service | 16 +++++++++++
...me-shell-extensions-disabled-warning.service.in | 13 +++++++++
data/gnome-shell-wayland.service.in | 23 ++++++++++++++++
data/gnome-shell-wayland.target | 15 +++++++---
data/gnome-shell-x11.service.in | 32 ++++++++++++++++++++++
data/gnome-shell-x11.target | 15 +++++++---
data/gnome-shell.service.in | 11 --------
data/meson.build | 25 +++++++++++++----
8 files changed, 126 insertions(+), 24 deletions(-)
---
diff --git a/data/gnome-shell-disable-extensions.service b/data/gnome-shell-disable-extensions.service
new file mode 100644
index 000000000..715af0595
--- /dev/null
+++ b/data/gnome-shell-disable-extensions.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=Disable GNOME Shell extensions after failure
+DefaultDependencies=no
+
+# Only disable extensions for a short period of time after login.
+# This means we err on the side of failing the first login after a broken
+# extension was installed.
+Requisite=gnome-session-stable.timer
+
+[Service]
+Type=simple
+# Disable extensions and touch a file; if disabling fails for whatever
+# reason then the file will not be touched.
+ExecStartPre=gsettings set org.gnome.shell disable-user-extensions true
+ExecStart=/bin/touch %E/gnome-shell-extensions-disabled-warning
+Restart=no
diff --git a/data/gnome-shell-extensions-disabled-warning.service.in
b/data/gnome-shell-extensions-disabled-warning.service.in
new file mode 100644
index 000000000..041bc086d
--- /dev/null
+++ b/data/gnome-shell-extensions-disabled-warning.service.in
@@ -0,0 +1,13 @@
+[Unit]
+Description=Warn about GNOME Shell extensions being disabled
+ConditionPathExists=%E/gnome-shell-extensions-disabled-warning
+
+Requisite=gnome-session.target
+After=gnome-session.target
+
+[Service]
+Type=simple
+ExecStartPre=-/bin/rm %E/gnome-shell-extensions-disabled-warning
+ExecStart=@bindir@/gnome-shell-extension-prefs --disabled-warning
+Restart=no
+
diff --git a/data/gnome-shell-wayland.service.in b/data/gnome-shell-wayland.service.in
new file mode 100644
index 000000000..ce31bad03
--- /dev/null
+++ b/data/gnome-shell-wayland.service.in
@@ -0,0 +1,23 @@
+[Unit]
+Description=GNOME Shell on Wayland
+# On wayland, force a session shutdown
+OnFailure=gnome-shell-disable-extensions.service gnome-session-shutdown.target
+OnFailureJobMode=replace-irreversibly
+CollectMode=inactive-or-failed
+RefuseManualStart=on
+RefuseManualStop=on
+
+After=gnome-session-manager.target
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
+
+# The units already conflict because they use the same BusName
+#Conflicts=gnome-shell-x11.service
+
+[Service]
+Type=dbus
+ExecStart=@bindir@/gnome-shell
+Restart=no
+BusName=org.gnome.Shell
diff --git a/data/gnome-shell-wayland.target b/data/gnome-shell-wayland.target
index a75da3ec7..31619c2e5 100644
--- a/data/gnome-shell-wayland.target
+++ b/data/gnome-shell-wayland.target
@@ -1,5 +1,12 @@
[Unit]
-Description=GNOME Shell (wayland sync point)
-After=gnome-shell.service
-BindsTo=gnome-shell.service
-Conflicts=gnome-shell-x11.target
+Description=GNOME Shell on Wayland
+DefaultDependencies=no
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
+
+Requires=gnome-shell-wayland.service
+After=gnome-shell-wayland.service
+
+Wants=gnome-shell-extensions-disabled-warning.service
diff --git a/data/gnome-shell-x11.service.in b/data/gnome-shell-x11.service.in
new file mode 100644
index 000000000..142f26b24
--- /dev/null
+++ b/data/gnome-shell-x11.service.in
@@ -0,0 +1,32 @@
+[Unit]
+Description=GNOME Shell on X11
+# On X11, try to show the GNOME Session Failed screen
+OnFailure=gnome-shell-disable-extensions.service gnome-session-failed.target
+OnFailureJobMode=replace
+CollectMode=inactive-or-failed
+RefuseManualStart=on
+RefuseManualStop=on
+
+After=gnome-session-manager.target
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
+
+# The units already conflict because they use the same BusName
+#Conflicts=gnome-shell-wayland.service
+
+# Limit startup frequency more than the default
+StartLimitIntervalSec=15s
+StartLimitBurst=3
+
+[Service]
+Type=dbus
+ExecStart=@bindir@/gnome-shell
+# Exit code 1 means we are probably *not* dealing with an extension failure
+SuccessExitStatus=1
+# On X11 we want to restart on-success (Alt+F2 + r) and on-failure.
+Restart=always
+# Do not wait before restarting the shell
+RestartSec=0ms
+BusName=org.gnome.Shell
diff --git a/data/gnome-shell-x11.target b/data/gnome-shell-x11.target
index 4da13509c..80b2bbfdc 100644
--- a/data/gnome-shell-x11.target
+++ b/data/gnome-shell-x11.target
@@ -1,5 +1,12 @@
[Unit]
-Description=GNOME Shell (x11 sync point)
-After=gnome-shell.service
-BindsTo=gnome-shell.service
-Conflicts=gnome-shell-wayland.target
+Description=GNOME Shell on X11
+DefaultDependencies=no
+
+Requisite=gnome-session-initialized.target
+PartOf=gnome-session-initialized.target
+Before=gnome-session-initialized.target
+
+Requires=gnome-shell-x11.service
+After=gnome-shell-x11.service
+
+Wants=gnome-shell-extensions-disabled-warning.service
diff --git a/data/meson.build b/data/meson.build
index 50d00da2e..5b07ad08d 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -100,15 +100,30 @@ if have_systemd
unitconf = configuration_data()
unitconf.set('bindir', bindir)
- unit = configure_file(
- input: 'gnome-shell.service.in',
- output: 'gnome-shell.service',
+ configure_file(
+ input: 'gnome-shell-x11.service.in',
+ output: 'gnome-shell-x11.service',
+ configuration: unitconf,
+ install_dir: systemd_userunitdir
+ )
+
+ configure_file(
+ input: 'gnome-shell-wayland.service.in',
+ output: 'gnome-shell-wayland.service',
+ configuration: unitconf,
+ install_dir: systemd_userunitdir
+ )
+
+ configure_file(
+ input: 'gnome-shell-extensions-disabled-warning.service.in',
+ output: 'gnome-shell-extensions-disabled-warning.service',
configuration: unitconf,
install_dir: systemd_userunitdir
)
- units = files('gnome-shell-wayland.target',
- 'gnome-shell-x11.target')
+ units = files('gnome-shell-x11.target',
+ 'gnome-shell-wayland.target',
+ 'gnome-shell-disable-extensions.service')
install_data(units, install_dir: systemd_userunitdir)
endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]