From fbc5093649b17b65a5db6caa252f7d3aa99f94d0 Mon Sep 17 00:00:00 2001 From: Robert Helgesson Date: Mon, 19 Aug 2019 16:05:44 +0200 Subject: [PATCH 1/2] hooks: add moveSystemdUserUnitsHook This hook moves systemd user service file from `lib/systemd/user` to `share/systemd/user`. This is to allow systemd to find the user services when installed into a user profile. The `lib/systemd/user` path does not work since `lib` is not in `XDG_DATA_DIRS`. --- doc/stdenv/stdenv.xml | 13 ++++++++++ nixos/modules/config/system-path.nix | 1 + .../setup-hooks/move-systemd-user-units.sh | 25 +++++++++++++++++++ pkgs/stdenv/generic/default.nix | 5 +++- 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100755 pkgs/build-support/setup-hooks/move-systemd-user-units.sh diff --git a/doc/stdenv/stdenv.xml b/doc/stdenv/stdenv.xml index f97c2a145af5..e85e2ccb0ec4 100644 --- a/doc/stdenv/stdenv.xml +++ b/doc/stdenv/stdenv.xml @@ -1834,6 +1834,19 @@ addEnvHooks "$hostOffset" myBashFunction + + + move-systemd-user-units.sh + + + + This setup hook moves any systemd user units installed in the lib + subdirectory into share. In addition, a link is provided from share to + lib for compatibility. This is needed for systemd to find user services + when installed into the user profile. + + + set-source-date-epoch-to-latest.sh diff --git a/nixos/modules/config/system-path.nix b/nixos/modules/config/system-path.nix index 67305e8499cb..c46937f80081 100644 --- a/nixos/modules/config/system-path.nix +++ b/nixos/modules/config/system-path.nix @@ -142,6 +142,7 @@ in "/share/kservices5" "/share/kservicetypes5" "/share/kxmlgui5" + "/share/systemd" ]; system.path = pkgs.buildEnv { diff --git a/pkgs/build-support/setup-hooks/move-systemd-user-units.sh b/pkgs/build-support/setup-hooks/move-systemd-user-units.sh new file mode 100755 index 000000000000..5963d87c7515 --- /dev/null +++ b/pkgs/build-support/setup-hooks/move-systemd-user-units.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# This setup hook, for each output, moves everything in +# $output/lib/systemd/user to $output/share/systemd/user, and replaces +# $output/lib/systemd/user with a symlink to +# $output/share/systemd/user. + +fixupOutputHooks+=(_moveSystemdUserUnits) + +_moveSystemdUserUnits() { + if [ "${dontMoveSystemdUserUnits:-0}" = 1 ]; then return; fi + if [ ! -e "${prefix:?}/lib/systemd/user" ]; then return; fi + local source="$prefix/lib/systemd/user" + local target="$prefix/share/systemd/user" + echo "moving $source/* to $target" + mkdir -p "$target" + ( + shopt -s dotglob + for i in "$source"/*; do + mv "$i" "$target" + done + ) + rmdir "$source" + ln -s "$target" "$source" +} diff --git a/pkgs/stdenv/generic/default.nix b/pkgs/stdenv/generic/default.nix index b57989786904..eeddb584a3d5 100644 --- a/pkgs/stdenv/generic/default.nix +++ b/pkgs/stdenv/generic/default.nix @@ -61,7 +61,10 @@ let ] # FIXME this on Darwin; see # https://github.com/NixOS/nixpkgs/commit/94d164dd7#commitcomment-22030369 - ++ lib.optional hostPlatform.isLinux ../../build-support/setup-hooks/audit-tmpdir.sh + ++ lib.optionals hostPlatform.isLinux [ + ../../build-support/setup-hooks/audit-tmpdir.sh + ../../build-support/setup-hooks/move-systemd-user-units.sh + ] ++ [ ../../build-support/setup-hooks/multiple-outputs.sh ../../build-support/setup-hooks/move-sbin.sh From f292a27f442d10de4827800d064a3a8c64d05cee Mon Sep 17 00:00:00 2001 From: Robert Helgesson Date: Sun, 6 Sep 2020 22:57:54 +0200 Subject: [PATCH 2/2] nixos/dbus: always use socket activates user session This removes the `services.dbus.socketActivated` and `services.xserver.startDbusSession` options. Instead the user D-Bus session is always socket activated. --- nixos/doc/manual/release-notes/rl-2103.xml | 10 +++++++++- nixos/modules/services/system/dbus.nix | 16 +++++++--------- .../services/x11/display-managers/default.nix | 7 ------- nixos/modules/services/x11/xserver.nix | 11 +++-------- 4 files changed, 19 insertions(+), 25 deletions(-) diff --git a/nixos/doc/manual/release-notes/rl-2103.xml b/nixos/doc/manual/release-notes/rl-2103.xml index eccf2b69dad9..c05d74ee728e 100644 --- a/nixos/doc/manual/release-notes/rl-2103.xml +++ b/nixos/doc/manual/release-notes/rl-2103.xml @@ -59,7 +59,15 @@ - + + If the services.dbus module is enabled, then + the user D-Bus session is now always socket activated. The + associated options services.dbus.socketActivated + and services.xserver.startDbusSession have + therefore been removed and you will receive a warning if + they are present in your configuration. This change makes the + user D-Bus session available also for non-graphical logins. + diff --git a/nixos/modules/services/system/dbus.nix b/nixos/modules/services/system/dbus.nix index 4a60fec1ca80..d9dd26f0f189 100644 --- a/nixos/modules/services/system/dbus.nix +++ b/nixos/modules/services/system/dbus.nix @@ -19,6 +19,12 @@ in { + imports = [ + (mkRemovedOptionModule + [ "services" "dbus" "socketActivated" ] + "The user D-Bus session is now always socket activated and this option can safely be removed.") + ]; + ###### interface options = { @@ -51,14 +57,6 @@ in pkg/share/dbus-1/services ''; }; - - socketActivated = mkOption { - type = types.bool; - default = false; - description = '' - Make the user instance socket activated. - ''; - }; }; }; @@ -108,7 +106,7 @@ in reloadIfChanged = true; restartTriggers = [ configDir ]; }; - sockets.dbus.wantedBy = mkIf cfg.socketActivated [ "sockets.target" ]; + sockets.dbus.wantedBy = [ "sockets.target" ]; }; environment.pathsToLink = [ "/etc/dbus-1" "/share/dbus-1" ]; diff --git a/nixos/modules/services/x11/display-managers/default.nix b/nixos/modules/services/x11/display-managers/default.nix index 08ce8edd6612..568aeaceef75 100644 --- a/nixos/modules/services/x11/display-managers/default.nix +++ b/nixos/modules/services/x11/display-managers/default.nix @@ -37,13 +37,6 @@ let . /etc/profile cd "$HOME" - ${optionalString cfg.startDbusSession '' - if test -z "$DBUS_SESSION_BUS_ADDRESS"; then - /run/current-system/systemd/bin/systemctl --user start dbus.socket - export `/run/current-system/systemd/bin/systemctl --user show-environment | grep '^DBUS_SESSION_BUS_ADDRESS'` - fi - ''} - ${optionalString cfg.displayManager.job.logToJournal '' if [ -z "$_DID_SYSTEMD_CAT" ]; then export _DID_SYSTEMD_CAT=1 diff --git a/nixos/modules/services/x11/xserver.nix b/nixos/modules/services/x11/xserver.nix index 400173745d3f..914063842c9d 100644 --- a/nixos/modules/services/x11/xserver.nix +++ b/nixos/modules/services/x11/xserver.nix @@ -151,6 +151,9 @@ in ./desktop-managers/default.nix (mkRemovedOptionModule [ "services" "xserver" "startGnuPGAgent" ] "See the 16.09 release notes for more information.") + (mkRemovedOptionModule + [ "services" "xserver" "startDbusSession" ] + "The user D-Bus session is now always socket activated and this option can safely be removed.") ]; @@ -296,14 +299,6 @@ in description = "DPI resolution to use for X server."; }; - startDbusSession = mkOption { - type = types.bool; - default = true; - description = '' - Whether to start a new DBus session when you log in with dbus-launch. - ''; - }; - updateDbusEnvironment = mkOption { type = types.bool; default = false;