diff --git a/README.md b/README.md index 027ad2c37..d77bab8bf 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ You'll need the following dependencies: - libjson-glib-dev - libpantheon-wayland-1-dev - libpwquality-dev + - libsystemd-dev - libxkbregistry-dev - [distinst](https://github.com/pop-os/distinst/) - valac diff --git a/session/autostart.desktop b/session/autostart.desktop deleted file mode 100644 index e0a2aa613..000000000 --- a/session/autostart.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Installer -Exec=io.elementary.installer -Terminal=false -Type=Application -X-GNOME-Autostart-Notify=false -X-GNOME-AutoRestart=true -X-GNOME-Autostart-enabled=true -X-GNOME-Autostart-Phase=Applications -OnlyShowIn=Installer; diff --git a/session/compositor-autostart.desktop b/session/compositor-autostart.desktop deleted file mode 100644 index a40eedaf2..000000000 --- a/session/compositor-autostart.desktop +++ /dev/null @@ -1,11 +0,0 @@ -[Desktop Entry] -Type=Application -Name=Greeter Compositor -Exec=io.elementary.greeter-compositor -NoDisplay=true -X-GNOME-Autostart-Notify=false -X-GNOME-AutoRestart=true -X-GNOME-Autostart-enabled=true -X-GNOME-Autostart-Phase=WindowManager -X-GNOME-Provides=windowmanager -OnlyShowIn=Installer; diff --git a/session/compositor.service.in b/session/compositor.service.in new file mode 100644 index 000000000..ebb59a831 --- /dev/null +++ b/session/compositor.service.in @@ -0,0 +1,40 @@ +[Unit] +Description=Greeter Compositor +# On X11, try to show the GNOME Session Failed screen +OnFailure=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 + +#NOTE: ConditionEnvironment works with systemd >= 246 +ConditionEnvironment=XDG_SESSION_TYPE=%I + +# Limit startup frequency more than the default +StartLimitIntervalSec=15s +StartLimitBurst=3 + +[Service] +Slice=session.slice +Type=notify +ExecStart=@bindir@/io.elementary.greeter-compositor + +# 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 +RestartSec=0ms +# Kill any stubborn child processes after this long +TimeoutStopSec=5 + +# Lower down gnome-shell's OOM score to avoid being killed by OOM-killer too early +OOMScoreAdjust=-1000 + + diff --git a/session/installer.service.in b/session/installer.service.in new file mode 100644 index 000000000..cd1afabf1 --- /dev/null +++ b/session/installer.service.in @@ -0,0 +1,12 @@ +[Unit] +Description=Installer +After=gnome-session-initialized.target + +[Install] +WantedBy=io.elementary.installer.target + +[Service] +Type=exec +ExecStart=@bindir@/io.elementary.installer +Restart=on-failure +Slice=session.slice diff --git a/session/installer.target b/session/installer.target new file mode 100644 index 000000000..aad61651d --- /dev/null +++ b/session/installer.target @@ -0,0 +1,9 @@ +[Unit] +Description=Installer +DefaultDependencies=no + +Requisite=gnome-session-initialized.target +PartOf=gnome-session-initialized.target +Before=gnome-session-initialized.target + +Wants=io.elementary.installer.compositor.service diff --git a/session/meson.build b/session/meson.build index f0f07fa6b..33e07dbb0 100644 --- a/session/meson.build +++ b/session/meson.build @@ -1,18 +1,6 @@ autostartdir = get_option('sysconfdir') / 'xdg' / 'autostart' schemadir = get_option('datadir') / 'glib-2.0' / 'schemas' -install_data( - 'autostart.desktop', - install_dir: autostartdir, - rename: meson.project_name() + '.desktop' -) - -install_data( - 'compositor-autostart.desktop', - install_dir: autostartdir, - rename: meson.project_name() + '.compositor.desktop' -) - install_data( 'installer.desktop', install_dir: get_option('datadir') / 'xsessions' @@ -33,3 +21,32 @@ install_subdir( install_dir: autostartdir, strip_directory: true ) + +prefix = get_option('prefix') + +systemd_userunitdir = systemd_dep.get_pkgconfig_variable('systemduserunitdir') + +service_config = configuration_data() +service_config.set('bindir', prefix / get_option('bindir')) + +configure_file( + input: 'compositor.service.in', + output: 'io.elementary.installer.compositor.service', + install: true, + install_dir: systemd_userunitdir, + configuration: service_config +) + +install_data( + 'installer.target', + rename: 'io.elementary.installer.target', + install_dir: systemd_userunitdir +) + +configure_file( + input: 'installer.service.in', + output: 'io.elementary.installer.service', + configuration: service_config, + install: true, + install_dir: systemd_userunitdir +)