From e307ceeee7fea63dbe898cc995917b48345a3d85 Mon Sep 17 00:00:00 2001 From: Robert Helgesson Date: Sun, 18 Feb 2018 16:39:28 +0100 Subject: [PATCH] systemd: replace use of `who` command Curiously the `who` command sometimes does not list logged-in users, resulting in systemd not being reloaded. Instead we use systemctl --user is-system-running to more directly detect whether systemd is running. --- modules/systemd.nix | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/systemd.nix b/modules/systemd.nix index 9eaba7c22..ce3c2c1bb 100644 --- a/modules/systemd.nix +++ b/modules/systemd.nix @@ -159,14 +159,16 @@ in legacyReloadCmd = '' bash ${./systemd-activate.sh} "''${oldGenPath=}" "$newGenPath" ''; + + ensureRuntimeDir = "XDG_RUNTIME_DIR=\${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"; in '' - if who | grep -q '^${config.home.username} '; then - XDG_RUNTIME_DIR=''${XDG_RUNTIME_DIR:-/run/user/$(id -u)} \ + if ${ensureRuntimeDir} ${cfg.systemctlPath} --quiet --user is-system-running 2> /dev/null; then + ${ensureRuntimeDir} \ PATH=${dirOf cfg.systemctlPath}:$PATH \ ${if cfg.startServices then autoReloadCmd else legacyReloadCmd} else - echo "User ${config.home.username} not logged in. Skipping." + echo "User systemd daemon not running. Skipping reload." fi '' );