[gnome-initial-setup/wip/benzea/systemd-user] Add systemd user instance support
- From: Benjamin Berg <bberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-initial-setup/wip/benzea/systemd-user] Add systemd user instance support
- Date: Tue, 23 Apr 2019 12:35:47 +0000 (UTC)
commit 42de94c130a0d644b7cfb420f0271bd39dc84f45
Author: Benjamin Berg <bberg redhat com>
Date: Tue Apr 23 14:31:26 2019 +0200
Add systemd user instance support
This ports GNOME initial setup to start all services using the systemd
user instance rather than relying on the gnome-session internal
management.
data/gnome-initial-setup-copy-worker.desktop.in.in | 1 +
data/gnome-initial-setup-copy-worker.service.in | 15 +++++++++++
data/gnome-initial-setup-first-login.desktop.in.in | 1 +
data/gnome-initial-setup-first-login.service.in | 16 ++++++++++++
data/gnome-initial-setup.service.in | 16 ++++++++++++
data/gnome-welcome-tour.desktop.in.in | 1 +
data/gnome-welcome-tour.service.in | 15 +++++++++++
data/meson.build | 29 +++++++++++++++++++++-
meson.build | 12 +++++++++
meson_options.txt | 6 +++++
10 files changed, 111 insertions(+), 1 deletion(-)
---
diff --git a/data/gnome-initial-setup-copy-worker.desktop.in.in
b/data/gnome-initial-setup-copy-worker.desktop.in.in
index d1ebb66..8f259f9 100644
--- a/data/gnome-initial-setup-copy-worker.desktop.in.in
+++ b/data/gnome-initial-setup-copy-worker.desktop.in.in
@@ -7,3 +7,4 @@ NoDisplay=true
X-GNOME-AutoRestart=false
X-GNOME-Autostart-Phase=EarlyInitialization
AutostartCondition=unless-exists gnome-initial-setup-done
+@systemd_hidden@
diff --git a/data/gnome-initial-setup-copy-worker.service.in b/data/gnome-initial-setup-copy-worker.service.in
new file mode 100644
index 0000000..df43c39
--- /dev/null
+++ b/data/gnome-initial-setup-copy-worker.service.in
@@ -0,0 +1,15 @@
+[Unit]
+Description=GNOME Initial Setup Copy Worker
+
+# Make sure we run really early
+Before=gnome-session-pre.target graphical-session-pre.target
+
+ConditionPathExists=!%E/gnome-initial-setup-done
+
+[Service]
+Type=simple
+ExecStart=@libexecdir@/gnome-initial-setup-copy-worker
+Restart=no
+
+[Install]
+WantedBy=gnome-session.target
diff --git a/data/gnome-initial-setup-first-login.desktop.in.in
b/data/gnome-initial-setup-first-login.desktop.in.in
index 8445e03..a244d5b 100644
--- a/data/gnome-initial-setup-first-login.desktop.in.in
+++ b/data/gnome-initial-setup-first-login.desktop.in.in
@@ -14,3 +14,4 @@ X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-initial-setup
X-GNOME-Bugzilla-Component=general
X-GNOME-Bugzilla-Version=unknown
+@systemd_hidden@
diff --git a/data/gnome-initial-setup-first-login.service.in b/data/gnome-initial-setup-first-login.service.in
new file mode 100644
index 0000000..95b16f2
--- /dev/null
+++ b/data/gnome-initial-setup-first-login.service.in
@@ -0,0 +1,16 @@
+[Unit]
+Description=GNOME Initial Setup
+
+BindsTo=gnome-session.target
+After=gnome-session.target
+
+Conflicts=gnome-session@gnome-initial-setup.target
+ConditionPathExists=!%E/gnome-initial-setup-done
+
+[Service]
+Type=simple
+ExecStart=@libexecdir@/gnome-initial-setup --existing-user
+Restart=never
+
+[Install]
+WantedBy=gnome-session.target
diff --git a/data/gnome-initial-setup.service.in b/data/gnome-initial-setup.service.in
new file mode 100644
index 0000000..24b0632
--- /dev/null
+++ b/data/gnome-initial-setup.service.in
@@ -0,0 +1,16 @@
+[Unit]
+Description=GNOME Initial Setup
+RefuseManualStart=true
+RefuseManualStop=true
+
+BindsTo=gnome-session.target
+After=gnome-session.target
+
+[Service]
+Type=simple
+ExecStart=@libexecdir@/gnome-initial-setup
+ExecStopPost=-@libexecdir@/gnome-session-ctl --shutdown
+Restart=never
+
+[Install]
+WantedBy=gnome-session@gnome-initial-setup.target
diff --git a/data/gnome-welcome-tour.desktop.in.in b/data/gnome-welcome-tour.desktop.in.in
index 22e4536..47bc48a 100644
--- a/data/gnome-welcome-tour.desktop.in.in
+++ b/data/gnome-welcome-tour.desktop.in.in
@@ -5,3 +5,4 @@ Exec=@LIBEXECDIR@/gnome-welcome-tour
AutostartCondition=if-exists run-welcome-tour
OnlyShowIn=GNOME;
NoDisplay=true
+@systemd_hidden@
diff --git a/data/gnome-welcome-tour.service.in b/data/gnome-welcome-tour.service.in
new file mode 100644
index 0000000..2315540
--- /dev/null
+++ b/data/gnome-welcome-tour.service.in
@@ -0,0 +1,15 @@
+[Unit]
+Description=GNOME Welcome Tour
+
+BindsTo=gnome-session.target
+After=gnome-session.target
+
+ConditionPathExists=%E/run-welcome-tour
+
+[Service]
+Type=simple
+ExecStart=@libexecdir@/gnome-welcome-tour
+Restart=no
+
+[Install]
+WantedBy=gnome-session.target
diff --git a/data/meson.build b/data/meson.build
index 817d8ef..aa7c245 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -5,7 +5,12 @@ autostart_files = [
]
desktop_conf = configuration_data()
-desktop_conf.set('LIBEXECDIR', join_paths(prefix, get_option('libexecdir')))
+desktop_conf.set('LIBEXECDIR', libexec_dir)
+if enable_systemd
+ desktop_conf.set('systemd_hidden', 'X-GNOME-Autostart-systemd=true')
+else
+ desktop_conf.set('systemd_hidden', )
+endif
foreach desktop_file: autostart_files
i18n.merge_file(
@@ -37,6 +42,28 @@ i18n.merge_file(
type: 'desktop'
)
+if enable_systemd
+ unitconf = configuration_data()
+ unitconf.set('libexecdir', libexec_dir)
+
+ unit_files = [
+ 'gnome-initial-setup.service',
+ 'gnome-initial-setup-first-login.service',
+ 'gnome-initial-setup-copy-worker.service',
+ 'gnome-welcome-tour.service'
+ ]
+
+ foreach unit: unit_files
+ configure_file(
+ input: unit + '.in',
+ output: unit,
+ configuration: unitconf,
+ install_dir: systemd_userunitdir
+ )
+ endforeach
+endif
+
+
rules_dir = join_paths(data_dir, 'polkit-1', 'rules.d')
install_data('20-gnome-initial-setup.rules', install_dir: rules_dir)
diff --git a/meson.build b/meson.build
index 7b41505..e9be6d9 100644
--- a/meson.build
+++ b/meson.build
@@ -30,6 +30,18 @@ conf.set_quoted('PKGDATADIR', pkgdata_dir)
conf.set('ENABLE_REGION_PAGE', get_option('region-page'))
conf.set('SECRET_API_SUBJECT_TO_CHANGE', true)
+enable_systemd = get_option('systemd')
+if enable_systemd
+ systemd_dep = dependency('systemd', required: false)
+ assert(systemd_dep.found(), 'Systemd support explicitly required, but systemd not found')
+
+ # XXX: Once https://github.com/systemd/systemd/issues/9595 is fixed and we can
+ # depend on this version, replace with something like:
+ # systemduserunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir')
+ # and uncomment systemd_dep below
+ systemd_userunitdir = join_paths(prefix, 'lib', 'systemd', 'user')
+endif
+
# Needed for the 'account' page
cheese_dep = dependency ('cheese',
version: '>= 3.3.5',
diff --git a/meson_options.txt b/meson_options.txt
index 7502725..fc01864 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -26,3 +26,9 @@ option('ibus',
type: 'feature',
value: 'auto'
)
+
+option('systemd',
+ type: 'boolean',
+ value: true,
+ description: 'Enable systemd integration'
+)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]