* When using kdm, always use our xsession script, even when the
default session is selected. This is because we always want to run our own initialisation (like starting ssh-agent). * ssh-agent: don't start it is a child but have it re-exec the xsession script. This ensures that ssh-agent quits when we log out. * In the xsession script, don't redirect output to ~/.xsession-errors if the display manager is kdm, since kdm already does that. In fact it uses ~/.xsession-errors<optional number> if there are concurrent X sessions. * For consistency with other distros and the xdm manpage, exec the ~/.xsession script instead of sourcing it. Do this for the "custom" session type provided by kdm. svn path=/nixos/trunk/; revision=17087
This commit is contained in:
parent
d1e7a90277
commit
6596a3ec55
@ -21,34 +21,46 @@ let
|
|||||||
''
|
''
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
exec > $HOME/.xsession-errors 2>&1
|
# Handle being called by kdm.
|
||||||
|
if test "''${1:0:1}" = /; then eval exec "$1"; fi
|
||||||
|
|
||||||
source /etc/profile
|
# The first argument of this script is the session type.
|
||||||
|
sessionType="$1"
|
||||||
|
if test "$sessionType" = default; then sessionType=""; fi
|
||||||
|
|
||||||
### Load X defaults.
|
${optionalString (!cfg.displayManager.job.logsXsession) ''
|
||||||
|
exec > ~/.xsession-errors 2>&1
|
||||||
|
''}
|
||||||
|
|
||||||
|
${optionalString cfg.startSSHAgent ''
|
||||||
|
if test -z "$SSH_AUTH_SOCK"; then
|
||||||
|
# Restart this script as a child of the SSH agent. (It is
|
||||||
|
# also possible to start the agent as a child that prints
|
||||||
|
# the required environment variabled on stdout, but in
|
||||||
|
# that mode ssh-agent is not terminated when we log out.)
|
||||||
|
export SSH_ASKPASS=${pkgs.x11_ssh_askpass}/libexec/x11-ssh-askpass
|
||||||
|
exec ${pkgs.openssh}/bin/ssh-agent "$0" "$sessionType"
|
||||||
|
fi
|
||||||
|
''}
|
||||||
|
|
||||||
|
# Load X defaults.
|
||||||
if test -e ~/.Xdefaults; then
|
if test -e ~/.Xdefaults; then
|
||||||
${xorg.xrdb}/bin/xrdb -merge ~/.Xdefaults
|
${xorg.xrdb}/bin/xrdb -merge ~/.Xdefaults
|
||||||
fi
|
fi
|
||||||
|
|
||||||
${optionalString cfg.startSSHAgent ''
|
source /etc/profile
|
||||||
### Start the SSH agent.
|
|
||||||
export SSH_ASKPASS=${pkgs.x11_ssh_askpass}/libexec/x11-ssh-askpass
|
|
||||||
eval $(${pkgs.openssh}/bin/ssh-agent)
|
|
||||||
''}
|
|
||||||
|
|
||||||
### Allow user to override system-wide configuration
|
# Allow the user to setup a custom session type.
|
||||||
if test -f ~/.xsession; then
|
if test "$sessionType" = custom; then
|
||||||
source ~/.xsession
|
test -x ~/.xsession && exec ~/.xsession
|
||||||
|
sessionType="" # fall-thru if there is no ~/.xsession
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# The first argument of this script is the session type
|
# The session type is "<desktop-manager> + <window-manager>", so
|
||||||
sessionType="$1"
|
|
||||||
|
|
||||||
# The session type "<desktop-manager> + <window-manager>", so
|
|
||||||
# extract those.
|
# extract those.
|
||||||
windowManager="''${arg##* + }"
|
windowManager="''${sessionType##* + }"
|
||||||
: ''${windowManager:=${cfg.windowManager.default}}
|
: ''${windowManager:=${cfg.windowManager.default}}
|
||||||
desktopManager="''${arg% + *}"
|
desktopManager="''${sessionType% + *}"
|
||||||
: ''${desktopManager:=${cfg.desktopManager.default}}
|
: ''${desktopManager:=${cfg.desktopManager.default}}
|
||||||
|
|
||||||
# Start the window manager.
|
# Start the window manager.
|
||||||
@ -178,6 +190,15 @@ in
|
|||||||
description = "Additional environment variables needed by the display manager.";
|
description = "Additional environment variables needed by the display manager.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
logsXsession = mkOption {
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether the display manager redirects the
|
||||||
|
output of the session script to
|
||||||
|
<filename>~/.xsession-errors</filename>.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -18,6 +18,7 @@ let
|
|||||||
[X-*-Core]
|
[X-*-Core]
|
||||||
Xrdb=${pkgs.xlibs.xrdb}/bin/xrdb
|
Xrdb=${pkgs.xlibs.xrdb}/bin/xrdb
|
||||||
SessionsDirs=${dmcfg.session.desktops}
|
SessionsDirs=${dmcfg.session.desktops}
|
||||||
|
Session=${dmcfg.session.script}
|
||||||
FailsafeClient=${pkgs.xterm}/bin/xterm
|
FailsafeClient=${pkgs.xterm}/bin/xterm
|
||||||
|
|
||||||
[X-:*-Core]
|
[X-:*-Core]
|
||||||
@ -76,6 +77,7 @@ in
|
|||||||
|
|
||||||
services.xserver.displayManager.job =
|
services.xserver.displayManager.job =
|
||||||
{ execCmd = "${kdebase_workspace}/bin/kdm -config ${kdmrc}";
|
{ execCmd = "${kdebase_workspace}/bin/kdm -config ${kdmrc}";
|
||||||
|
logsXsession = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
security.pam.services = [ { name = "kde"; localLogin = true; ckHack = true; } ];
|
security.pam.services = [ { name = "kde"; localLogin = true; ckHack = true; } ];
|
||||||
|
Loading…
Reference in New Issue
Block a user