Use configparser to parse sddm.conf

Since sddm.conf follows the INI format we can use configparser
with a few added options to properly parse the config and write
it out instead of manually parsing each line which is slow and
prone to error.

For eg. The old code would fail to parse a conf which had no
commented out User key but where the user had configured autologin
in Calamares.
main
Rohan Garg 8 years ago committed by Teo Mrnjavac
parent 4626a769a5
commit f7ac1a3ede

@ -24,6 +24,7 @@ import os
import collections
import re
import libcalamares
import configparser
DesktopEnvironment = collections.namedtuple('DesktopEnvironment', ['executable', 'desktop_file'])
@ -253,34 +254,17 @@ def set_autologin(username, displaymanagers, default_desktop_environment, root_m
# Systems with Sddm as Desktop Manager
sddm_conf_path = os.path.join(root_mount_point, "etc/sddm.conf")
if os.path.isfile(sddm_conf_path):
libcalamares.utils.debug('SDDM config file exists')
else:
libcalamares.utils.check_target_env_call(["sh", "-c", "sddm --example-config > /etc/sddm.conf"])
text = []
sddm_config = configparser.ConfigParser()
# Make everything case sensitive
sddm_config.optionxform = str
with open(sddm_conf_path, 'r') as sddm_conf:
text = sddm_conf.readlines()
with open(sddm_conf_path, 'w') as sddm_conf:
for line in text:
# User= line, possibly commented out
if re.match('\\s*(?:#\\s*)?User=', line):
if do_autologin:
line = 'User={!s}\n'.format(username)
else:
line = '#User=\n'
# Session= line, commented out or with empty value
if re.match('\\s*#\\s*Session=|\\s*Session=$', line):
if default_desktop_environment is not None:
if do_autologin:
line = 'Session={!s}.desktop\n'.format(default_desktop_environment.desktop_file)
else:
line = '#Session={!s}.desktop\n'.format(default_desktop_environment.desktop_file)
if os.path.isfile(sddm_conf_path):
sddm_config.read(sddm_conf_path)
sddm_conf.write(line)
if do_autologin:
sddm_config['Autologin'] = { 'User': username }
with open(sddm_conf_path, 'w') as sddm_config_file:
sddm_config.write(sddm_config_file, space_around_delimiters=False)
return None

Loading…
Cancel
Save