diff options
4 files changed, 35 insertions, 2 deletions
diff --git a/nixos/modules/services/x11/display-managers/default.nix b/nixos/modules/services/x11/display-managers/default.nix index 736621a14a43..7e05cd84be64 100644 --- a/nixos/modules/services/x11/display-managers/default.nix +++ b/nixos/modules/services/x11/display-managers/default.nix @@ -50,6 +50,12 @@ let exec > ~/.xsession-errors 2>&1 ''} + ${optionalString cfg.startDbusSession '' + if test -z "$DBUS_SESSION_BUS_ADDRESS"; then + exec ${pkgs.dbus.tools}/bin/dbus-launch --exit-with-session "$0" "$sessionType" + fi + ''} + ${optionalString cfg.displayManager.desktopManagerHandlesLidAndPower '' # Stop systemd from handling the power button and lid switch, # since presumably the desktop environment will handle these. diff --git a/nixos/modules/services/x11/xserver.nix b/nixos/modules/services/x11/xserver.nix index 9fddc6a72104..1ec098fded6e 100644 --- a/nixos/modules/services/x11/xserver.nix +++ b/nixos/modules/services/x11/xserver.nix @@ -238,6 +238,14 @@ in ''; }; + startDbusSession = mkOption { + type = types.bool; + default = true; + description = '' + Whether to start a new DBus session when you log in with dbus-launch. + ''; + }; + layout = mkOption { type = types.str; default = "us"; diff --git a/pkgs/desktops/gnome-3/3.16/core/gdm/default.nix b/pkgs/desktops/gnome-3/3.16/core/gdm/default.nix index 43a3d450ac72..17245bd9d2a9 100644 --- a/pkgs/desktops/gnome-3/3.16/core/gdm/default.nix +++ b/pkgs/desktops/gnome-3/3.16/core/gdm/default.nix @@ -27,11 +27,10 @@ stdenv.mkDerivation rec { preBuild = '' substituteInPlace daemon/gdm-simple-slave.c --replace 'BINDIR "/gnome-session' '"${gnome_session}/bin/gnome-session' - substituteInPlace daemon/gdm-launch-environment.c --replace 'BINDIR "/dbus-launch' '"${dbus.tools}/bin/dbus-launch' ''; # Disable Access Control because our X does not support FamilyServerInterpreted yet - patches = [ ./xserver_path.patch ./sessions_dir.patch ./disable_x_access_control.patch ]; + patches = [ ./xserver_path.patch ./sessions_dir.patch ./disable_x_access_control.patch ./no-dbus-launch.patch ]; meta = with stdenv.lib; { homepage = https://wiki.gnome.org/Projects/GDM; diff --git a/pkgs/desktops/gnome-3/3.16/core/gdm/no-dbus-launch.patch b/pkgs/desktops/gnome-3/3.16/core/gdm/no-dbus-launch.patch new file mode 100644 index 000000000000..c87554078c7c --- /dev/null +++ b/pkgs/desktops/gnome-3/3.16/core/gdm/no-dbus-launch.patch @@ -0,0 +1,20 @@ +--- a/daemon/gdm-launch-environment.c 2015-06-22 15:11:07.277474398 +0000 ++++ b/daemon/gdm-launch-environment.c 2015-06-22 15:12:31.301157665 +0000 +@@ -48,8 +48,6 @@ + #include "gdm-session-enum-types.h" + #include "gdm-launch-environment.h" + +-#define DBUS_LAUNCH_COMMAND BINDIR "/dbus-launch --exit-with-session" +- + extern char **environ; + + #define GDM_LAUNCH_ENVIRONMENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_LAUNCH_ENVIRONMENT, GdmLaunchEnvironmentPrivate)) +@@ -512,7 +510,7 @@ + gdm_session_select_program (launch_environment->priv->session, launch_environment->priv->command); + } else { + /* wrap it in dbus-launch */ +- char *command = g_strdup_printf ("%s %s", DBUS_LAUNCH_COMMAND, launch_environment->priv->command); ++ char *command = g_strdup (launch_environment->priv->command); + + gdm_session_select_program (launch_environment->priv->session, command); + g_free (command); |