Merge pull request #85065 from worldofpeace/autologin-unified

nixos/displayManager: make autoLogin options independent of DM type

Changed files
+145 -155
nixos
+1 -2
nixos/doc/manual/configuration/profiles/demo.xml
···
This profile just enables a <systemitem class="username">demo</systemitem>
user, with password <literal>demo</literal>, uid <literal>1000</literal>,
<systemitem class="groupname">wheel</systemitem> group and
-
<link linkend="opt-services.xserver.displayManager.sddm.autoLogin"> autologin
-
in the SDDM display manager</link>.
+
<link linkend="opt-services.xserver.displayManager.autoLogin">autologin in the SDDM display manager</link>.
</para>
</section>
+2 -3
nixos/doc/manual/configuration/x-windows.xml
···
using lightdm for a user <literal>alice</literal>:
<programlisting>
<xref linkend="opt-services.xserver.displayManager.lightdm.enable"/> = true;
-
<xref linkend="opt-services.xserver.displayManager.lightdm.autoLogin.enable"/> = true;
-
<xref linkend="opt-services.xserver.displayManager.lightdm.autoLogin.user"/> = "alice";
+
<xref linkend="opt-services.xserver.displayManager.autoLogin.enable"/> = true;
+
<xref linkend="opt-services.xserver.displayManager.autoLogin.user"/> = "alice";
</programlisting>
-
The options are named identically for all other display managers.
</para>
</simplesect>
<simplesect xml:id="sec-x11--graphics-cards-intel">
+1 -1
nixos/doc/manual/release-notes/rl-2003.xml
···
The <option>services.xserver.displayManager.auto</option> module has been removed.
It was only intended for use in internal NixOS tests, and gave the false impression
of it being a special display manager when it's actually LightDM.
-
Please use the <xref linkend="opt-services.xserver.displayManager.lightdm.autoLogin"/> options instead,
+
Please use the <option>services.xserver.displayManager.lightdm.autoLogin</option> options instead,
or any other display manager in NixOS as they all support auto-login. If you used this module specifically
because it permitted root auto-login you can override the lightdm-autologin pam module like:
<programlisting>
+6
nixos/doc/manual/release-notes/rl-2009.xml
···
automatically if <literal>stateVersion</literal> is 20.09 or higher.
</para>
</listitem>
+
<listitem>
+
<para>
+
We now have a unified <xref linkend="opt-services.xserver.displayManager.autoLogin"/> option interface
+
to be used for every display-manager in NixOS.
+
</para>
+
</listitem>
</itemizedlist>
</section>
+11 -9
nixos/modules/installer/cd-dvd/installation-cd-graphical-gnome.nix
···
services.xserver.desktopManager.gnome3.enable = true;
-
services.xserver.displayManager.gdm = {
-
enable = true;
-
# autoSuspend makes the machine automatically suspend after inactivity.
-
# It's possible someone could/try to ssh'd into the machine and obviously
-
# have issues because it's inactive.
-
# See:
-
# * https://github.com/NixOS/nixpkgs/pull/63790
-
# * https://gitlab.gnome.org/GNOME/gnome-control-center/issues/22
-
autoSuspend = false;
+
services.xserver.displayManager = {
+
gdm = {
+
enable = true;
+
# autoSuspend makes the machine automatically suspend after inactivity.
+
# It's possible someone could/try to ssh'd into the machine and obviously
+
# have issues because it's inactive.
+
# See:
+
# * https://github.com/NixOS/nixpkgs/pull/63790
+
# * https://gitlab.gnome.org/GNOME/gnome-control-center/issues/22
+
autoSuspend = false;
+
};
autoLogin = {
enable = true;
user = "nixos";
+2 -2
nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix
···
};
# Automatically login as nixos.
-
displayManager.sddm = {
-
enable = true;
+
displayManager = {
+
sddm.enable = true;
autoLogin = {
enable = true;
user = "nixos";
+6 -4
nixos/modules/profiles/demo.nix
···
uid = 1000;
};
-
services.xserver.displayManager.sddm.autoLogin = {
-
enable = true;
-
relogin = true;
-
user = "demo";
+
services.xserver.displayManager = {
+
autoLogin = {
+
enable = true;
+
user = "demo";
+
};
+
sddm.autoLogin.relogin = true;
};
}
+1 -1
nixos/modules/rename.nix
···
The services.xserver.displayManager.auto module has been removed
because it was only intended for use in internal NixOS tests, and gave the
false impression of it being a special display manager when it's actually
-
LightDM. Please use the services.xserver.displayManager.lightdm.autoLogin options
+
LightDM. Please use the services.xserver.displayManager.autoLogin options
instead, or any other display manager in NixOS as they all support auto-login.
'')
(mkRemovedOptionModule [ "services" "dnscrypt-proxy" ] "Use services.dnscrypt-proxy2 instead")
+33
nixos/modules/services/x11/display-managers/default.nix
···
};
+
# Configuration for automatic login. Common for all DM.
+
autoLogin = mkOption {
+
type = types.submodule {
+
options = {
+
enable = mkOption {
+
type = types.bool;
+
default = cfg.displayManager.autoLogin.user != null;
+
description = ''
+
Automatically log in as <option>autoLogin.user</option>.
+
'';
+
};
+
+
user = mkOption {
+
type = types.nullOr types.str;
+
default = null;
+
description = ''
+
User to be used for the automatic login.
+
'';
+
};
+
};
+
};
+
+
default = {};
+
description = ''
+
Auto login configuration attrset.
+
'';
+
};
+
};
};
config = {
assertions = [
+
{ assertion = cfg.displayManager.autoLogin.enable -> cfg.displayManager.autoLogin.user != null;
+
message = ''
+
services.xserver.displayManager.autoLogin.enable requires services.xserver.displayManager.autoLogin.user to be set
+
'';
+
}
{
assertion = cfg.desktopManager.default != null || cfg.windowManager.default != null -> cfg.displayManager.defaultSession == defaultSessionFromLegacyOptions;
message = "You cannot use both services.xserver.displayManager.defaultSession option and legacy options (services.xserver.desktopManager.default and services.xserver.windowManager.default).";
+24 -41
nixos/modules/services/x11/display-managers/gdm.nix
···
in
{
+
imports = [
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "gdm" "autoLogin" "enable" ] [
+
"services"
+
"xserver"
+
"displayManager"
+
"autoLogin"
+
"enable"
+
])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "gdm" "autoLogin" "user" ] [
+
"services"
+
"xserver"
+
"displayManager"
+
"autoLogin"
+
"user"
+
])
+
];
meta = {
maintainers = teams.gnome.members;
···
debugging messages in GDM
'';
-
autoLogin = mkOption {
-
default = {};
+
# Auto login options specific to GDM
+
autoLogin.delay = mkOption {
+
type = types.int;
+
default = 0;
description = ''
-
Auto login configuration attrset.
+
Seconds of inactivity after which the autologin will be performed.
'';
-
-
type = types.submodule {
-
options = {
-
enable = mkOption {
-
type = types.bool;
-
default = false;
-
description = ''
-
Automatically log in as the sepecified <option>autoLogin.user</option>.
-
'';
-
};
-
-
user = mkOption {
-
type = types.nullOr types.str;
-
default = null;
-
description = ''
-
User to be used for the autologin.
-
'';
-
};
-
-
delay = mkOption {
-
type = types.int;
-
default = 0;
-
description = ''
-
Seconds of inactivity after which the autologin will be performed.
-
'';
-
};
-
-
};
-
};
};
wayland = mkOption {
···
###### implementation
config = mkIf cfg.gdm.enable {
-
-
assertions = [
-
{ assertion = cfg.gdm.autoLogin.enable -> cfg.gdm.autoLogin.user != null;
-
message = "GDM auto-login requires services.xserver.displayManager.gdm.autoLogin.user to be set";
-
}
-
];
services.xserver.displayManager.lightdm.enable = false;
···
environment.etc."gdm/custom.conf".text = ''
[daemon]
WaylandEnable=${if cfg.gdm.wayland then "true" else "false"}
-
${optionalString cfg.gdm.autoLogin.enable (
+
${optionalString cfg.autoLogin.enable (
if cfg.gdm.autoLogin.delay > 0 then ''
TimedLoginEnable=true
-
TimedLogin=${cfg.gdm.autoLogin.user}
+
TimedLogin=${cfg.autoLogin.user}
TimedLoginDelay=${toString cfg.gdm.autoLogin.delay}
'' else ''
AutomaticLoginEnable=true
-
AutomaticLogin=${cfg.gdm.autoLogin.user}
+
AutomaticLogin=${cfg.autoLogin.user}
'')
}
+24 -41
nixos/modules/services/x11/display-managers/lightdm.nix
···
${optionalString cfg.greeter.enable ''
greeter-session = ${cfg.greeter.name}
''}
-
${optionalString cfg.autoLogin.enable ''
-
autologin-user = ${cfg.autoLogin.user}
+
${optionalString dmcfg.autoLogin.enable ''
+
autologin-user = ${dmcfg.autoLogin.user}
autologin-user-timeout = ${toString cfg.autoLogin.timeout}
autologin-session = ${sessionData.autologinSession}
''}
···
./lightdm-greeters/enso-os.nix
./lightdm-greeters/pantheon.nix
./lightdm-greeters/tiny.nix
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "lightdm" "autoLogin" "enable" ] [
+
"services"
+
"xserver"
+
"displayManager"
+
"autoLogin"
+
"enable"
+
])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "lightdm" "autoLogin" "user" ] [
+
"services"
+
"xserver"
+
"displayManager"
+
"autoLogin"
+
"user"
+
])
];
options = {
···
description = "Extra lines to append to SeatDefaults section.";
};
-
autoLogin = mkOption {
-
default = {};
+
# Configuration for automatic login specific to LightDM
+
autoLogin.timeout = mkOption {
+
type = types.int;
+
default = 0;
description = ''
-
Configuration for automatic login.
+
Show the greeter for this many seconds before automatic login occurs.
'';
-
-
type = types.submodule {
-
options = {
-
enable = mkOption {
-
type = types.bool;
-
default = false;
-
description = ''
-
Automatically log in as the specified <option>autoLogin.user</option>.
-
'';
-
};
-
-
user = mkOption {
-
type = types.nullOr types.str;
-
default = null;
-
description = ''
-
User to be used for the automatic login.
-
'';
-
};
-
-
timeout = mkOption {
-
type = types.int;
-
default = 0;
-
description = ''
-
Show the greeter for this many seconds before automatic login occurs.
-
'';
-
};
-
};
-
};
};
};
···
LightDM requires services.xserver.enable to be true
'';
}
-
{ assertion = cfg.autoLogin.enable -> cfg.autoLogin.user != null;
-
message = ''
-
LightDM auto-login requires services.xserver.displayManager.lightdm.autoLogin.user to be set
-
'';
-
}
-
{ assertion = cfg.autoLogin.enable -> sessionData.autologinSession != null;
+
{ assertion = dmcfg.autoLogin.enable -> sessionData.autologinSession != null;
message = ''
LightDM auto-login requires that services.xserver.displayManager.defaultSession is set.
'';
}
-
{ assertion = !cfg.greeter.enable -> (cfg.autoLogin.enable && cfg.autoLogin.timeout == 0);
+
{ assertion = !cfg.greeter.enable -> (dmcfg.autoLogin.enable && cfg.autoLogin.timeout == 0);
message = ''
LightDM can only run without greeter if automatic login is enabled and the timeout for it
is set to zero.
···
# Set default session in session chooser to a specified values – basically ignore session history.
# Auto-login is already covered by a config value.
-
services.xserver.displayManager.job.preStart = optionalString (!cfg.autoLogin.enable && dmcfg.defaultSession != null) ''
+
services.xserver.displayManager.job.preStart = optionalString (!dmcfg.autoLogin.enable && dmcfg.defaultSession != null) ''
${setSessionScript}/bin/set-session ${dmcfg.defaultSession}
'';
+23 -40
nixos/modules/services/x11/display-managers/sddm.nix
···
EnableHidpi=${if cfg.enableHidpi then "true" else "false"}
SessionDir=${dmcfg.sessionData.desktops}/share/wayland-sessions
-
${optionalString cfg.autoLogin.enable ''
+
${optionalString dmcfg.autoLogin.enable ''
[Autologin]
-
User=${cfg.autoLogin.user}
+
User=${dmcfg.autoLogin.user}
Session=${autoLoginSessionName}.desktop
Relogin=${boolToString cfg.autoLogin.relogin}
''}
···
imports = [
(mkRemovedOptionModule [ "services" "xserver" "displayManager" "sddm" "themes" ]
"Set the option `services.xserver.displayManager.sddm.package' instead.")
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "autoLogin" "enable" ] [
+
"services"
+
"xserver"
+
"displayManager"
+
"autoLogin"
+
"enable"
+
])
+
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "sddm" "autoLogin" "user" ] [
+
"services"
+
"xserver"
+
"displayManager"
+
"autoLogin"
+
"user"
+
])
];
options = {
···
'';
};
-
autoLogin = mkOption {
-
default = {};
+
# Configuration for automatic login specific to SDDM
+
autoLogin.relogin = mkOption {
+
type = types.bool;
+
default = false;
description = ''
-
Configuration for automatic login.
+
If true automatic login will kick in again on session exit (logout), otherwise it
+
will only log in automatically when the display-manager is started.
'';
-
-
type = types.submodule {
-
options = {
-
enable = mkOption {
-
type = types.bool;
-
default = false;
-
description = ''
-
Automatically log in as <option>autoLogin.user</option>.
-
'';
-
};
-
-
user = mkOption {
-
type = types.nullOr types.str;
-
default = null;
-
description = ''
-
User to be used for the automatic login.
-
'';
-
};
-
-
relogin = mkOption {
-
type = types.bool;
-
default = false;
-
description = ''
-
If true automatic login will kick in again on session exit (logout), otherwise it
-
will only log in automatically when the display-manager is started.
-
'';
-
};
-
};
-
};
};
};
···
SDDM requires services.xserver.enable to be true
'';
}
-
{ assertion = cfg.autoLogin.enable -> cfg.autoLogin.user != null;
-
message = ''
-
SDDM auto-login requires services.xserver.displayManager.sddm.autoLogin.user to be set
-
'';
-
}
-
{ assertion = cfg.autoLogin.enable -> autoLoginSessionName != null;
+
{ assertion = dmcfg.autoLogin.enable -> autoLoginSessionName != null;
message = ''
SDDM auto-login requires that services.xserver.displayManager.defaultSession is set.
'';
+2 -2
nixos/tests/common/auto.nix
···
config = mkIf cfg.enable {
-
services.xserver.displayManager.lightdm = {
-
enable = true;
+
services.xserver.displayManager = {
+
lightdm.enable = true;
autoLogin = {
enable = true;
user = cfg.user;
+2 -2
nixos/tests/gnome3-xorg.nix
···
services.xserver.enable = true;
-
services.xserver.displayManager.gdm = {
-
enable = true;
+
services.xserver.displayManager = {
+
gdm.enable = true;
autoLogin = {
enable = true;
user = user.name;
+2 -2
nixos/tests/gnome3.nix
···
services.xserver.enable = true;
-
services.xserver.displayManager.gdm = {
-
enable = true;
+
services.xserver.displayManager = {
+
gdm.enable = true;
autoLogin = {
enable = true;
user = "alice";
+1 -1
nixos/tests/plasma5.nix
···
services.xserver.displayManager.sddm.enable = true;
services.xserver.displayManager.defaultSession = "plasma5";
services.xserver.desktopManager.plasma5.enable = true;
-
services.xserver.displayManager.sddm.autoLogin = {
+
services.xserver.displayManager.autoLogin = {
enable = true;
user = "alice";
};
+2 -2
nixos/tests/sddm.nix
···
machine = { ... }: {
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
-
services.xserver.displayManager.sddm = {
-
enable = true;
+
services.xserver.displayManager = {
+
sddm.enable = true;
autoLogin = {
enable = true;
user = "alice";
+2 -2
nixos/tests/xfce.nix
···
services.xserver.enable = true;
-
services.xserver.displayManager.lightdm = {
-
enable = true;
+
services.xserver.displayManager = {
+
lightdm.enable = true;
autoLogin = {
enable = true;
user = "alice";