def enable_system_recovery_flow(): """Configure the system to start in recovery mode on next bootup. This sets up a few things: 1. Replaces the normal bootup splash animation with another for recovery. 2. Configures LightDM autologin for multi-user systems since the Updater runs under the user. Returns: bool - Whether the operation was successful """ logger.debug('Configuring recovery stategy for next boot') successful = True # Set the recovery bootup splash and replace normal bootup one. set_splash_interrupted() # Configure the system to autologin for multi-user systems. This is due # to the Updater process running under the user. try: user = get_user_unsudoed() if user: # TODO: Create a single function for these in kano_init. enable_console_autologin(user) set_ldm_autologin(user) enable_ldm_autostart() else: successful = False except: logger.error('Could not configure autologin for update recovery!') successful = False return successful
def kill_apps(): # since kano-updater is run as root, need to inform # kanolauncher about user user = get_user_unsudoed() home = os.path.join('/home/', user) variables = 'HOME={} USER={}'.format(home, user) run_cmd('{} /usr/bin/kano-launcher /bin/true kano-kill-apps'.format( variables))
def beta_110_to_beta_111(self, dummy_progress): install('kano-sound-files kano-init-flow') # Create first boot file so we don't annoy existent users username = get_user_unsudoed() first_boot = '/home/%s/.kano-settings/first_boot' % username try: open(first_boot, 'w').close() except: pass
def beta_123_to_beta_124(self, dummy_progress): # Rename Snake custom theme username = get_user_unsudoed() path = '/home/%s/Snake-content/' % username old_name = 'custom_theme' if os.path.exists(path + old_name): new_name = 'custom-theme.xml' try: os.rename(path + old_name, path + new_name) except Exception: pass
def chown_path(path, user=None, group=None): user_unsudoed = get_user_unsudoed() if not user: user = user_unsudoed if not group: group = user_unsudoed try: uid = pwd.getpwnam(user).pw_uid gid = grp.getgrnam(group).gr_gid os.chown(path, uid, gid) except KeyError as e: from kano.logging import logger logger.error( 'user {} or group {} do not match with existing'.format(user, group)) ret_val = False except OSError as e: from kano.logging import logger logger.error( 'Error while trying to chown, root priviledges needed {}'.format(e)) ret_val = False else: ret_val = True return ret_val
def test_get_user_unsudoed(fake_user): from kano.utils.user import get_user_unsudoed assert get_user_unsudoed() == fake_user.username
import os import re import shutil from kano.logging import logger from kano.utils.user import get_user_unsudoed from kano.utils.file_operations import ensure_dir, read_json, write_json, \ chown_path from kano_settings.common import settings_dir from kano_settings.system.boards import get_board_props USER = None USER_ID = None username = get_user_unsudoed() if username != 'root': if os.path.exists(settings_dir) and os.path.isfile(settings_dir): os.rename(settings_dir, settings_dir + '.bak') ensure_dir(settings_dir) chown_path(settings_dir) settings_file = os.path.join(settings_dir, 'settings') def merge_dicts(base, override): for key, value in override.iteritems(): base[key] = value return base DEFAULT_CONFIG = { 'Keyboard-continent-index': 1,