diff --git a/doc/stdenv/stdenv.xml b/doc/stdenv/stdenv.xml
index f97c2a145af..e85e2ccb0ec 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/doc/manual/release-notes/rl-2103.xml b/nixos/doc/manual/release-notes/rl-2103.xml
index eccf2b69dad..c05d74ee728 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/config/system-path.nix b/nixos/modules/config/system-path.nix
index 67305e8499c..c46937f8008 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/nixos/modules/services/system/dbus.nix b/nixos/modules/services/system/dbus.nix
index 4a60fec1ca8..d9dd26f0f18 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 08ce8edd661..568aeaceef7 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 400173745d3..914063842c9 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;
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 00000000000..5963d87c751
--- /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 b5798978690..eeddb584a3d 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