From e2f1261292b28235de3e065f65799e7d92666b54 Mon Sep 17 00:00:00 2001 From: David Hewitt Date: Sun, 19 Sep 2021 11:13:07 +0100 Subject: [PATCH] Add systemd support --- meson.build | 4 ++++ meson_options.txt | 3 +++ systemd/gnome-session-x11@pantheon.target | 22 ++++++++++++++++++++++ systemd/meson.build | 12 ++++++++++++ systemd/pantheon-session-x11.target | 20 ++++++++++++++++++++ 5 files changed, 61 insertions(+) create mode 100644 systemd/gnome-session-x11@pantheon.target create mode 100644 systemd/meson.build create mode 100644 systemd/pantheon-session-x11.target diff --git a/meson.build b/meson.build index dfd06e5..41804c3 100644 --- a/meson.build +++ b/meson.build @@ -11,3 +11,7 @@ endif subdir('session') subdir('xsessions') + +if get_option('systemd') + subdir('systemd') +endif diff --git a/meson_options.txt b/meson_options.txt index 7bb7f8f..b798acc 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -6,3 +6,6 @@ option('fallback-session', type : 'string', value: 'ubuntu', option('detect-program-prefixes', type: 'boolean', value: false, description : 'This is needed for platforms that install packages into individual prefixes (like Guix System or NixOS') + +option('systemd', type: 'boolean', value: true, + description : 'Install systemd unit files for managing the Pantheon session with gnome-session systemd support') diff --git a/systemd/gnome-session-x11@pantheon.target b/systemd/gnome-session-x11@pantheon.target new file mode 100644 index 0000000..89dcd4d --- /dev/null +++ b/systemd/gnome-session-x11@pantheon.target @@ -0,0 +1,22 @@ +[Unit] +Description=GNOME X11 Session (session: %i) +OnFailure=gnome-session-failed.target +OnFailureJobMode=replace +DefaultDependencies=no +# Start happens explicitly +RefuseManualStart=no +# Stop happens by starting gnome-session-shutdown.target +#RefuseManualStop=yes + +Conflicts=shutdown.target gnome-session-shutdown.target +PartOf=graphical-session.target + +# As this is the main entry point, pull in the other toplevel gnome-session targets +BindsTo=gnome-session@.target +After=gnome-session@.target + +BindsTo=pantheon-session-x11.target +After=pantheon-session-x11.target + +BindsTo=gnome-session.target +After=gnome-session.target diff --git a/systemd/meson.build b/systemd/meson.build new file mode 100644 index 0000000..75e9bfc --- /dev/null +++ b/systemd/meson.build @@ -0,0 +1,12 @@ +dep_systemd = dependency('systemd', required: true) +systemd_userunitdir = dep_systemd.get_pkgconfig_variable('systemduserunitdir') + +install_data( + 'gnome-session-x11@pantheon.target', + install_dir: systemd_userunitdir +) + +install_data( + 'pantheon-session-x11.target', + install_dir: systemd_userunitdir +) diff --git a/systemd/pantheon-session-x11.target b/systemd/pantheon-session-x11.target new file mode 100644 index 0000000..237086b --- /dev/null +++ b/systemd/pantheon-session-x11.target @@ -0,0 +1,20 @@ +[Unit] +Description=Pantheon X11 Session +# On X11, try to show the fail screen +OnFailure=gnome-session-failed.target +OnFailureJobMode=replace +# Avoid default After/Before rules +DefaultDependencies=no + +Before=gnome-session.target + +PartOf=graphical-session.target +RefuseManualStart=yes +RefuseManualStop=yes + +# Pull in all X11-specific services the session might depend on +Requires=gnome-session-x11-services.target + +# Pull in the correct gala target +BindsTo=gala-x11.target +After=gala-x11.target