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@wayland.service.in b/session/compositor@wayland.service.in new file mode 100644 index 000000000..b505fb4f3 --- /dev/null +++ b/session/compositor@wayland.service.in @@ -0,0 +1,33 @@ +[Unit] +Description=Installer Compositor +# On wayland, force a session shutdown +OnFailure=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 + +#NOTE: ConditionEnvironment works with systemd >= 246 +ConditionEnvironment=XDG_SESSION_TYPE=%I + +[Service] +Slice=session.slice +Type=notify +ExecStart=env GALA_SESSION_TYPE=installer XDG_CURRENT_DESKTOP=Pantheon @bindir@/gala --wayland + +# unset some environment variables that were set by the compositor and won't work now that the compositor is gone +ExecStopPost=-/bin/sh -c 'test "$SERVICE_RESULT" != "exec-condition" && systemctl --user unset-environment GNOME_SETUP_DISPLAY WAYLAND_DISPLAY DISPLAY XAUTHORITY && rm -f "$XDG_RUNTIME_DIR/wayland-0" "$XDG_RUNTIME_DIR/wayland-0.lock"' + +# On wayland we cannot restart +Restart=no +# Kill any stubborn child processes after this long +TimeoutStopSec=5 + +# Lower down Gala'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..01729bc97 --- /dev/null +++ b/session/installer.service.in @@ -0,0 +1,9 @@ +[Unit] +Description=Installer +After=gnome-session-initialized.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..b0a51ce88 --- /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@wayland.service io.elementary.installer.service diff --git a/session/meson.build b/session/meson.build index 41777168a..18da33d35 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') / 'wayland-sessions' @@ -33,3 +21,37 @@ 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@wayland.service.in', + output: 'io.elementary.installer.compositor@wayland.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 +) + +install_data( + 'session.conf', + install_dir: systemd_userunitdir / 'gnome-session@installer.target.d', +) diff --git a/session/session.conf b/session/session.conf new file mode 100644 index 000000000..3715b1d48 --- /dev/null +++ b/session/session.conf @@ -0,0 +1,6 @@ +[Unit] +Wants=org.gnome.SettingsDaemon.MediaKeys.target +Wants=org.gnome.SettingsDaemon.Power.target +Wants=org.gnome.SettingsDaemon.XSettings.target + +Requires=io.elementary.installer.target