From 3ecd031d9d466a2f026192083c532f78d27dc287 Mon Sep 17 00:00:00 2001 From: The feren OS Dev Date: Mon, 15 Apr 2019 15:01:08 +0100 Subject: [PATCH] Better LightDM Autologin Support This change fixes a few issues and adds a few improvements to the LightDM Autologin configuration process: Fixes: - Fixes malforming of configuration file out of the box, as without `[SeatDefaults]`, `[Seat:*]` or similar in the configuration file LightDM will break on a lot of distributions using LightDM - Preserves the intended lightdm.conf file settings outside of `autologin-user` if the distribution has an /etc/lightdm/lightdm.conf file of its own Misc. changes: - Small spelling fix --- src/modules/displaymanager/main.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py index 4413aefbb..3b2394b52 100644 --- a/src/modules/displaymanager/main.py +++ b/src/modules/displaymanager/main.py @@ -487,31 +487,45 @@ class DMlightdm(DisplayManager): self.root_mount_point, "etc/lightdm/lightdm.conf" ) text = [] + addseat = False + loopcount = 0 if os.path.exists(lightdm_conf_path): with open(lightdm_conf_path, 'r') as lightdm_conf: text = lightdm_conf.readlines() + # Check to make sure [SeatDefaults] or [Seat:*] is in the config, + # otherwise we'll risk malforming the config + if not '[SeatDefaults]' in text and not '[Seat:*]' in text: + addseat = True with open(lightdm_conf_path, 'w') as lightdm_conf: + if addseat: + # Append Seat line to start of file rather than leaving it without one + # This keeps the config from being malformed for LightDM + text = ["[Seat:*]\n"] + text + loopcount = 0 for line in text: if 'autologin-user=' in line: if do_autologin: line = "autologin-user={!s}\n".format(username) else: line = "#autologin-user=\n" + text[loopcount] = line + loopcount += 1 - lightdm_conf.write(line) + lightdm_conf.write("".join(text)) + loopcount = 0 else: try: # Create a new lightdm.conf file; this is documented to be - # read last, after aeverything in lightdm.conf.d/ + # read last, after everything in lightdm.conf.d/ with open(lightdm_conf_path, 'w') as lightdm_conf: if do_autologin: lightdm_conf.write( - "autologin-user={!s}\n".format(username)) + "[Seat:*]\nautologin-user={!s}\n".format(username)) else: lightdm_conf.write( - "#autologin-user=\n") + "[Seat:*]\n#autologin-user=\n") except FileNotFoundError: return ( _("Cannot write LightDM configuration file"),