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
This commit is contained in:
Benjamin Berg 2020-06-09 13:01:39 +02:00 committed by Benjamin Berg
parent b710c6e275
commit 41d5b1455f
5 changed files with 22 additions and 20 deletions

View File

@ -101,21 +101,20 @@ if have_systemd
unitconf.set('bindir', bindir) unitconf.set('bindir', bindir)
configure_file( configure_file(
input: 'org.gnome.Shell-x11.service.in', input: 'org.gnome.Shell@x11.service.in',
output: 'org.gnome.Shell-x11.service', output: 'org.gnome.Shell@x11.service',
configuration: unitconf, configuration: unitconf,
install_dir: systemduserunitdir install_dir: systemduserunitdir
) )
configure_file( configure_file(
input: 'org.gnome.Shell-wayland.service.in', input: 'org.gnome.Shell@wayland.service.in',
output: 'org.gnome.Shell-wayland.service', output: 'org.gnome.Shell@wayland.service',
configuration: unitconf, configuration: unitconf,
install_dir: systemduserunitdir install_dir: systemduserunitdir
) )
units = files('org.gnome.Shell-x11.target', units = files('org.gnome.Shell.target',
'org.gnome.Shell-wayland.target',
'org.gnome.Shell-disable-extensions.service') 'org.gnome.Shell-disable-extensions.service')
install_data(units, install_dir: systemduserunitdir) install_data(units, install_dir: systemduserunitdir)

View File

@ -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

View File

@ -6,5 +6,5 @@ Requisite=gnome-session-initialized.target
PartOf=gnome-session-initialized.target PartOf=gnome-session-initialized.target
Before=gnome-session-initialized.target Before=gnome-session-initialized.target
Requires=org.gnome.Shell-wayland.service Wants=org.gnome.Shell@wayland.service
After=org.gnome.Shell-wayland.service Wants=org.gnome.Shell@x11.service

View File

@ -15,13 +15,18 @@ Before=gnome-session-initialized.target
[Service] [Service]
Type=notify 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 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 # 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 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 # On wayland we cannot restart
Restart=no Restart=no
# Kill any stubborn child processes after this long # Kill any stubborn child processes after this long

View File

@ -19,9 +19,17 @@ StartLimitBurst=3
[Service] [Service]
Type=notify 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 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 X11 we do not need to unset any variables
# On X11 we want to restart on-success (Alt+F2 + r) and on-failure. # On X11 we want to restart on-success (Alt+F2 + r) and on-failure.
Restart=always Restart=always
# Do not wait before restarting the shell # Do not wait before restarting the shell