mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-22 02:01:55 +07:00
Improve dinit service files (#3193)
* Improve dinit service files and niri-session Two main changes were made: - After a discussion in davmac314/dinit#496, 2 dinit services are now provided. The first one is 'niri', which runs niri itself, and the second one is 'niri.target' which brings up all the dependences from user configuration. - Made the behaviour of 'niri-session' when running under dinit closer to the behaviour when running under systemd. In particular, now the script wait for service completion, because some login managers shut the session down the moment the startup script completes. * Update paths in docs
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
type = process
|
||||
command = niri --session
|
||||
restart = false
|
||||
working-dir = $HOME
|
||||
depends-on = dbus
|
||||
after = niri-shutdown
|
||||
chain-to = niri-shutdown
|
||||
options: always-chain
|
||||
type = process
|
||||
command = niri --session
|
||||
restart = false
|
||||
working-dir = $HOME
|
||||
ready-notification = pipevar:NOTIFY_FD
|
||||
logfile = $HOME/.local/share/niri/niri.log
|
||||
depends-on: dbus
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
type = scripted
|
||||
command = dinitctl -u setenv WAYLAND_DISPLAY= XDG_SESSION_TYPE= XDG_CURRENT_DESKTOP= NIRI_SOCKET=
|
||||
restart = false
|
||||
@@ -0,0 +1,6 @@
|
||||
type = internal
|
||||
restart = false
|
||||
depends-on: niri
|
||||
waits-for.d: $XDG_CONFIG_HOME/dinit.d/niri.d/
|
||||
waits-for.d: $HOME/.config/dinit.d/niri.d/
|
||||
waits-for.d: /etc/dinit.d/user/niri.d/
|
||||
+26
-2
@@ -59,13 +59,37 @@ elif hash dinitctl >/dev/null 2>&1; then
|
||||
fi
|
||||
|
||||
# Make sure there's no already running session.
|
||||
if dinitctl --user is-started niri >/dev/null 2>&1; then
|
||||
if dinitctl --quiet --user is-started niri 2>/dev/null; then
|
||||
echo 'A niri session is already running.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Import the login manager environment into dinit
|
||||
# Might not work correctly for multiline variable names, but
|
||||
# it is reasonable to assume there are none
|
||||
awk 'BEGIN{for(v in ENVIRON) if (v != "AWKPATH" && v != "AWKLIBPATH") print v}' 2>/dev/null | xargs dinitctl --quiet --user setenv 2>/dev/null
|
||||
|
||||
# Usually the dbus service would start as niri's dependency and inherit
|
||||
# environment from dinit, but in case it has already started we need
|
||||
# to update its environment.
|
||||
if hash dbus-update-activation-environment >/dev/null 2>&1; then
|
||||
dbus-update-activation-environment --all >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
# Create the directory for the logfile, if doesn't exist
|
||||
mkdir --parents $HOME/.local/share/niri
|
||||
# Start niri
|
||||
dinitctl --user start niri
|
||||
dinitctl --quiet --user start niri.target 2>&1
|
||||
|
||||
# Wait for termination
|
||||
dinit-monitor --user --initial -c $'sh -c "
|
||||
if [ "%s" = "stopped" ] || [ "%s" = "failed" ]; then
|
||||
ppid=$(ps -o ppid= -p $$)
|
||||
kill $ppid
|
||||
fi"' niri >/dev/null 2>&1
|
||||
|
||||
# Unset environment that we've set.
|
||||
dinitctl --quiet --user unsetenv WAYLAND_DISPLAY DISPLAY XDG_SESSION_TYPE XDG_CURRENT_DESKTOP NIRI_SOCKET 2>/dev/null
|
||||
else
|
||||
echo "No systemd or dinit detected, please use niri --session instead."
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user