def get_pae(self): machine = getoutput('uname -m')[0] release = getoutput('uname -r')[0] if self.test: machine = 'i686' release = '3.16.0-4-586' self.log.write("PAE check: machine={} / release={}".format(machine, release), 'get_pae') if machine == 'i686': # Check if PAE is installed and running selected = False if 'pae' in release: self.paeBooted = True selected = True else: if getPackageVersion('linux-image-686-pae') != '': selected = True # Get the logo logo = join(self.mediaDir, 'images/pae.png') # Fill self.hardware paeDescription = _("PAE capable system") self.hardware.append([selected, logo, paeDescription, '', 'pae', ''])
def get_pae(self): machine = getoutput('uname -m')[0] release = getoutput('uname -r')[0] if self.test: machine = 'i686' release = '3.16.0-4-586' self.log.write( "PAE check: machine={} / release={}".format(machine, release), 'get_pae') if machine == 'i686': # Check if PAE is installed and running selected = False if 'pae' in release: self.paeBooted = True selected = True else: if getPackageVersion('linux-image-686-pae') != '': selected = True # Get the logo logo = join(self.mediaDir, 'images/pae.png') # Fill self.hardware paeDescription = _("PAE capable system") self.hardware.append( [selected, logo, paeDescription, '', 'pae', ''])
def __init__(self): # Load window and widgets self.scriptName = basename(__file__) self.scriptDir = abspath(dirname(__file__)) self.mediaDir = join(self.scriptDir, '../../share/usb-creator') self.builder = Gtk.Builder() self.builder.add_from_file(join(self.mediaDir, 'usb-creator.glade')) # Main window objects go = self.builder.get_object self.window = go("usb-creator") self.lblDevice = go("lblDevice") self.lblIso = go("lblIso") self.lblAvailable = go("lblAvailable") self.lblRequired = go("lblRequired") self.cmbDevice = go("cmbDevice") self.cmbDeviceHandler = ComboBoxHandler(self.cmbDevice) self.txtIso = go("txtIso") self.btnRefresh = go("btnRefresh") self.btnUnmount = go("btnUnmount") self.btnBrowseIso = go("btnBrowseIso") self.btnClear = go("btnClear") self.chkFormatDevice = go("chkFormatDevice") self.chkRepairDevice = go("chkRepairDevice") self.btnExecute = go("btnExecute") self.lblUsb = go("lblUsb") self.tvUsbIsos = go("tvUsbIsos") self.btnDelete = go("btnDelete") self.pbUsbCreator = go("pbUsbCreator") self.statusbar = go("statusbar") # Translations self.window.set_title(_("USB Creator")) self.lblDevice.set_label(_("Device")) self.lblUsb.set_label(_("USB")) self.available_text = _("Available") self.required_text = _("Required") self.chkFormatDevice.set_label(_("Format device")) self.chkFormatDevice.set_tooltip_text(_("Warning: all data will be lost")) self.chkRepairDevice.set_label(_("Repair device")) self.chkRepairDevice.set_tooltip_text(_("Tries to repair an unbootable USB")) self.btnExecute.set_label("_{}".format(_("Execute"))) self.lblIso.set_label(_("ISO")) self.btnDelete.set_label("_{}".format(_("Delete"))) self.btnRefresh.set_tooltip_text(_("Refresh device list")) self.btnUnmount.set_tooltip_text(_("Unmount device")) self.btnBrowseIso.set_tooltip_text(_("Browse for ISO file")) self.btnClear.set_tooltip_text(_("Clear the ISO field")) # Log lines to show: check string, percent done (0=pulse, appends last word in log line), show line (translatable) self.log_lines = [] self.log_lines.append(["partitioning usb", 5, _("Partitioning USB...")]) self.log_lines.append(["searching for bad blocks", 0, _("Searching for bad block")]) self.log_lines.append(["installing", 15, _("Installing Grub...")]) self.log_lines.append(["rsync", 25, _("Start copying ISO...")]) self.log_lines.append(["left to copy", 0, _("kB left to copy:")]) self.log_lines.append(["check hash", 85, _("Check hash of ISO...")]) # Initiate variables self.devices = [] self.device = {} self.device['path'] = '' self.device['size'] = 0 self.device['has_partition'] = False self.device['mount'] = '' self.device['available'] = 0 self.device["new_iso"] = '' self.device["new_iso_required"] = 0 self.logos = self.get_logos() self.queue = Queue(-1) self.threads = {} self.htmlDir = join(self.mediaDir, "html") self.helpFile = join(self.get_language_dir(), "help.html") log = getoutput("cat /usr/bin/usb-creator | grep 'LOG=' | cut -d'=' -f 2") self.log_file = log[0] self.log = Logger(self.log_file, addLogTime=False, maxSizeKB=5120) self.tvUsbIsosHandler = TreeViewHandler(self.tvUsbIsos) self.lblAvailable.set_label('') self.lblRequired.set_label('') # Connect builder signals and show window self.builder.connect_signals(self) self.window.show_all() # Get attached devices self.on_btnRefresh_clicked() # Init log init_log = ">>> Start USB Creator: {} <<<".format(datetime.now()) self.log.write(init_log) # Version information self.version_text = _("Version") self.pck_version = getPackageVersion('usb-creator') self.set_statusbar_message("{}: {}".format(self.version_text, self.pck_version))
def __init__(self): self.scriptDir = dirname(realpath(__file__)) # Load window and widgets self.builder = Gtk.Builder() self.builder.add_from_file(join(self.scriptDir, '../../share/debian-plymouth-manager/debian-plymouth-manager.glade')) # Main window objects go = self.builder.get_object self.window = go('dpmWindow') self.tv1 = go('tv1') self.tv2 = go('tv2') self.sw2 = go('sw2') self.statusbar = go('statusbar') self.btnPlymouth = go('btnPlymouth') self.btnThemes = go('btnThemes') self.btnGrub = go('btnGrub') self.pbDPM = go('pbDPM') self.btn1 = go('btn1') self.btn2 = go('btn2') self.lblTitle1 = go('lblTitle1') self.lblTitle2 = go('lblTitle2') # Translations title = _("Debian Plymouth Manager") self.window.set_title(title) self.btnPlymouth.set_label("_" + _("Plymouth")) self.btnThemes.set_label("_" + _("Themes")) self.btnGrub.set_label("_" + _("Grub")) self.selectedMenuItem = None self.selectedAvailableTheme = None self.selectedRemoveTheme = None self.threadPackage = None self.queue = Queue() self.noPlymouth = _('None: no plymouth splash') # Set some variables self.logFile = '/var/log/dpm.log' self.log = Logger(self.logFile, addLogTime=False, maxSizeKB=1024) self.version = utils.getPackageVersion('debian-plymouth-manager') self.plymouth = Plymouth(self.log) self.grub = Grub(self.log) self.resolutions = utils.getResolutions('800x600', '', True, False) self.currentResolution = self.plymouth.getCurrentResolution() self.selectedResolution = self.currentResolution self.currentGrubResolution = self.grub.getCurrentResolution() self.selectedGrubResolution = self.currentGrubResolution self.currentTheme = self.plymouth.getCurrentTheme() self.selectedTheme = self.currentTheme self.installedThemes = self.plymouth.getInstalledThemes() self.availableThemes = self.plymouth.getAvailableThemes() self.tv1Handler = TreeViewHandler(self.tv1, self.log) self.tv2Handler = TreeViewHandler(self.tv2, self.log) self.force = utils.get_apt_force() self.on_btnPlymouth_clicked() # Connect builder signals and show window self.builder.connect_signals(self) self.window.show_all() # TODO: Hide the tool bar for now go('tlbMain').set_visible(False)
def run(self): try: if not os.path.exists(self.modulesPath): utils.shell_exec("touch {}".format(self.modulesPath)) # Cleanup first utils.shell_exec("sed -i -e 's/^ *//; s/ *$//' %s" % self.modulesPath) # Trim all lines utils.shell_exec("sed -i -e '/^.*KMS$/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^intel_agp$/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^drm$/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^nouveau modeset.*/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^radeon modeset.*/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^i915 modeset.*/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^uvesafb\s*mode_option.*/d' %s" % self.modulesPath) if os.path.exists(self.boot): utils.shell_exec("sed -i -e '/^GRUB_GFXPAYLOAD_LINUX.*/d' %s" % self.boot) splashFile = '/etc/initramfs-tools/conf.d/splash' if os.path.exists(splashFile): os.remove(splashFile) # Set/Unset splash cmd = "sed -i -e 's/\s*[a-z]*splash//' {}".format(self.boot) utils.shell_exec(cmd) if self.theme is None: self.log.write("Set nosplash", 'PlymouthSave.run', 'debug') cmd = "sed -i -e '/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ nosplash\"/' {}".format( self.boot) utils.shell_exec(cmd) # Comment the GRUB_GFXMODE line if needed cmd = "sed -i '/GRUB_GFXMODE=/s/^/#/' %s" % self.boot utils.shell_exec(cmd) else: self.log.write("Set splash", 'PlymouthSave.run', 'debug') cmd = "sed -i -e '/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ splash\"/' {}".format( self.boot) utils.shell_exec(cmd) # Set resolution if self.resolution is not None: self.log.write("GRUB_GFXMODE={}".format(self.resolution), 'PlymouthSave.run', 'debug') cmd = "sed -i -e '/GRUB_GFXMODE=/ c GRUB_GFXMODE={0}' {1}".format( self.resolution, self.boot) utils.shell_exec(cmd) # Only for plymouth version older than 9 if self.theme is not None and self.resolution is not None: plymouthVersion = utils.strToNumber( utils.getPackageVersion("plymouth").replace('.', '')[0:2], True) self.log.write("plymouthVersion={}".format(plymouthVersion), 'PlymouthSave.run', 'debug') if plymouthVersion < 9: # Write uvesafb command to modules file self.log.write("> Use uvesafb to configure Plymouth", 'PlymouthSave.run', 'debug') line = "\nuvesafb mode_option=%s-24 mtrr=3 scroll=ywrap\ndrm\n" % self.resolution with open(self.modulesPath, 'a') as f: f.write(line) # Use framebuffer line = "FRAMEBUFFER=y" with open('/etc/initramfs-tools/conf.d/splash', 'w') as f: f.write(line) # Read grub for debugging purposes with open(self.boot, 'r') as f: content = f.read() self.log.write("\nNew grub:\n{}\n".format(content), 'PlymouthSave.run', 'debug') # Update grub if 'grub' in self.boot: utils.shell_exec('update-grub') else: utils.shell_exec('update-burg') # Set the theme and update initramfs if self.theme is not None: utils.shell_exec("{0} -R {1}".format(self.setThemePath, self.theme)) except Exception as detail: self.log.write(detail, 'PlymouthSave.run', 'exception')
def __init__(self): self.scriptDir = dirname(realpath(__file__)) # Load window and widgets self.builder = Gtk.Builder() self.builder.add_from_file( join( self.scriptDir, '../../share/debian-plymouth-manager/debian-plymouth-manager.glade' )) # Main window objects go = self.builder.get_object self.window = go('dpmWindow') self.tv1 = go('tv1') self.tv2 = go('tv2') self.sw2 = go('sw2') self.statusbar = go('statusbar') self.btnPlymouth = go('btnPlymouth') self.btnThemes = go('btnThemes') self.btnGrub = go('btnGrub') self.pbDPM = go('pbDPM') self.btn1 = go('btn1') self.btn2 = go('btn2') self.lblTitle1 = go('lblTitle1') self.lblTitle2 = go('lblTitle2') # Translations title = _("Debian Plymouth Manager") self.window.set_title(title) self.btnPlymouth.set_label("_" + _("Plymouth")) self.btnThemes.set_label("_" + _("Themes")) self.btnGrub.set_label("_" + _("Grub")) self.selectedMenuItem = None self.selectedAvailableTheme = None self.selectedRemoveTheme = None self.threadPackage = None self.queue = Queue() self.noPlymouth = _('None: no plymouth splash') # Set some variables self.logFile = '/var/log/dpm.log' self.log = Logger(self.logFile, addLogTime=False, maxSizeKB=1024) self.version = utils.getPackageVersion('debian-plymouth-manager') self.plymouth = Plymouth(self.log) self.grub = Grub(self.log) self.resolutions = utils.getResolutions('800x600', '', True, False) self.currentResolution = self.plymouth.getCurrentResolution() self.selectedResolution = self.currentResolution self.currentGrubResolution = self.grub.getCurrentResolution() self.selectedGrubResolution = self.currentGrubResolution self.currentTheme = self.plymouth.getCurrentTheme() self.selectedTheme = self.currentTheme self.installedThemes = self.plymouth.getInstalledThemes() self.availableThemes = self.plymouth.getAvailableThemes() self.tv1Handler = TreeViewHandler(self.tv1, self.log) self.tv2Handler = TreeViewHandler(self.tv2, self.log) self.force = utils.get_apt_force() self.on_btnPlymouth_clicked() # Connect builder signals and show window self.builder.connect_signals(self) self.window.show_all() # TODO: Hide the tool bar for now go('tlbMain').set_visible(False)
def __init__(self): # Load window and widgets self.scriptName = basename(__file__) self.scriptDir = abspath(dirname(__file__)) self.mediaDir = join(self.scriptDir, '../../share/usb-creator') self.builder = Gtk.Builder() self.builder.add_from_file(join(self.mediaDir, 'usb-creator.glade')) # Main window objects go = self.builder.get_object self.window = go("usb-creator") self.lblDevice = go("lblDevice") self.lblIso = go("lblIso") self.lblAvailable = go("lblAvailable") self.lblRequired = go("lblRequired") self.cmbDevice = go("cmbDevice") self.cmbDeviceHandler = ComboBoxHandler(self.cmbDevice) self.txtIso = go("txtIso") self.btnRefresh = go("btnRefresh") self.btnUnmount = go("btnUnmount") self.btnBrowseIso = go("btnBrowseIso") self.btnClear = go("btnClear") self.chkFormatDevice = go("chkFormatDevice") self.chkRepairDevice = go("chkRepairDevice") self.btnExecute = go("btnExecute") self.lblUsb = go("lblUsb") self.tvUsbIsos = go("tvUsbIsos") self.btnDelete = go("btnDelete") self.pbUsbCreator = go("pbUsbCreator") self.statusbar = go("statusbar") # Translations self.window.set_title(_("USB Creator")) self.lblDevice.set_label(_("Device")) self.lblUsb.set_label(_("USB")) self.available_text = _("Available") self.required_text = _("Required") self.chkFormatDevice.set_label(_("Format device")) self.chkFormatDevice.set_tooltip_text( _("Warning: all data will be lost")) self.chkRepairDevice.set_label(_("Repair device")) self.chkRepairDevice.set_tooltip_text( _("Tries to repair an unbootable USB")) self.btnExecute.set_label("_{}".format(_("Execute"))) self.lblIso.set_label(_("ISO")) self.btnDelete.set_label("_{}".format(_("Delete"))) self.btnRefresh.set_tooltip_text(_("Refresh device list")) self.btnUnmount.set_tooltip_text(_("Unmount device")) self.btnBrowseIso.set_tooltip_text(_("Browse for ISO file")) self.btnClear.set_tooltip_text(_("Clear the ISO field")) # Log lines to show: check string, percent done (0=pulse, appends last word in log line), show line (translatable) self.log_lines = [] self.log_lines.append( ["partitioning usb", 5, _("Partitioning USB...")]) self.log_lines.append( ["searching for bad blocks", 0, _("Searching for bad block")]) self.log_lines.append(["installing", 15, _("Installing Grub...")]) self.log_lines.append(["rsync", 25, _("Start copying ISO...")]) self.log_lines.append(["left to copy", 0, _("kB left to copy:")]) self.log_lines.append(["check hash", 85, _("Check hash of ISO...")]) # Initiate variables self.device = {} self.device['path'] = '' self.device['mount'] = '' self.device['size'] = 0 self.device['available'] = 0 self.device["new_iso"] = '' self.device["new_iso_required"] = 0 self.logos = self.get_logos() self.queue = Queue(-1) self.threads = {} self.htmlDir = join(self.mediaDir, "html") self.helpFile = join(self.get_language_dir(), "help.html") log = getoutput( "cat /usr/bin/usb-creator | grep 'LOG=' | cut -d'=' -f 2") self.log_file = log[0] self.log = Logger(self.log_file, addLogTime=False, maxSizeKB=5120) self.tvUsbIsosHandler = TreeViewHandler(self.tvUsbIsos) self.udisks2 = Udisks2() self.lblAvailable.set_label('') self.lblRequired.set_label('') # Connect builder signals and show window self.builder.connect_signals(self) self.window.show_all() # Get attached devices self.on_btnRefresh_clicked() # Init log init_log = ">>> Start USB Creator: {} <<<".format(datetime.now()) self.log.write(init_log) # Version information self.version_text = _("Version") self.pck_version = getPackageVersion('usb-creator') self.set_statusbar_message("{}: {}".format(self.version_text, self.pck_version))
def get_nvidia(self): manufacturerId = '10de' deviceArray = self.get_lspci_info(manufacturerId, 'VGA') if self.test: deviceArray = [['NVIDIA Corporation GT218 [GeForce G210M]', manufacturerId, '0a74']] if self.test_optimus: deviceArray = [['Intel Corporation Haswell-ULT Integrated Graphics Controller', '8086', '0a16'], \ ['NVIDIA Corporation GK107M [GeForce GT 750M]', manufacturerId, '0fe4']] if deviceArray: optimus = False devices = [] self.log.write("Device(s): {}".format(deviceArray), 'get_nvidia') # Check if nvidia is loaded # If it is: checkbox is selected loadedDrv = self.get_loaded_graphical_driver() self.log.write("Loaded graphical driver: {}".format(loadedDrv), 'get_nvidia') # Get the manufacturer's logo logo = join(self.mediaDir, 'images/nvidia.png') # Fill the hardware array for device in deviceArray: if device[1] == '8086': optimus = True else: devices.append(device) for device in devices: self.log.write("Nvidia device found: {}".format(device[0]), 'get_nvidia') optimusString = "" if optimus: optimusString = "(Optimus) " # Check if the available driver is already loaded selected = False if optimus: if loadedDrv == 'nvidia' or loadedDrv == 'intel': bbversion = getPackageVersion("bumblebee-nvidia") self.log.write("bumblebee-nvidia version: {}".format(bbversion), 'get_nvidia') if bbversion != '': selected = True elif loadedDrv == 'nvidia': selected = True driver = "" if optimus: driver = "bumblebee-nvidia" else: if self.test: driver = 'nvidia-driver' else: nvidiaDetect = getoutput("nvidia-detect | grep nvidia- | tr -d ' '") if nvidiaDetect: driver = nvidiaDetect[0] self.log.write("Nvidia driver to use: {}".format(driver), 'get_nvidia') # Fill self.hardware if driver != "": #shortDevice = "{0}{1}".format(optimusString, self.shorten_long_string(device[0], 100)) self.hardware.append([selected, logo, "{0}{1}".format(optimusString, device[0]), driver, device[1], device[2]])
def get_nvidia(self): manufacturerId = '10de' deviceArray = self.get_lspci_info(manufacturerId, 'VGA') if self.test: deviceArray = [[ 'NVIDIA Corporation GT218 [GeForce G210M]', manufacturerId, '0a74' ]] if self.test_optimus: deviceArray = [['Intel Corporation Haswell-ULT Integrated Graphics Controller', '8086', '0a16'], \ ['NVIDIA Corporation GK107M [GeForce GT 750M]', manufacturerId, '0fe4']] if deviceArray: optimus = False devices = [] self.log.write("Device(s): {}".format(deviceArray), 'get_nvidia') # Check if nvidia is loaded # If it is: checkbox is selected loadedDrv = self.get_loaded_graphical_driver() self.log.write("Loaded graphical driver: {}".format(loadedDrv), 'get_nvidia') # Get the manufacturer's logo logo = join(self.mediaDir, 'images/nvidia.png') # Fill the hardware array for device in deviceArray: if device[1] == '8086': optimus = True else: devices.append(device) for device in devices: self.log.write("Nvidia device found: {}".format(device[0]), 'get_nvidia') optimusString = "" if optimus: optimusString = "(Optimus) " # Check if the available driver is already loaded selected = False if optimus: if loadedDrv == 'nvidia' or loadedDrv == 'intel': bbversion = getPackageVersion("bumblebee-nvidia") self.log.write( "bumblebee-nvidia version: {}".format(bbversion), 'get_nvidia') if bbversion != '': selected = True elif loadedDrv == 'nvidia': selected = True driver = "" if optimus: driver = "bumblebee-nvidia" else: if self.test: driver = 'nvidia-driver' else: nvidiaDetect = getoutput( "nvidia-detect | grep nvidia- | tr -d ' '") if nvidiaDetect: driver = nvidiaDetect[0] self.log.write("Nvidia driver to use: {}".format(driver), 'get_nvidia') # Fill self.hardware if driver != "": #shortDevice = "{0}{1}".format(optimusString, self.shorten_long_string(device[0], 100)) self.hardware.append([ selected, logo, "{0}{1}".format(optimusString, device[0]), driver, device[1], device[2] ])
def run(self): try: if not os.path.exists(self.modulesPath): utils.shell_exec("touch {}".format(self.modulesPath)) # Cleanup first utils.shell_exec("sed -i -e 's/^ *//; s/ *$//' %s" % self.modulesPath) # Trim all lines utils.shell_exec("sed -i -e '/^.*KMS$/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^intel_agp$/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^drm$/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^nouveau modeset.*/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^radeon modeset.*/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^i915 modeset.*/d' %s" % self.modulesPath) utils.shell_exec("sed -i -e '/^uvesafb\s*mode_option.*/d' %s" % self.modulesPath) if os.path.exists(self.boot): utils.shell_exec("sed -i -e '/^GRUB_GFXPAYLOAD_LINUX.*/d' %s" % self.boot) splashFile = '/etc/initramfs-tools/conf.d/splash' if os.path.exists(splashFile): os.remove(splashFile) # Set/Unset splash cmd = "sed -i -e 's/\s*[a-z]*splash//' {}".format(self.boot) utils.shell_exec(cmd) if self.theme is None: self.log.write("Set nosplash", 'PlymouthSave.run', 'debug') cmd = "sed -i -e '/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ nosplash\"/' {}".format(self.boot) utils.shell_exec(cmd) # Comment the GRUB_GFXMODE line if needed cmd = "sed -i '/GRUB_GFXMODE=/s/^/#/' %s" % self.boot utils.shell_exec(cmd) else: self.log.write("Set splash", 'PlymouthSave.run', 'debug') cmd = "sed -i -e '/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ splash\"/' {}".format(self.boot) utils.shell_exec(cmd) # Set resolution if self.resolution is not None: self.log.write("GRUB_GFXMODE={}".format(self.resolution), 'PlymouthSave.run', 'debug') cmd = "sed -i -e '/GRUB_GFXMODE=/ c GRUB_GFXMODE={0}' {1}".format(self.resolution, self.boot) utils.shell_exec(cmd) # Only for plymouth version older than 9 if self.theme is not None and self.resolution is not None: plymouthVersion = utils.strToNumber(utils.getPackageVersion("plymouth").replace('.', '')[0:2], True) self.log.write("plymouthVersion={}".format(plymouthVersion), 'PlymouthSave.run', 'debug') if plymouthVersion < 9: # Write uvesafb command to modules file self.log.write("> Use uvesafb to configure Plymouth", 'PlymouthSave.run', 'debug') line = "\nuvesafb mode_option=%s-24 mtrr=3 scroll=ywrap\ndrm\n" % self.resolution with open(self.modulesPath, 'a') as f: f.write(line) # Use framebuffer line = "FRAMEBUFFER=y" with open('/etc/initramfs-tools/conf.d/splash', 'w') as f: f.write(line) # Read grub for debugging purposes with open(self.boot, 'r') as f: content = f.read() self.log.write("\nNew grub:\n{}\n".format(content), 'PlymouthSave.run', 'debug') # Update grub if 'grub' in self.boot: utils.shell_exec('update-grub') else: utils.shell_exec('update-burg') # Set the theme and update initramfs if self.theme is not None: utils.shell_exec("{0} -R {1}".format(self.setThemePath, self.theme)) except Exception as detail: self.log.write(detail, 'PlymouthSave.run', 'exception')