Also fixed crash on windows when detect usb drive button is clicked.
pull/124/head
mbusb 8 years ago
commit 9ffb4ba5e5

3
.gitignore vendored

@ -98,3 +98,6 @@ multibootusb*.tar.gz
# Setup file # Setup file
multibootusb*.exe multibootusb*.exe
# VIM temp files
*.swp

@ -48,7 +48,7 @@ def extract_iso(src, dst, pattern=None, suppress_out=True):
_cmd = _7zip + cli_option + ' x -y -o' + gen.quote(dst) + ' ' + gen.quote(src) + suppress_out _cmd = _7zip + cli_option + ' x -y -o' + gen.quote(dst) + ' ' + gen.quote(src) + suppress_out
else: else:
_cmd = _7zip + ' -y x ' + gen.quote(src) + ' -o' + dst + ' ' + gen.quote(pattern) + ' -r' + suppress_out _cmd = _7zip + ' -y x ' + gen.quote(src) + ' -o' + dst + ' ' + gen.quote(pattern) + ' -r' + suppress_out
# gen.log('Executing', _cmd) gen.log('Executing ' + _cmd)
_7zip_process = subprocess.Popen(_cmd, universal_newlines=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE, _7zip_process = subprocess.Popen(_cmd, universal_newlines=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE,
stdout=subprocess.PIPE, shell=True) stdout=subprocess.PIPE, shell=True)
config.status_text = 'Status: Extracting ' + os.path.basename(src).strip() config.status_text = 'Status: Extracting ' + os.path.basename(src).strip()

@ -11,7 +11,10 @@ usb_disk = ""
usb_mount = "" usb_mount = ""
usb_uuid = "" usb_uuid = ""
usb_label = "" usb_label = ""
image_path = ""
persistence = 0 persistence = 0
persistence_available = False
persistence_max_size = 0
distro = "" distro = ""
status_text = "" status_text = ""
percentage = 0 percentage = 0

@ -19,7 +19,7 @@ def mbusb_update_grub_cfg():
:return: :return:
""" """
# Lets convert syslinux config file to grub2 accepted file format. # Lets convert syslinux config file to grub2 accepted file format.
_iso_dir = os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.iso_link)) _iso_dir = os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.image_path))
try: try:
gen.log('Trying to create loopback.cfg') gen.log('Trying to create loopback.cfg')
iso2_grub2_cfg = iso2grub2(_iso_dir) iso2_grub2_cfg = iso2grub2(_iso_dir)
@ -34,21 +34,27 @@ def mbusb_update_grub_cfg():
sys_cfg_path = None sys_cfg_path = None
loopback_cfg_path = None loopback_cfg_path = None
mbus_grub_cfg_path = os.path.join(config.usb_mount, 'multibootusb', 'grub', 'grub.cfg') mbus_grub_cfg_path = os.path.join(config.usb_mount, 'multibootusb', 'grub', 'grub.cfg')
iso_grub_cfg = iso.iso_file_path(config.iso_link, 'grub.cfg') iso_grub_cfg = iso.iso_file_path(config.image_path, 'grub.cfg')
if iso.isolinux_bin_dir(config.iso_link) is not False: if iso.isolinux_bin_dir(config.image_path) is not False:
iso_sys_cfg_path = os.path.join(iso.isolinux_bin_dir(config.iso_link), 'syslinux.cfg') iso_sys_cfg_path = os.path.join(iso.isolinux_bin_dir(config.image_path), 'syslinux.cfg')
iso_iso_cfg_path = os.path.join(iso.isolinux_bin_dir(config.iso_link), 'isolinux.cfg') iso_iso_cfg_path = os.path.join(iso.isolinux_bin_dir(config.image_path), 'isolinux.cfg')
if os.path.exists(os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.iso_link), if os.path.exists(os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.image_path),
iso_sys_cfg_path)): iso_sys_cfg_path)):
syslinux_menu = iso_sys_cfg_path.replace('\\', '/') syslinux_menu = iso_sys_cfg_path.replace('\\', '/')
elif os.path.exists(os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.iso_link), elif os.path.exists(os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.image_path),
iso_iso_cfg_path)): iso_iso_cfg_path)):
syslinux_menu = iso_iso_cfg_path.replace('\\', '/') syslinux_menu = iso_iso_cfg_path.replace('\\', '/')
efi_grub_cfg = get_grub_cfg(config.iso_link) #<<<<<<< HEAD
boot_grub_cfg = get_grub_cfg(config.iso_link, efi=False) # efi_grub_cfg = get_grub_cfg(config.iso_link)
loopback_cfg_path = iso.iso_file_path(config.iso_link, 'loopback.cfg') # boot_grub_cfg = get_grub_cfg(config.iso_link, efi=False)
# loopback_cfg_path = iso.iso_file_path(config.iso_link, 'loopback.cfg')
#=======
efi_grub_cfg = get_grub_cfg(config.image_path)
loopback_cfg_path = iso.iso_file_path(config.image_path, 'loopback.cfg')
boot_grub_cfg = get_grub_cfg(config.image_path, efi=False)
#>>>>>>> origin/devel
if loopback_cfg_path is not False: if loopback_cfg_path is not False:
grub_cfg_path = loopback_cfg_path.replace('\\', '/') grub_cfg_path = loopback_cfg_path.replace('\\', '/')
@ -65,30 +71,30 @@ def mbusb_update_grub_cfg():
gen.log('Updating grub.cfg file...') gen.log('Updating grub.cfg file...')
if grub_custom_menu(mbus_grub_cfg_path, config.distro) is False: if grub_custom_menu(mbus_grub_cfg_path, config.distro) is False:
with open(mbus_grub_cfg_path, 'a') as f: with open(mbus_grub_cfg_path, 'a') as f:
f.write("#start " + iso.iso_basename(config.iso_link) + "\n") f.write("#start " + iso.iso_basename(config.image_path) + "\n")
if grub_cfg_path is not None: if grub_cfg_path is not None:
f.write(' menuentry ' + iso.iso_basename(config.iso_link) + ' {configfile ' f.write(' menuentry ' + iso.iso_basename(config.image_path) + ' {configfile '
+ '/multibootusb/' + iso.iso_basename(config.iso_link) + '/' + grub_cfg_path + '}' + "\n") + '/multibootusb/' + iso.iso_basename(config.image_path) + '/' + grub_cfg_path + '}' + "\n")
elif config.distro == 'f4ubcd': elif config.distro == 'f4ubcd':
f.write(' menuentry ' + iso.iso_basename(config.iso_link) + f.write(' menuentry ' + iso.iso_basename(config.image_path) +
' {linux /multibootusb/grub.exe --config-file=/multibootusb' + ' {linux /multibootusb/grub.exe --config-file=/multibootusb' +
iso.iso_basename(config.iso_link) + '/menu.lst}'"\n") iso.iso_basename(config.image_path) + '/menu.lst}'"\n")
elif config.distro == 'pc-unlocker': elif config.distro == 'pc-unlocker':
f.write(' menuentry ' + iso.iso_basename(config.iso_link) + f.write(' menuentry ' + iso.iso_basename(config.image_path) +
' {\n linux /ldntldr\n ntldr /ntldr }' + "\n") ' {\n linux /ldntldr\n ntldr /ntldr }' + "\n")
elif config.distro == 'ReactOS': elif config.distro == 'ReactOS':
f.write(' menuentry ' + iso.iso_basename(config.iso_link) + f.write(' menuentry ' + iso.iso_basename(config.image_path) +
' {multiboot /loader/setupldr.sys}' + "\n") ' {multiboot /loader/setupldr.sys}' + "\n")
elif config.distro == 'mentest': elif config.distro == 'mentest':
f.write(' menuentry ' + iso.iso_basename(config.iso_link) + f.write(' menuentry ' + iso.iso_basename(config.image_path) +
' {linux16 ' + '/multibootusb/' + iso.iso_basename(config.iso_link) + '/BISOLINUX/MEMTEST}' + "\n") ' {linux16 ' + '/multibootusb/' + iso.iso_basename(config.image_path) + '/BISOLINUX/MEMTEST}' + "\n")
elif syslinux_menu is not None: elif syslinux_menu is not None:
f.write(' menuentry ' + iso.iso_basename(config.iso_link) + ' {syslinux_configfile ' f.write(' menuentry ' + iso.iso_basename(config.image_path) + ' {syslinux_configfile '
+ '/multibootusb/' + iso.iso_basename(config.iso_link) + '/' + syslinux_menu + '}' + "\n") + '/multibootusb/' + iso.iso_basename(config.image_path) + '/' + syslinux_menu + '}' + "\n")
f.write("#end " + iso.iso_basename(config.iso_link) + "\n") f.write("#end " + iso.iso_basename(config.image_path) + "\n")
# Ascertain if the entry is made.. # Ascertain if the entry is made..
if gen.check_text_in_file(mbus_grub_cfg_path, iso.iso_basename(config.iso_link)): if gen.check_text_in_file(mbus_grub_cfg_path, iso.iso_basename(config.image_path)):
gen.log('Updated entry in grub.cfg...') gen.log('Updated entry in grub.cfg...')
else: else:
gen.log('Unable to update entry in grub.cfg...') gen.log('Unable to update entry in grub.cfg...')
@ -124,7 +130,7 @@ def get_grub_cfg(iso_link, efi=True):
def grub_custom_menu(mbus_grub_cfg_path, distro): def grub_custom_menu(mbus_grub_cfg_path, distro):
iso_size_mb = iso.iso_size(config.iso_link) / (1024.0 * 1024.0) iso_size_mb = iso.iso_size(config.image_path) / (1024.0 * 1024.0)
gen.log('size of the ISO is ' + str(iso_size_mb)) gen.log('size of the ISO is ' + str(iso_size_mb))
if distro == 'sgrubd2' or distro == 'raw_iso': if distro == 'sgrubd2' or distro == 'raw_iso':
grub_raw_iso(mbus_grub_cfg_path) grub_raw_iso(mbus_grub_cfg_path)
@ -132,9 +138,9 @@ def grub_custom_menu(mbus_grub_cfg_path, distro):
''' '''
with open(mbus_grub_cfg_path, 'a') as f: with open(mbus_grub_cfg_path, 'a') as f:
f.write("#start " + iso.iso_basename(config.iso_link) + "\n") f.write("#start " + iso.iso_basename(config.image_path) + "\n")
f.write(grub_raw_iso()) f.write(grub_raw_iso())
f.write("#end " + iso.iso_basename(config.iso_link) + "\n") f.write("#end " + iso.iso_basename(config.image_path) + "\n")
elif iso_size_mb < 750.0: elif iso_size_mb < 750.0:
@ -151,15 +157,15 @@ def grub_raw_iso(mbus_grub_cfg_path):
Generic menu entry for booting ISO files directly using memdisk. Should have enough memory to load to RAM Generic menu entry for booting ISO files directly using memdisk. Should have enough memory to load to RAM
:return: :return:
""" """
menu_entry = ' search --set -f /multibootusb/' + iso.iso_basename(config.iso_link) + '/' + iso.iso_name(config.iso_link) + '\n' \ menu_entry = ' search --set -f /multibootusb/' + iso.iso_basename(config.image_path) + '/' + iso.iso_name(config.image_path) + '\n' \
' menuentry ' + iso.iso_basename(config.iso_link) + ' {\n' \ ' menuentry ' + iso.iso_basename(config.image_path) + ' {\n' \
' linux16 /multibootusb/memdisk iso raw vmalloc=750M\n' \ ' linux16 /multibootusb/memdisk iso raw vmalloc=750M\n' \
' initrd16 /multibootusb/' + iso.iso_basename(config.iso_link) + '/' + iso.iso_name(config.iso_link) + '\n' \ ' initrd16 /multibootusb/' + iso.iso_basename(config.image_path) + '/' + iso.iso_name(config.image_path) + '\n' \
'}\n' '}\n'
with open(mbus_grub_cfg_path, 'a') as f: with open(mbus_grub_cfg_path, 'a') as f:
f.write("#start " + iso.iso_basename(config.iso_link) + "\n") f.write("#start " + iso.iso_basename(config.image_path) + "\n")
f.write(menu_entry) f.write(menu_entry)
f.write("#end " + iso.iso_basename(config.iso_link) + "\n") f.write("#end " + iso.iso_basename(config.image_path) + "\n")
return menu_entry return menu_entry
@ -195,7 +201,7 @@ def iso2grub2(iso_dir):
:param file_out: Path to 'loopback.cfg' file. By default it is set to root of distro install directory. :param file_out: Path to 'loopback.cfg' file. By default it is set to root of distro install directory.
:return: :return:
""" """
grub_file_path = os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.iso_link), 'loopback.cfg') grub_file_path = os.path.join(config.usb_mount, 'multibootusb', iso.iso_basename(config.image_path), 'loopback.cfg')
gen.log('loopback.cfg file is set to ' + grub_file_path) gen.log('loopback.cfg file is set to ' + grub_file_path)
# Loop though the distro installed directory for finding config files # Loop though the distro installed directory for finding config files
for dirpath, dirnames, filenames in os.walk(iso_dir): for dirpath, dirnames, filenames in os.walk(iso_dir):
@ -247,12 +253,12 @@ def iso2grub2(iso_dir):
elif 'linux=' in kernel.lower(): elif 'linux=' in kernel.lower():
kernel = kernel.strip().replace('linux=', 'linux /multibootusb/' + kernel = kernel.strip().replace('linux=', 'linux /multibootusb/' +
iso.iso_basename(config.iso_link) + '/' iso.iso_basename(config.image_path) + '/'
+ iso.isolinux_bin_dir(config.iso_link).replace('\\', '/') + '/') + iso.isolinux_bin_dir(config.image_path).replace('\\', '/') + '/')
elif 'linux /' not in kernel: elif 'linux /' not in kernel:
kernel = kernel.strip().replace('linux ', 'linux /multibootusb/' + kernel = kernel.strip().replace('linux ', 'linux /multibootusb/' +
iso.iso_basename(config.iso_link) + '/' iso.iso_basename(config.image_path) + '/'
+ iso.isolinux_bin_dir(config.iso_link).replace('\\', '/') + '/') + iso.isolinux_bin_dir(config.image_path).replace('\\', '/') + '/')
# Ensure that we do not have linux parameter in caps # Ensure that we do not have linux parameter in caps
kernel = kernel.replace('LINUX ', 'linux ') kernel = kernel.replace('LINUX ', 'linux ')
@ -273,16 +279,16 @@ def iso2grub2(iso_dir):
# standard # standard
initrd = initrd.replace(',/', ' /') initrd = initrd.replace(',/', ' /')
initrd = initrd.replace('z,', 'z /multibootusb/' + initrd = initrd.replace('z,', 'z /multibootusb/' +
iso.iso_basename(config.iso_link) + '/' iso.iso_basename(config.image_path) + '/'
+ iso.isolinux_bin_dir(config.iso_link).replace('\\', '/') + '/') + iso.isolinux_bin_dir(config.image_path).replace('\\', '/') + '/')
#print('initrd') #print('initrd')
else: else:
# Extract initrd parameter from within the line # Extract initrd parameter from within the line
initrd = re.findall('(initrd[= ].*?[ ])', m.group(), re.I|re.DOTALL)[0] initrd = re.findall('(initrd[= ].*?[ ])', m.group(), re.I|re.DOTALL)[0]
initrd = initrd.replace(',/', ' /') initrd = initrd.replace(',/', ' /')
initrd = initrd.replace('z,', 'z /multibootusb/' + initrd = initrd.replace('z,', 'z /multibootusb/' +
iso.iso_basename(config.iso_link) + '/' iso.iso_basename(config.image_path) + '/'
+ iso.isolinux_bin_dir(config.iso_link).replace('\\', '/') + '/') + iso.isolinux_bin_dir(config.image_path).replace('\\', '/') + '/')
#print(initrd) #print(initrd)
# Ensure that we change the relative path to absolute path # Ensure that we change the relative path to absolute path
@ -292,8 +298,8 @@ def iso2grub2(iso_dir):
elif 'initrd=' in initrd.lower(): elif 'initrd=' in initrd.lower():
initrd = initrd.strip().replace('initrd=', 'initrd /multibootusb/' + initrd = initrd.strip().replace('initrd=', 'initrd /multibootusb/' +
iso.iso_basename(config.iso_link) + '/' iso.iso_basename(config.image_path) + '/'
+ iso.isolinux_bin_dir(config.iso_link).replace('\\', '/') + '/') + iso.isolinux_bin_dir(config.image_path).replace('\\', '/') + '/')
# Ensure that there is no caps which is not accepted by grub2 # Ensure that there is no caps which is not accepted by grub2
initrd = initrd.replace('INITRD', 'initrd') initrd = initrd.replace('INITRD', 'initrd')

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>About</class>
<widget class="QDialog" name="About">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>640</width>
<height>380</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout_11">
<item row="1" column="1">
<widget class="QLabel" name="label_6">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;An advanced bootable usb creator with option to install/uninstall multiple distros.&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;This software is written in Python and PyQt. &lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Copyright 2010-2017 Sundar&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Author(s)&lt;/span&gt;: Sundar, Ian Bruce, Lee&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Licence&lt;/span&gt;: GPL version 2 or later&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Home page&lt;/span&gt;: &lt;a href=&quot; http://multibootusb.org&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://multibootusb.org&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Help/Email&lt;/span&gt;: feedback.multibootusb@gmail.com&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Source Code&lt;/span&gt;: &lt;a href=&quot;https://github.com/mbusb/multibootusb&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;https://github.com/mbusb/multibootusb&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="1" column="2">
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="button_close">
<property name="text">
<string>Close</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,519 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'gui/multibootusb.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(717, 516)
self.horizontalLayout = QtWidgets.QHBoxLayout(Dialog)
self.horizontalLayout.setObjectName("horizontalLayout")
self.tabWidget = QtWidgets.QTabWidget(Dialog)
self.tabWidget.setEnabled(True)
self.tabWidget.setObjectName("tabWidget")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setEnabled(True)
self.tab_3.setObjectName("tab_3")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.tab_3)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setContentsMargins(5, 5, 5, 5)
self.gridLayout.setObjectName("gridLayout")
self.groupBox_6 = QtWidgets.QGroupBox(self.tab_3)
self.groupBox_6.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing)
self.groupBox_6.setFlat(False)
self.groupBox_6.setCheckable(False)
self.groupBox_6.setObjectName("groupBox_6")
self.formLayout = QtWidgets.QFormLayout(self.groupBox_6)
self.formLayout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout.setObjectName("formLayout")
self.label_usb_dev = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_dev.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_usb_dev.setObjectName("label_usb_dev")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_usb_dev)
self.usb_dev = QtWidgets.QLabel(self.groupBox_6)
self.usb_dev.setText("")
self.usb_dev.setObjectName("usb_dev")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.usb_dev)
self.label_usb_vendor = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_vendor.setObjectName("label_usb_vendor")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_usb_vendor)
self.usb_vendor = QtWidgets.QLabel(self.groupBox_6)
self.usb_vendor.setText("")
self.usb_vendor.setObjectName("usb_vendor")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.usb_vendor)
self.label_usb_model = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_model.setObjectName("label_usb_model")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_usb_model)
self.label_usb_size = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_size.setFrameShape(QtWidgets.QFrame.NoFrame)
self.label_usb_size.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_usb_size.setObjectName("label_usb_size")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_usb_size)
self.label_usb_mount = QtWidgets.QLabel(self.groupBox_6)
self.label_usb_mount.setObjectName("label_usb_mount")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_usb_mount)
self.usb_model = QtWidgets.QLabel(self.groupBox_6)
self.usb_model.setText("")
self.usb_model.setObjectName("usb_model")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.usb_model)
self.usb_size = QtWidgets.QLabel(self.groupBox_6)
self.usb_size.setText("")
self.usb_size.setObjectName("usb_size")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.usb_size)
self.usb_mount = QtWidgets.QLabel(self.groupBox_6)
self.usb_mount.setText("")
self.usb_mount.setObjectName("usb_mount")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.usb_mount)
self.gridLayout.addWidget(self.groupBox_6, 2, 0, 1, 5)
self.close = QtWidgets.QPushButton(self.tab_3)
self.close.setObjectName("close")
self.gridLayout.addWidget(self.close, 9, 6, 1, 1)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem, 8, 0, 1, 1)
self.browse_iso = QtWidgets.QPushButton(self.tab_3)
self.browse_iso.setCheckable(False)
self.browse_iso.setFlat(False)
self.browse_iso.setObjectName("browse_iso")
self.gridLayout.addWidget(self.browse_iso, 4, 4, 1, 1)
self.listWidget = QtWidgets.QListWidget(self.tab_3)
self.listWidget.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.listWidget.setFrameShadow(QtWidgets.QFrame.Sunken)
self.listWidget.setResizeMode(QtWidgets.QListView.Fixed)
self.listWidget.setObjectName("listWidget")
self.gridLayout.addWidget(self.listWidget, 1, 5, 8, 2)
self.label_persistence = QtWidgets.QLabel(self.tab_3)
self.label_persistence.setEnabled(False)
self.label_persistence.setMouseTracking(True)
self.label_persistence.setStyleSheet("font-weight: 600")
self.label_persistence.setObjectName("label_persistence")
self.gridLayout.addWidget(self.label_persistence, 6, 0, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(self.tab_3)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout.addWidget(self.lineEdit, 4, 0, 1, 4)
self.detect_usb = QtWidgets.QPushButton(self.tab_3)
self.detect_usb.setObjectName("detect_usb")
self.gridLayout.addWidget(self.detect_usb, 1, 2, 1, 2)
self.uninstall = QtWidgets.QPushButton(self.tab_3)
self.uninstall.setObjectName("uninstall")
self.gridLayout.addWidget(self.uninstall, 0, 5, 1, 2)
self.comboBox = QtWidgets.QComboBox(self.tab_3)
self.comboBox.setObjectName("comboBox")
self.gridLayout.addWidget(self.comboBox, 1, 0, 1, 2)
self.slider_persistence = QtWidgets.QSlider(self.tab_3)
self.slider_persistence.setEnabled(False)
self.slider_persistence.setAutoFillBackground(False)
self.slider_persistence.setOrientation(QtCore.Qt.Horizontal)
self.slider_persistence.setTickPosition(QtWidgets.QSlider.TicksBothSides)
self.slider_persistence.setObjectName("slider_persistence")
self.gridLayout.addWidget(self.slider_persistence, 6, 1, 1, 3)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem1, 8, 2, 1, 2)
self.checkBox_all_drives = QtWidgets.QCheckBox(self.tab_3)
self.checkBox_all_drives.setObjectName("checkBox_all_drives")
self.gridLayout.addWidget(self.checkBox_all_drives, 1, 4, 1, 1)
self.label_persistence_value = QtWidgets.QLabel(self.tab_3)
self.label_persistence_value.setEnabled(False)
self.label_persistence_value.setObjectName("label_persistence_value")
self.gridLayout.addWidget(self.label_persistence_value, 6, 4, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem2, 8, 1, 1, 1)
self.create = QtWidgets.QPushButton(self.tab_3)
self.create.setObjectName("create")
self.gridLayout.addWidget(self.create, 7, 4, 1, 1)
self.progressBar = QtWidgets.QProgressBar(self.tab_3)
self.progressBar.setProperty("value", 0)
self.progressBar.setInvertedAppearance(False)
self.progressBar.setObjectName("progressBar")
self.gridLayout.addWidget(self.progressBar, 7, 0, 1, 4)
self.status = QtWidgets.QLabel(self.tab_3)
self.status.setMinimumSize(QtCore.QSize(0, 0))
self.status.setAcceptDrops(False)
self.status.setAutoFillBackground(False)
self.status.setFrameShadow(QtWidgets.QFrame.Plain)
self.status.setTextFormat(QtCore.Qt.AutoText)
self.status.setScaledContents(False)
self.status.setObjectName("status")
self.gridLayout.addWidget(self.status, 9, 0, 1, 6)
self.labelstep1 = QtWidgets.QLabel(self.tab_3)
self.labelstep1.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep1.setObjectName("labelstep1")
self.gridLayout.addWidget(self.labelstep1, 0, 0, 1, 5)
self.labelstep2 = QtWidgets.QLabel(self.tab_3)
self.labelstep2.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep2.setObjectName("labelstep2")
self.gridLayout.addWidget(self.labelstep2, 3, 0, 1, 5)
self.labelstep3 = QtWidgets.QLabel(self.tab_3)
self.labelstep3.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep3.setObjectName("labelstep3")
self.gridLayout.addWidget(self.labelstep3, 5, 0, 1, 5)
self.horizontalLayout_2.addLayout(self.gridLayout)
self.tabWidget.addTab(self.tab_3, "")
self.imager = QtWidgets.QWidget()
self.imager.setEnabled(True)
self.imager.setObjectName("imager")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.imager)
self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.gridLayout_9 = QtWidgets.QGridLayout()
self.gridLayout_9.setContentsMargins(5, 5, 5, 5)
self.gridLayout_9.setObjectName("gridLayout_9")
self.widget_7 = QtWidgets.QWidget(self.imager)
self.widget_7.setObjectName("widget_7")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.widget_7)
self.verticalLayout_6.setContentsMargins(5, 5, 5, 5)
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.gridLayout_11 = QtWidgets.QGridLayout()
self.gridLayout_11.setObjectName("gridLayout_11")
self.groupBox_10 = QtWidgets.QGroupBox(self.widget_7)
self.groupBox_10.setObjectName("groupBox_10")
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.groupBox_10)
self.verticalLayout_9.setObjectName("verticalLayout_9")
self.pushButton = QtWidgets.QPushButton(self.groupBox_10)
self.pushButton.setObjectName("pushButton")
self.verticalLayout_9.addWidget(self.pushButton)
self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox_10)
self.lineEdit_3.setObjectName("lineEdit_3")
self.verticalLayout_9.addWidget(self.lineEdit_3)
self.imager_bootable = QtWidgets.QLabel(self.groupBox_10)
self.imager_bootable.setObjectName("imager_bootable")
self.verticalLayout_9.addWidget(self.imager_bootable)
self.imager_iso_size = QtWidgets.QLabel(self.groupBox_10)
self.imager_iso_size.setObjectName("imager_iso_size")
self.verticalLayout_9.addWidget(self.imager_iso_size)
spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_9.addItem(spacerItem3)
self.gridLayout_11.addWidget(self.groupBox_10, 0, 1, 1, 1)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_11.addItem(spacerItem4, 1, 0, 1, 1)
self.groupBox_9 = QtWidgets.QGroupBox(self.widget_7)
self.groupBox_9.setStyleSheet("")
self.groupBox_9.setObjectName("groupBox_9")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.groupBox_9)
self.verticalLayout_8.setObjectName("verticalLayout_8")
self.comboBox_2 = QtWidgets.QComboBox(self.groupBox_9)
self.comboBox_2.setObjectName("comboBox_2")
self.verticalLayout_8.addWidget(self.comboBox_2)
self.pushbtn_imager_refreshusb = QtWidgets.QPushButton(self.groupBox_9)
self.pushbtn_imager_refreshusb.setObjectName("pushbtn_imager_refreshusb")
self.verticalLayout_8.addWidget(self.pushbtn_imager_refreshusb)
self.formLayout_3 = QtWidgets.QFormLayout()
self.formLayout_3.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout_3.setObjectName("formLayout_3")
self.label_imager_disk_label = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_disk_label.setObjectName("label_imager_disk_label")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_imager_disk_label)
self.label_imager_total_size = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_total_size.setObjectName("label_imager_total_size")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_imager_total_size)
self.label_imager_uuid = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_uuid.setObjectName("label_imager_uuid")
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_imager_uuid)
self.imager_disk_label = QtWidgets.QLabel(self.groupBox_9)
self.imager_disk_label.setText("")
self.imager_disk_label.setObjectName("imager_disk_label")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.imager_disk_label)
self.imager_total_size = QtWidgets.QLabel(self.groupBox_9)
self.imager_total_size.setText("")
self.imager_total_size.setObjectName("imager_total_size")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.imager_total_size)
self.imager_uuid = QtWidgets.QLabel(self.groupBox_9)
self.imager_uuid.setText("")
self.imager_uuid.setObjectName("imager_uuid")
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.imager_uuid)
self.verticalLayout_8.addLayout(self.formLayout_3)
spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_8.addItem(spacerItem5)
self.gridLayout_11.addWidget(self.groupBox_9, 0, 0, 1, 1)
self.verticalLayout_6.addLayout(self.gridLayout_11)
self.imager_label_status = QtWidgets.QLabel(self.widget_7)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.imager_label_status.sizePolicy().hasHeightForWidth())
self.imager_label_status.setSizePolicy(sizePolicy)
self.imager_label_status.setObjectName("imager_label_status")
self.verticalLayout_6.addWidget(self.imager_label_status)
self.gridLayout_12 = QtWidgets.QGridLayout()
self.gridLayout_12.setObjectName("gridLayout_12")
self.label_10 = QtWidgets.QLabel(self.widget_7)
self.label_10.setObjectName("label_10")
self.gridLayout_12.addWidget(self.label_10, 1, 0, 1, 3)
self.imager_progressbar = QtWidgets.QProgressBar(self.widget_7)
self.imager_progressbar.setProperty("value", 0)
self.imager_progressbar.setObjectName("imager_progressbar")
self.gridLayout_12.addWidget(self.imager_progressbar, 0, 0, 1, 3)
self.imager_write = QtWidgets.QPushButton(self.widget_7)
self.imager_write.setObjectName("imager_write")
self.gridLayout_12.addWidget(self.imager_write, 2, 2, 1, 1)
self.verticalLayout_6.addLayout(self.gridLayout_12)
self.gridLayout_9.addWidget(self.widget_7, 0, 0, 1, 2)
self.imager_close = QtWidgets.QPushButton(self.imager)
self.imager_close.setObjectName("imager_close")
self.gridLayout_9.addWidget(self.imager_close, 1, 1, 1, 1)
spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_9.addItem(spacerItem6, 1, 0, 1, 1)
self.horizontalLayout_7.addLayout(self.gridLayout_9)
self.tabWidget.addTab(self.imager, "")
self.syslinux_ab = QtWidgets.QWidget()
self.syslinux_ab.setObjectName("syslinux_ab")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.syslinux_ab)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.gridLayout_2 = QtWidgets.QGridLayout()
self.gridLayout_2.setObjectName("gridLayout_2")
self.groupBox_2 = QtWidgets.QGroupBox(self.syslinux_ab)
self.groupBox_2.setAutoFillBackground(False)
self.groupBox_2.setObjectName("groupBox_2")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.groupBox_2)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.gridLayout_3 = QtWidgets.QGridLayout()
self.gridLayout_3.setObjectName("gridLayout_3")
self.install_sys_only = QtWidgets.QRadioButton(self.groupBox_2)
self.install_sys_only.setObjectName("install_sys_only")
self.gridLayout_3.addWidget(self.install_sys_only, 0, 0, 1, 1)
self.install_sys_all = QtWidgets.QRadioButton(self.groupBox_2)
self.install_sys_all.setObjectName("install_sys_all")
self.gridLayout_3.addWidget(self.install_sys_all, 1, 0, 1, 1)
self.install_syslinux = QtWidgets.QPushButton(self.groupBox_2)
self.install_syslinux.setObjectName("install_syslinux")
self.gridLayout_3.addWidget(self.install_syslinux, 0, 2, 2, 1)
spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_3.addItem(spacerItem7, 0, 1, 2, 1)
self.horizontalLayout_4.addLayout(self.gridLayout_3)
self.gridLayout_2.addWidget(self.groupBox_2, 0, 0, 1, 1)
spacerItem8 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_2.addItem(spacerItem8, 3, 0, 1, 1)
self.groupBox_3 = QtWidgets.QGroupBox(self.syslinux_ab)
self.groupBox_3.setObjectName("groupBox_3")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.groupBox_3)
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.gridLayout_4 = QtWidgets.QGridLayout()
self.gridLayout_4.setObjectName("gridLayout_4")
self.edit_syslinux = QtWidgets.QPushButton(self.groupBox_3)
self.edit_syslinux.setObjectName("edit_syslinux")
self.gridLayout_4.addWidget(self.edit_syslinux, 0, 2, 1, 1)
self.label_2 = QtWidgets.QLabel(self.groupBox_3)
self.label_2.setObjectName("label_2")
self.gridLayout_4.addWidget(self.label_2, 0, 0, 1, 1)
spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_4.addItem(spacerItem9, 0, 1, 1, 1)
self.horizontalLayout_5.addLayout(self.gridLayout_4)
self.gridLayout_2.addWidget(self.groupBox_3, 2, 0, 1, 1)
spacerItem10 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
self.gridLayout_2.addItem(spacerItem10, 1, 0, 1, 1)
self.horizontalLayout_3.addLayout(self.gridLayout_2)
self.tabWidget.addTab(self.syslinux_ab, "")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.groupBox_5 = QtWidgets.QGroupBox(self.tab)
self.groupBox_5.setObjectName("groupBox_5")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.groupBox_5)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.gridLayout_7 = QtWidgets.QGridLayout()
self.gridLayout_7.setObjectName("gridLayout_7")
spacerItem11 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_7.addItem(spacerItem11, 3, 0, 1, 1)
spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_7.addItem(spacerItem12, 1, 6, 1, 1)
self.boot_iso_qemu = QtWidgets.QPushButton(self.groupBox_5)
self.boot_iso_qemu.setObjectName("boot_iso_qemu")
self.gridLayout_7.addWidget(self.boot_iso_qemu, 3, 6, 1, 1)
self.browse_iso_qemu = QtWidgets.QPushButton(self.groupBox_5)
self.browse_iso_qemu.setObjectName("browse_iso_qemu")
self.gridLayout_7.addWidget(self.browse_iso_qemu, 0, 6, 1, 1)
self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox_5)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout_7.addWidget(self.lineEdit_2, 0, 0, 1, 6)
spacerItem13 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_7.addItem(spacerItem13, 2, 6, 1, 1)
self.label_3 = QtWidgets.QLabel(self.groupBox_5)
self.label_3.setObjectName("label_3")
self.gridLayout_7.addWidget(self.label_3, 2, 0, 1, 1)
self.ram_iso_256 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_256.setObjectName("ram_iso_256")
self.gridLayout_7.addWidget(self.ram_iso_256, 2, 1, 1, 1)
self.ram_iso_512 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_512.setObjectName("ram_iso_512")
self.gridLayout_7.addWidget(self.ram_iso_512, 2, 2, 1, 1)
self.ram_iso_768 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_768.setObjectName("ram_iso_768")
self.gridLayout_7.addWidget(self.ram_iso_768, 2, 3, 1, 1)
self.ram_iso_1024 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_1024.setObjectName("ram_iso_1024")
self.gridLayout_7.addWidget(self.ram_iso_1024, 2, 4, 1, 1)
self.ram_iso_2048 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_2048.setObjectName("ram_iso_2048")
self.gridLayout_7.addWidget(self.ram_iso_2048, 2, 5, 1, 1)
self.verticalLayout_3.addLayout(self.gridLayout_7)
self.verticalLayout_2.addWidget(self.groupBox_5)
self.gridLayout_6 = QtWidgets.QGridLayout()
self.gridLayout_6.setObjectName("gridLayout_6")
self.groupBox_4 = QtWidgets.QGroupBox(self.tab)
self.groupBox_4.setStyleSheet("")
self.groupBox_4.setObjectName("groupBox_4")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_4)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.gridLayout_8 = QtWidgets.QGridLayout()
self.gridLayout_8.setObjectName("gridLayout_8")
self.ram_usb_2048 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_2048.setObjectName("ram_usb_2048")
self.gridLayout_8.addWidget(self.ram_usb_2048, 0, 5, 1, 1)
spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_8.addItem(spacerItem14, 0, 6, 1, 1)
spacerItem15 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_8.addItem(spacerItem15, 1, 0, 1, 1)
self.boot_usb_qemu = QtWidgets.QPushButton(self.groupBox_4)
self.boot_usb_qemu.setObjectName("boot_usb_qemu")
self.gridLayout_8.addWidget(self.boot_usb_qemu, 1, 6, 1, 1)
self.ram_usb_256 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_256.setObjectName("ram_usb_256")
self.gridLayout_8.addWidget(self.ram_usb_256, 0, 1, 1, 1)
self.ram_usb_768 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_768.setObjectName("ram_usb_768")
self.gridLayout_8.addWidget(self.ram_usb_768, 0, 3, 1, 1)
self.label_4 = QtWidgets.QLabel(self.groupBox_4)
self.label_4.setObjectName("label_4")
self.gridLayout_8.addWidget(self.label_4, 0, 0, 1, 1)
self.ram_usb_512 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_512.setObjectName("ram_usb_512")
self.gridLayout_8.addWidget(self.ram_usb_512, 0, 2, 1, 1)
self.ram_usb_1024 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_1024.setObjectName("ram_usb_1024")
self.gridLayout_8.addWidget(self.ram_usb_1024, 0, 4, 1, 1)
self.verticalLayout_4.addLayout(self.gridLayout_8)
self.gridLayout_6.addWidget(self.groupBox_4, 0, 0, 1, 1)
self.verticalLayout_2.addLayout(self.gridLayout_6)
spacerItem16 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem16)
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.tab_2)
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.gridLayout_10 = QtWidgets.QGridLayout()
self.gridLayout_10.setObjectName("gridLayout_10")
spacerItem17 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem17, 0, 1, 1, 1)
spacerItem18 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem18, 1, 0, 1, 1)
spacerItem19 = QtWidgets.QSpacerItem(20, 30, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem19, 2, 1, 1, 1)
self.label_5 = QtWidgets.QLabel(self.tab_2)
self.label_5.setObjectName("label_5")
self.gridLayout_10.addWidget(self.label_5, 1, 1, 1, 1)
spacerItem20 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_10.addItem(spacerItem20, 1, 2, 1, 1)
self.horizontalLayout_6.addLayout(self.gridLayout_10)
self.tabWidget.addTab(self.tab_2, "")
self.horizontalLayout.addWidget(self.tabWidget)
self.retranslateUi(Dialog)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(Dialog)
Dialog.setTabOrder(self.comboBox, self.detect_usb)
Dialog.setTabOrder(self.detect_usb, self.lineEdit)
Dialog.setTabOrder(self.lineEdit, self.slider_persistence)
Dialog.setTabOrder(self.slider_persistence, self.uninstall)
Dialog.setTabOrder(self.uninstall, self.listWidget)
Dialog.setTabOrder(self.listWidget, self.close)
Dialog.setTabOrder(self.close, self.comboBox_2)
Dialog.setTabOrder(self.comboBox_2, self.pushButton)
Dialog.setTabOrder(self.pushButton, self.pushbtn_imager_refreshusb)
Dialog.setTabOrder(self.pushbtn_imager_refreshusb, self.lineEdit_3)
Dialog.setTabOrder(self.lineEdit_3, self.imager_write)
Dialog.setTabOrder(self.imager_write, self.imager_close)
Dialog.setTabOrder(self.imager_close, self.install_sys_only)
Dialog.setTabOrder(self.install_sys_only, self.install_sys_all)
Dialog.setTabOrder(self.install_sys_all, self.install_syslinux)
Dialog.setTabOrder(self.install_syslinux, self.edit_syslinux)
Dialog.setTabOrder(self.edit_syslinux, self.lineEdit_2)
Dialog.setTabOrder(self.lineEdit_2, self.browse_iso_qemu)
Dialog.setTabOrder(self.browse_iso_qemu, self.ram_iso_256)
Dialog.setTabOrder(self.ram_iso_256, self.ram_iso_512)
Dialog.setTabOrder(self.ram_iso_512, self.ram_iso_768)
Dialog.setTabOrder(self.ram_iso_768, self.ram_iso_1024)
Dialog.setTabOrder(self.ram_iso_1024, self.ram_iso_2048)
Dialog.setTabOrder(self.ram_iso_2048, self.boot_iso_qemu)
Dialog.setTabOrder(self.boot_iso_qemu, self.ram_usb_256)
Dialog.setTabOrder(self.ram_usb_256, self.ram_usb_512)
Dialog.setTabOrder(self.ram_usb_512, self.ram_usb_768)
Dialog.setTabOrder(self.ram_usb_768, self.ram_usb_1024)
Dialog.setTabOrder(self.ram_usb_1024, self.ram_usb_2048)
Dialog.setTabOrder(self.ram_usb_2048, self.boot_usb_qemu)
Dialog.setTabOrder(self.boot_usb_qemu, self.tabWidget)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "multibootusb"))
self.groupBox_6.setTitle(_translate("Dialog", "USB Details"))
self.label_usb_dev.setText(_translate("Dialog", "Drive:"))
self.label_usb_vendor.setText(_translate("Dialog", "Vendor:"))
self.label_usb_model.setText(_translate("Dialog", "Model:"))
self.label_usb_size.setText(_translate("Dialog", "Size:"))
self.label_usb_mount.setText(_translate("Dialog", "Mount:"))
self.close.setText(_translate("Dialog", "Quit"))
self.browse_iso.setText(_translate("Dialog", "Browse ISO"))
self.label_persistence.setText(_translate("Dialog", "Persistence"))
self.detect_usb.setText(_translate("Dialog", "Detect Drives"))
self.uninstall.setText(_translate("Dialog", "Uninstall Distro"))
self.slider_persistence.setToolTip(_translate("Dialog", "Choose Persistence size. Not all distros supports persistence..."))
self.checkBox_all_drives.setText(_translate("Dialog", "All Drives"))
self.label_persistence_value.setText(_translate("Dialog", "0 MB"))
self.create.setText(_translate("Dialog", "Install"))
self.status.setText(_translate("Dialog", "Status: Idle"))
self.labelstep1.setText(_translate("Dialog", "Step 1 :: Select drive"))
self.labelstep2.setText(_translate("Dialog", "Step 2 :: Select ISO"))
self.labelstep3.setText(_translate("Dialog", "Step 3 :: Install distro"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("Dialog", "MultiBootUSB"))
self.groupBox_10.setTitle(_translate("Dialog", "Select image"))
self.pushButton.setText(_translate("Dialog", "Browse image..."))
self.imager_bootable.setText(_translate("Dialog", "Bootable ISO"))
self.imager_iso_size.setText(_translate("Dialog", "Image Size"))
self.groupBox_9.setTitle(_translate("Dialog", "Select USB Drive"))
self.pushbtn_imager_refreshusb.setText(_translate("Dialog", "Refresh USB"))
self.label_imager_disk_label.setText(_translate("Dialog", "Disk Type:"))
self.label_imager_total_size.setText(_translate("Dialog", "Disk Size:"))
self.label_imager_uuid.setText(_translate("Dialog", "Disk Label:"))
self.imager_label_status.setText(_translate("Dialog", "Status: Idle"))
self.label_10.setText(_translate("Dialog", "<html><head/><body><p><span style=\" font-weight:600; color:#ff0000;\">WARNING</span> : Any bootable USB made using<span style=\" font-weight:600;\"> ISO Imager will destroy all data </span>on the selected USB disk. </p><p>Use it at your own risk. Developers are not responsile for loss of any data.</p></body></html>"))
self.imager_write.setText(_translate("Dialog", "Write Image"))
self.imager_close.setText(_translate("Dialog", "Quit"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.imager), _translate("Dialog", "Write Image to USB"))
self.groupBox_2.setTitle(_translate("Dialog", "Install Syslinux"))
self.install_sys_only.setText(_translate("Dialog", "Install only syslinu&x (existing configurations will not be altered)."))
self.install_sys_all.setText(_translate("Dialog", "Install syslinux and copy all re&quired files."))
self.install_syslinux.setText(_translate("Dialog", "Install"))
self.groupBox_3.setTitle(_translate("Dialog", "Edit syslinux.cfg"))
self.edit_syslinux.setText(_translate("Dialog", "Edit"))
self.label_2.setText(_translate("Dialog", "<html><head/><body><p align=\"justify\">Edit syslinux.cfg file directly using the default editor of your system. </p><p align=\"justify\">Be <span style=\" font-weight:600; color:#ff0000;\">CAREFUL</span> while editing syslinux.cfg!</p></body></html>"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.syslinux_ab), _translate("Dialog", "Install Syslinux"))
self.groupBox_5.setTitle(_translate("Dialog", "Boot ISO :: Test bootable ISOs without reboot"))
self.boot_iso_qemu.setText(_translate("Dialog", "Boot ISO"))
self.browse_iso_qemu.setText(_translate("Dialog", "Browse ISO"))
self.label_3.setText(_translate("Dialog", "Choose RAM size:"))
self.ram_iso_256.setText(_translate("Dialog", "&256 MB"))
self.ram_iso_512.setText(_translate("Dialog", "&512 MB"))
self.ram_iso_768.setText(_translate("Dialog", "&768 MB"))
self.ram_iso_1024.setText(_translate("Dialog", "&1024 MB"))
self.ram_iso_2048.setText(_translate("Dialog", "204&8 MB"))
self.groupBox_4.setTitle(_translate("Dialog", "Boot USB :: Test bootable USB drive without reboot"))
self.ram_usb_2048.setText(_translate("Dialog", "20&48 MB"))
self.boot_usb_qemu.setText(_translate("Dialog", "Boot USB"))
self.ram_usb_256.setText(_translate("Dialog", "25&6 MB"))
self.ram_usb_768.setText(_translate("Dialog", "7&68 MB"))
self.label_4.setText(_translate("Dialog", "Choose RAM size:"))
self.ram_usb_512.setText(_translate("Dialog", "5&12 MB"))
self.ram_usb_1024.setText(_translate("Dialog", "1&024 MB"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Dialog", "Boot ISO/USB"))
self.label_5.setText(_translate("Dialog", "<html><head/><body><p align=\"center\">An advanced bootable usb creator with option to install/uninstall multiple distros.</p><p align=\"center\">This software is written in python and pyqt. </p><p align=\"center\">Copyright 2010-2016 Sundar</p><p align=\"center\"><span style=\" font-weight:600;\">Author(s)</span>: Sundar, Ian Bruce, Lee</p><p align=\"center\"><span style=\" font-weight:600;\">Licence</span>: GPL version 2 or later</p><p align=\"center\"><span style=\" font-weight:600;\">Home page</span>: <a href=\" http://multibootusb.org\"><span style=\" text-decoration: underline; color:#0000ff;\">http://multibootusb.org</span></a></p><p align=\"center\"><span style=\" font-weight:600;\">Help/Email</span>: feedback.multibootusb@gmail.com</p><p align=\"center\"><span style=\" font-weight:600;\">Source Code</span>: <a href=\"https://github.com/mbusb/multibootusb\"><span style=\" text-decoration: underline; color:#0000ff;\">https://github.com/mbusb/multibootusb</span></a></p><p><br/></p></body></html>"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Dialog", "About"))

@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'gui/about.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_About(object):
def setupUi(self, About):
About.setObjectName("About")
About.resize(640, 380)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(About.sizePolicy().hasHeightForWidth())
About.setSizePolicy(sizePolicy)
self.verticalLayout = QtWidgets.QVBoxLayout(About)
self.verticalLayout.setObjectName("verticalLayout")
self.gridLayout_11 = QtWidgets.QGridLayout()
self.gridLayout_11.setObjectName("gridLayout_11")
self.label_6 = QtWidgets.QLabel(About)
self.label_6.setObjectName("label_6")
self.gridLayout_11.addWidget(self.label_6, 1, 1, 1, 1)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_11.addItem(spacerItem, 1, 2, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_11.addItem(spacerItem1, 1, 0, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_11.addItem(spacerItem2, 0, 1, 1, 1)
spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_11.addItem(spacerItem3, 2, 1, 1, 1)
self.verticalLayout.addLayout(self.gridLayout_11)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem4)
self.button_close = QtWidgets.QPushButton(About)
self.button_close.setObjectName("button_close")
self.horizontalLayout.addWidget(self.button_close)
self.verticalLayout.addLayout(self.horizontalLayout)
self.retranslateUi(About)
QtCore.QMetaObject.connectSlotsByName(About)
def retranslateUi(self, About):
_translate = QtCore.QCoreApplication.translate
About.setWindowTitle(_translate("About", "Dialog"))
self.label_6.setText(_translate("About", "<html><head/><body><p align=\"center\">An advanced bootable usb creator with option to install/uninstall multiple distros.</p><p align=\"center\">This software is written in Python and PyQt. </p><p align=\"center\">Copyright 2010-2017 Sundar</p><p align=\"center\"><span style=\" font-weight:600;\">Author(s)</span>: Sundar, Ian Bruce, Lee</p><p align=\"center\"><span style=\" font-weight:600;\">Licence</span>: GPL version 2 or later</p><p align=\"center\"><span style=\" font-weight:600;\">Home page</span>: <a href=\" http://multibootusb.org\"><span style=\" text-decoration: underline; color:#0000ff;\">http://multibootusb.org</span></a></p><p align=\"center\"><span style=\" font-weight:600;\">Help/Email</span>: feedback.multibootusb@gmail.com</p><p align=\"center\"><span style=\" font-weight:600;\">Source Code</span>: <a href=\"https://github.com/mbusb/multibootusb\"><span style=\" text-decoration: underline; color:#0000ff;\">https://github.com/mbusb/multibootusb</span></a></p><p><br/></p></body></html>"))
self.button_close.setText(_translate("About", "Close"))

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'gui/multibootusb.ui' # Form implementation generated from reading ui file 'gui/test.ui'
# #
# Created by: PyQt5 UI code generator 5.5.1 # Created by: PyQt5 UI code generator 5.5.1
# #
@ -8,512 +8,420 @@
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object): class Ui_MainWindow(object):
def setupUi(self, Dialog): def setupUi(self, MainWindow):
Dialog.setObjectName("Dialog") MainWindow.setObjectName("MainWindow")
Dialog.resize(717, 516) MainWindow.resize(629, 593)
self.horizontalLayout = QtWidgets.QHBoxLayout(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout_7.setObjectName("verticalLayout_7")
self.verticalLayout_5 = QtWidgets.QVBoxLayout()
self.verticalLayout_5.setContentsMargins(5, 5, 5, 5)
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setObjectName("horizontalLayout")
self.tabWidget = QtWidgets.QTabWidget(Dialog) self.gridLayout_disk = QtWidgets.QGridLayout()
self.tabWidget.setEnabled(True) self.gridLayout_disk.setContentsMargins(-1, 10, -1, -1)
self.tabWidget.setObjectName("tabWidget") self.gridLayout_disk.setObjectName("gridLayout_disk")
self.tab_3 = QtWidgets.QWidget() self.label_select_usb_disk = QtWidgets.QLabel(self.centralwidget)
self.tab_3.setEnabled(True) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
self.tab_3.setObjectName("tab_3") sizePolicy.setHorizontalStretch(0)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.tab_3) sizePolicy.setVerticalStretch(0)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) sizePolicy.setHeightForWidth(self.label_select_usb_disk.sizePolicy().hasHeightForWidth())
self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label_select_usb_disk.setSizePolicy(sizePolicy)
self.gridLayout = QtWidgets.QGridLayout() self.label_select_usb_disk.setMinimumSize(QtCore.QSize(100, 0))
self.gridLayout.setContentsMargins(5, 5, 5, 5) self.label_select_usb_disk.setObjectName("label_select_usb_disk")
self.gridLayout.setObjectName("gridLayout") self.gridLayout_disk.addWidget(self.label_select_usb_disk, 0, 0, 1, 3)
self.groupBox_6 = QtWidgets.QGroupBox(self.tab_3) self.combo_drives = QtWidgets.QComboBox(self.centralwidget)
self.groupBox_6.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing) self.combo_drives.setObjectName("combo_drives")
self.groupBox_6.setFlat(False) self.gridLayout_disk.addWidget(self.combo_drives, 1, 0, 1, 3)
self.groupBox_6.setCheckable(False) self.button_detect_drives = QtWidgets.QPushButton(self.centralwidget)
self.groupBox_6.setObjectName("groupBox_6") self.button_detect_drives.setObjectName("button_detect_drives")
self.formLayout = QtWidgets.QFormLayout(self.groupBox_6) self.gridLayout_disk.addWidget(self.button_detect_drives, 1, 3, 1, 1)
self.checkbox_all_drives = QtWidgets.QCheckBox(self.centralwidget)
self.checkbox_all_drives.setObjectName("checkbox_all_drives")
self.gridLayout_disk.addWidget(self.checkbox_all_drives, 0, 3, 1, 1)
self.group_usb_details = QtWidgets.QGroupBox(self.centralwidget)
self.group_usb_details.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing)
self.group_usb_details.setFlat(False)
self.group_usb_details.setCheckable(False)
self.group_usb_details.setObjectName("group_usb_details")
self.formLayout = QtWidgets.QFormLayout(self.group_usb_details)
self.formLayout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.formLayout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout.setObjectName("formLayout") self.formLayout.setObjectName("formLayout")
self.label_usb_dev = QtWidgets.QLabel(self.groupBox_6) self.label_usb_dev = QtWidgets.QLabel(self.group_usb_details)
self.label_usb_dev.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.label_usb_dev.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_usb_dev.setObjectName("label_usb_dev") self.label_usb_dev.setObjectName("label_usb_dev")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_usb_dev) self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_usb_dev)
self.usb_dev = QtWidgets.QLabel(self.groupBox_6) self.usb_dev = QtWidgets.QLabel(self.group_usb_details)
self.usb_dev.setText("") self.usb_dev.setText("")
self.usb_dev.setObjectName("usb_dev") self.usb_dev.setObjectName("usb_dev")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.usb_dev) self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.usb_dev)
self.label_usb_vendor = QtWidgets.QLabel(self.groupBox_6) self.label_usb_vendor = QtWidgets.QLabel(self.group_usb_details)
self.label_usb_vendor.setObjectName("label_usb_vendor") self.label_usb_vendor.setObjectName("label_usb_vendor")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_usb_vendor) self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_usb_vendor)
self.usb_vendor = QtWidgets.QLabel(self.groupBox_6) self.usb_vendor = QtWidgets.QLabel(self.group_usb_details)
self.usb_vendor.setText("") self.usb_vendor.setText("")
self.usb_vendor.setObjectName("usb_vendor") self.usb_vendor.setObjectName("usb_vendor")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.usb_vendor) self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.usb_vendor)
self.label_usb_model = QtWidgets.QLabel(self.groupBox_6) self.label_usb_model = QtWidgets.QLabel(self.group_usb_details)
self.label_usb_model.setObjectName("label_usb_model") self.label_usb_model.setObjectName("label_usb_model")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_usb_model) self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_usb_model)
self.label_usb_size = QtWidgets.QLabel(self.groupBox_6) self.usb_model = QtWidgets.QLabel(self.group_usb_details)
self.usb_model.setText("")
self.usb_model.setObjectName("usb_model")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.usb_model)
self.label_usb_size = QtWidgets.QLabel(self.group_usb_details)
self.label_usb_size.setFrameShape(QtWidgets.QFrame.NoFrame) self.label_usb_size.setFrameShape(QtWidgets.QFrame.NoFrame)
self.label_usb_size.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.label_usb_size.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_usb_size.setObjectName("label_usb_size") self.label_usb_size.setObjectName("label_usb_size")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_usb_size) self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_usb_size)
self.label_usb_mount = QtWidgets.QLabel(self.groupBox_6) self.usb_size = QtWidgets.QLabel(self.group_usb_details)
self.label_usb_mount.setObjectName("label_usb_mount")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_usb_mount)
self.usb_model = QtWidgets.QLabel(self.groupBox_6)
self.usb_model.setText("")
self.usb_model.setObjectName("usb_model")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.usb_model)
self.usb_size = QtWidgets.QLabel(self.groupBox_6)
self.usb_size.setText("") self.usb_size.setText("")
self.usb_size.setObjectName("usb_size") self.usb_size.setObjectName("usb_size")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.usb_size) self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.usb_size)
self.usb_mount = QtWidgets.QLabel(self.groupBox_6) self.label_usb_mount = QtWidgets.QLabel(self.group_usb_details)
self.label_usb_mount.setObjectName("label_usb_mount")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_usb_mount)
self.usb_mount = QtWidgets.QLabel(self.group_usb_details)
self.usb_mount.setText("") self.usb_mount.setText("")
self.usb_mount.setObjectName("usb_mount") self.usb_mount.setObjectName("usb_mount")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.usb_mount) self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.usb_mount)
self.gridLayout.addWidget(self.groupBox_6, 2, 0, 1, 5) self.gridLayout_disk.addWidget(self.group_usb_details, 3, 0, 1, 4)
self.close = QtWidgets.QPushButton(self.tab_3) self.horizontalLayout.addLayout(self.gridLayout_disk)
self.close.setObjectName("close") self.gridLayout_image = QtWidgets.QGridLayout()
self.gridLayout.addWidget(self.close, 9, 6, 1, 1) self.gridLayout_image.setContentsMargins(10, 10, -1, -1)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.gridLayout_image.setObjectName("gridLayout_image")
self.gridLayout.addItem(spacerItem, 8, 0, 1, 1) self.image_details_group = QtWidgets.QGroupBox(self.centralwidget)
self.browse_iso = QtWidgets.QPushButton(self.tab_3) self.image_details_group.setObjectName("image_details_group")
self.browse_iso.setCheckable(False) self.formLayout_2 = QtWidgets.QFormLayout(self.image_details_group)
self.browse_iso.setFlat(False) self.formLayout_2.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.browse_iso.setObjectName("browse_iso") self.formLayout_2.setObjectName("formLayout_2")
self.gridLayout.addWidget(self.browse_iso, 4, 4, 1, 1) self.label_image_type = QtWidgets.QLabel(self.image_details_group)
self.listWidget = QtWidgets.QListWidget(self.tab_3) self.label_image_type.setObjectName("label_image_type")
self.listWidget.setFrameShape(QtWidgets.QFrame.StyledPanel) self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_image_type)
self.listWidget.setFrameShadow(QtWidgets.QFrame.Sunken) self.label_image_type_value = QtWidgets.QLabel(self.image_details_group)
self.listWidget.setResizeMode(QtWidgets.QListView.Fixed) self.label_image_type_value.setText("")
self.listWidget.setObjectName("listWidget") self.label_image_type_value.setObjectName("label_image_type_value")
self.gridLayout.addWidget(self.listWidget, 1, 5, 8, 2) self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.label_image_type_value)
self.label_persistence = QtWidgets.QLabel(self.tab_3) self.label_image_size = QtWidgets.QLabel(self.image_details_group)
self.label_persistence.setEnabled(False) self.label_image_size.setObjectName("label_image_size")
self.label_persistence.setMouseTracking(True) self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_image_size)
self.label_persistence.setStyleSheet("font-weight: 600") self.label_image_size_value = QtWidgets.QLabel(self.image_details_group)
self.label_persistence.setObjectName("label_persistence") self.label_image_size_value.setText("")
self.gridLayout.addWidget(self.label_persistence, 6, 0, 1, 1) self.label_image_size_value.setObjectName("label_image_size_value")
self.lineEdit = QtWidgets.QLineEdit(self.tab_3) self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.label_image_size_value)
self.lineEdit.setObjectName("lineEdit") self.label_image_bootable = QtWidgets.QLabel(self.image_details_group)
self.gridLayout.addWidget(self.lineEdit, 4, 0, 1, 4) self.label_image_bootable.setObjectName("label_image_bootable")
self.detect_usb = QtWidgets.QPushButton(self.tab_3) self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_image_bootable)
self.detect_usb.setObjectName("detect_usb") self.label_image_bootable_value = QtWidgets.QLabel(self.image_details_group)
self.gridLayout.addWidget(self.detect_usb, 1, 2, 1, 2) self.label_image_bootable_value.setText("")
self.uninstall = QtWidgets.QPushButton(self.tab_3) self.label_image_bootable_value.setObjectName("label_image_bootable_value")
self.uninstall.setObjectName("uninstall") self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.label_image_bootable_value)
self.gridLayout.addWidget(self.uninstall, 0, 5, 1, 2) self.gridLayout_image.addWidget(self.image_details_group, 2, 0, 1, 2)
self.comboBox = QtWidgets.QComboBox(self.tab_3) self.button_browse_image = QtWidgets.QPushButton(self.centralwidget)
self.comboBox.setObjectName("comboBox") self.button_browse_image.setCheckable(False)
self.gridLayout.addWidget(self.comboBox, 1, 0, 1, 2) self.button_browse_image.setFlat(False)
self.slider_persistence = QtWidgets.QSlider(self.tab_3) self.button_browse_image.setObjectName("button_browse_image")
self.gridLayout_image.addWidget(self.button_browse_image, 0, 1, 1, 1)
self.label_select_image = QtWidgets.QLabel(self.centralwidget)
self.label_select_image.setObjectName("label_select_image")
self.gridLayout_image.addWidget(self.label_select_image, 0, 0, 1, 1)
self.image_path = QtWidgets.QLineEdit(self.centralwidget)
self.image_path.setObjectName("image_path")
self.gridLayout_image.addWidget(self.image_path, 1, 0, 1, 2)
self.horizontalLayout.addLayout(self.gridLayout_image)
self.verticalLayout_5.addLayout(self.horizontalLayout)
self.verticalLayout_7.addLayout(self.verticalLayout_5)
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setEnabled(True)
self.tabWidget.setAutoFillBackground(False)
self.tabWidget.setObjectName("tabWidget")
self.tab_multibootusb = QtWidgets.QWidget()
self.tab_multibootusb.setEnabled(True)
self.tab_multibootusb.setObjectName("tab_multibootusb")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.tab_multibootusb)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setContentsMargins(5, 5, 5, 5)
self.gridLayout.setObjectName("gridLayout")
self.button_uninstall_distro = QtWidgets.QPushButton(self.tab_multibootusb)
self.button_uninstall_distro.setObjectName("button_uninstall_distro")
self.gridLayout.addWidget(self.button_uninstall_distro, 0, 3, 1, 1)
self.button_install_distro = QtWidgets.QPushButton(self.tab_multibootusb)
self.button_install_distro.setObjectName("button_install_distro")
self.gridLayout.addWidget(self.button_install_distro, 0, 2, 1, 1)
self.slider_persistence = QtWidgets.QSlider(self.tab_multibootusb)
self.slider_persistence.setEnabled(False) self.slider_persistence.setEnabled(False)
self.slider_persistence.setAutoFillBackground(False) self.slider_persistence.setAutoFillBackground(False)
self.slider_persistence.setOrientation(QtCore.Qt.Horizontal) self.slider_persistence.setOrientation(QtCore.Qt.Horizontal)
self.slider_persistence.setTickPosition(QtWidgets.QSlider.TicksBothSides) self.slider_persistence.setTickPosition(QtWidgets.QSlider.TicksBothSides)
self.slider_persistence.setObjectName("slider_persistence") self.slider_persistence.setObjectName("slider_persistence")
self.gridLayout.addWidget(self.slider_persistence, 6, 1, 1, 3) self.gridLayout.addWidget(self.slider_persistence, 2, 0, 1, 2)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.installed_distros = QtWidgets.QListWidget(self.tab_multibootusb)
self.gridLayout.addItem(spacerItem1, 8, 2, 1, 2) self.installed_distros.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.checkBox_all_drives = QtWidgets.QCheckBox(self.tab_3) self.installed_distros.setFrameShadow(QtWidgets.QFrame.Sunken)
self.checkBox_all_drives.setObjectName("checkBox_all_drives") self.installed_distros.setResizeMode(QtWidgets.QListView.Fixed)
self.gridLayout.addWidget(self.checkBox_all_drives, 1, 4, 1, 1) self.installed_distros.setObjectName("installed_distros")
self.label_persistence_value = QtWidgets.QLabel(self.tab_3) self.gridLayout.addWidget(self.installed_distros, 2, 2, 2, 2)
self.label_persistence = QtWidgets.QLabel(self.tab_multibootusb)
self.label_persistence.setEnabled(False)
self.label_persistence.setMouseTracking(True)
self.label_persistence.setStyleSheet("font-weight: 600")
self.label_persistence.setObjectName("label_persistence")
self.gridLayout.addWidget(self.label_persistence, 0, 0, 1, 1)
self.label_persistence_value = QtWidgets.QLabel(self.tab_multibootusb)
self.label_persistence_value.setEnabled(False) self.label_persistence_value.setEnabled(False)
self.label_persistence_value.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_persistence_value.setObjectName("label_persistence_value") self.label_persistence_value.setObjectName("label_persistence_value")
self.gridLayout.addWidget(self.label_persistence_value, 6, 4, 1, 1) self.gridLayout.addWidget(self.label_persistence_value, 0, 1, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem2, 8, 1, 1, 1)
self.create = QtWidgets.QPushButton(self.tab_3)
self.create.setObjectName("create")
self.gridLayout.addWidget(self.create, 7, 4, 1, 1)
self.progressBar = QtWidgets.QProgressBar(self.tab_3)
self.progressBar.setProperty("value", 0)
self.progressBar.setInvertedAppearance(False)
self.progressBar.setObjectName("progressBar")
self.gridLayout.addWidget(self.progressBar, 7, 0, 1, 4)
self.status = QtWidgets.QLabel(self.tab_3)
self.status.setMinimumSize(QtCore.QSize(0, 0))
self.status.setAcceptDrops(False)
self.status.setAutoFillBackground(False)
self.status.setFrameShadow(QtWidgets.QFrame.Plain)
self.status.setTextFormat(QtCore.Qt.AutoText)
self.status.setScaledContents(False)
self.status.setObjectName("status")
self.gridLayout.addWidget(self.status, 9, 0, 1, 6)
self.labelstep1 = QtWidgets.QLabel(self.tab_3)
self.labelstep1.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep1.setObjectName("labelstep1")
self.gridLayout.addWidget(self.labelstep1, 0, 0, 1, 5)
self.labelstep2 = QtWidgets.QLabel(self.tab_3)
self.labelstep2.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep2.setObjectName("labelstep2")
self.gridLayout.addWidget(self.labelstep2, 3, 0, 1, 5)
self.labelstep3 = QtWidgets.QLabel(self.tab_3)
self.labelstep3.setStyleSheet("font-weight: 600; margin-top:15")
self.labelstep3.setObjectName("labelstep3")
self.gridLayout.addWidget(self.labelstep3, 5, 0, 1, 5)
self.horizontalLayout_2.addLayout(self.gridLayout) self.horizontalLayout_2.addLayout(self.gridLayout)
self.tabWidget.addTab(self.tab_3, "") self.tabWidget.addTab(self.tab_multibootusb, "")
self.imager = QtWidgets.QWidget() self.tab_imager = QtWidgets.QWidget()
self.imager.setEnabled(True) self.tab_imager.setEnabled(True)
self.imager.setObjectName("imager") self.tab_imager.setObjectName("tab_imager")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.imager) self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.tab_imager)
self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_7.setObjectName("horizontalLayout_7") self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.gridLayout_9 = QtWidgets.QGridLayout() self.gridLayout_9 = QtWidgets.QGridLayout()
self.gridLayout_9.setContentsMargins(5, 5, 5, 5) self.gridLayout_9.setContentsMargins(5, 5, 5, 5)
self.gridLayout_9.setObjectName("gridLayout_9") self.gridLayout_9.setObjectName("gridLayout_9")
self.widget_7 = QtWidgets.QWidget(self.imager) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_9.addItem(spacerItem, 1, 2, 1, 1)
self.button_write_image_to_disk = QtWidgets.QPushButton(self.tab_imager)
self.button_write_image_to_disk.setObjectName("button_write_image_to_disk")
self.gridLayout_9.addWidget(self.button_write_image_to_disk, 1, 1, 1, 1)
self.widget_7 = QtWidgets.QWidget(self.tab_imager)
self.widget_7.setObjectName("widget_7") self.widget_7.setObjectName("widget_7")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.widget_7) self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.widget_7)
self.verticalLayout_6.setContentsMargins(5, 5, 5, 5) self.verticalLayout_6.setContentsMargins(5, 5, 5, 5)
self.verticalLayout_6.setObjectName("verticalLayout_6") self.verticalLayout_6.setObjectName("verticalLayout_6")
self.gridLayout_11 = QtWidgets.QGridLayout() self.gridLayout_9.addWidget(self.widget_7, 1, 3, 1, 2)
self.gridLayout_11.setObjectName("gridLayout_11") spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.groupBox_10 = QtWidgets.QGroupBox(self.widget_7) self.gridLayout_9.addItem(spacerItem1, 1, 0, 1, 1)
self.groupBox_10.setObjectName("groupBox_10") spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.groupBox_10) self.gridLayout_9.addItem(spacerItem2, 0, 1, 1, 1)
self.verticalLayout_9.setObjectName("verticalLayout_9")
self.pushButton = QtWidgets.QPushButton(self.groupBox_10)
self.pushButton.setObjectName("pushButton")
self.verticalLayout_9.addWidget(self.pushButton)
self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox_10)
self.lineEdit_3.setObjectName("lineEdit_3")
self.verticalLayout_9.addWidget(self.lineEdit_3)
self.imager_bootable = QtWidgets.QLabel(self.groupBox_10)
self.imager_bootable.setObjectName("imager_bootable")
self.verticalLayout_9.addWidget(self.imager_bootable)
self.imager_iso_size = QtWidgets.QLabel(self.groupBox_10)
self.imager_iso_size.setObjectName("imager_iso_size")
self.verticalLayout_9.addWidget(self.imager_iso_size)
spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_9.addItem(spacerItem3) self.gridLayout_9.addItem(spacerItem3, 2, 1, 1, 1)
self.gridLayout_11.addWidget(self.groupBox_10, 0, 1, 1, 1)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_11.addItem(spacerItem4, 1, 0, 1, 1)
self.groupBox_9 = QtWidgets.QGroupBox(self.widget_7)
self.groupBox_9.setStyleSheet("")
self.groupBox_9.setObjectName("groupBox_9")
self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.groupBox_9)
self.verticalLayout_8.setObjectName("verticalLayout_8")
self.comboBox_2 = QtWidgets.QComboBox(self.groupBox_9)
self.comboBox_2.setObjectName("comboBox_2")
self.verticalLayout_8.addWidget(self.comboBox_2)
self.pushbtn_imager_refreshusb = QtWidgets.QPushButton(self.groupBox_9)
self.pushbtn_imager_refreshusb.setObjectName("pushbtn_imager_refreshusb")
self.verticalLayout_8.addWidget(self.pushbtn_imager_refreshusb)
self.formLayout_3 = QtWidgets.QFormLayout()
self.formLayout_3.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.formLayout_3.setObjectName("formLayout_3")
self.label_imager_disk_label = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_disk_label.setObjectName("label_imager_disk_label")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_imager_disk_label)
self.label_imager_total_size = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_total_size.setObjectName("label_imager_total_size")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_imager_total_size)
self.label_imager_uuid = QtWidgets.QLabel(self.groupBox_9)
self.label_imager_uuid.setObjectName("label_imager_uuid")
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_imager_uuid)
self.imager_disk_label = QtWidgets.QLabel(self.groupBox_9)
self.imager_disk_label.setText("")
self.imager_disk_label.setObjectName("imager_disk_label")
self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.imager_disk_label)
self.imager_total_size = QtWidgets.QLabel(self.groupBox_9)
self.imager_total_size.setText("")
self.imager_total_size.setObjectName("imager_total_size")
self.formLayout_3.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.imager_total_size)
self.imager_uuid = QtWidgets.QLabel(self.groupBox_9)
self.imager_uuid.setText("")
self.imager_uuid.setObjectName("imager_uuid")
self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.imager_uuid)
self.verticalLayout_8.addLayout(self.formLayout_3)
spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_8.addItem(spacerItem5)
self.gridLayout_11.addWidget(self.groupBox_9, 0, 0, 1, 1)
self.verticalLayout_6.addLayout(self.gridLayout_11)
self.imager_label_status = QtWidgets.QLabel(self.widget_7)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.imager_label_status.sizePolicy().hasHeightForWidth())
self.imager_label_status.setSizePolicy(sizePolicy)
self.imager_label_status.setObjectName("imager_label_status")
self.verticalLayout_6.addWidget(self.imager_label_status)
self.gridLayout_12 = QtWidgets.QGridLayout()
self.gridLayout_12.setObjectName("gridLayout_12")
self.label_10 = QtWidgets.QLabel(self.widget_7)
self.label_10.setObjectName("label_10")
self.gridLayout_12.addWidget(self.label_10, 1, 0, 1, 3)
self.imager_progressbar = QtWidgets.QProgressBar(self.widget_7)
self.imager_progressbar.setProperty("value", 0)
self.imager_progressbar.setObjectName("imager_progressbar")
self.gridLayout_12.addWidget(self.imager_progressbar, 0, 0, 1, 3)
self.imager_write = QtWidgets.QPushButton(self.widget_7)
self.imager_write.setObjectName("imager_write")
self.gridLayout_12.addWidget(self.imager_write, 2, 2, 1, 1)
self.verticalLayout_6.addLayout(self.gridLayout_12)
self.gridLayout_9.addWidget(self.widget_7, 0, 0, 1, 2)
self.imager_close = QtWidgets.QPushButton(self.imager)
self.imager_close.setObjectName("imager_close")
self.gridLayout_9.addWidget(self.imager_close, 1, 1, 1, 1)
spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_9.addItem(spacerItem6, 1, 0, 1, 1)
self.horizontalLayout_7.addLayout(self.gridLayout_9) self.horizontalLayout_7.addLayout(self.gridLayout_9)
self.tabWidget.addTab(self.imager, "") self.tabWidget.addTab(self.tab_imager, "")
self.syslinux_ab = QtWidgets.QWidget() self.tab_syslinux = QtWidgets.QWidget()
self.syslinux_ab.setObjectName("syslinux_ab") self.tab_syslinux.setObjectName("tab_syslinux")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.syslinux_ab) self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.tab_syslinux)
self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.gridLayout_2 = QtWidgets.QGridLayout() self.gridLayout_2 = QtWidgets.QGridLayout()
self.gridLayout_2.setObjectName("gridLayout_2") self.gridLayout_2.setObjectName("gridLayout_2")
self.groupBox_2 = QtWidgets.QGroupBox(self.syslinux_ab) self.groupBox_2 = QtWidgets.QGroupBox(self.tab_syslinux)
self.groupBox_2.setAutoFillBackground(False) self.groupBox_2.setAutoFillBackground(False)
self.groupBox_2.setObjectName("groupBox_2") self.groupBox_2.setObjectName("groupBox_2")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.groupBox_2) self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.groupBox_2)
self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.gridLayout_3 = QtWidgets.QGridLayout() self.gridLayout_3 = QtWidgets.QGridLayout()
self.gridLayout_3.setObjectName("gridLayout_3") self.gridLayout_3.setObjectName("gridLayout_3")
self.install_sys_only = QtWidgets.QRadioButton(self.groupBox_2) self.check_install_sys_only = QtWidgets.QRadioButton(self.groupBox_2)
self.install_sys_only.setObjectName("install_sys_only") self.check_install_sys_only.setObjectName("check_install_sys_only")
self.gridLayout_3.addWidget(self.install_sys_only, 0, 0, 1, 1) self.gridLayout_3.addWidget(self.check_install_sys_only, 0, 0, 1, 1)
self.install_sys_all = QtWidgets.QRadioButton(self.groupBox_2) self.check_install_sys_all = QtWidgets.QRadioButton(self.groupBox_2)
self.install_sys_all.setObjectName("install_sys_all") self.check_install_sys_all.setObjectName("check_install_sys_all")
self.gridLayout_3.addWidget(self.install_sys_all, 1, 0, 1, 1) self.gridLayout_3.addWidget(self.check_install_sys_all, 1, 0, 1, 1)
self.install_syslinux = QtWidgets.QPushButton(self.groupBox_2) self.button_install_syslinux = QtWidgets.QPushButton(self.groupBox_2)
self.install_syslinux.setObjectName("install_syslinux") self.button_install_syslinux.setObjectName("button_install_syslinux")
self.gridLayout_3.addWidget(self.install_syslinux, 0, 2, 2, 1) self.gridLayout_3.addWidget(self.button_install_syslinux, 0, 2, 2, 1)
spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_3.addItem(spacerItem7, 0, 1, 2, 1) self.gridLayout_3.addItem(spacerItem4, 0, 1, 2, 1)
self.horizontalLayout_4.addLayout(self.gridLayout_3) self.horizontalLayout_4.addLayout(self.gridLayout_3)
self.gridLayout_2.addWidget(self.groupBox_2, 0, 0, 1, 1) self.gridLayout_2.addWidget(self.groupBox_2, 0, 0, 1, 1)
spacerItem8 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_2.addItem(spacerItem8, 3, 0, 1, 1) self.gridLayout_2.addItem(spacerItem5, 3, 0, 1, 1)
self.groupBox_3 = QtWidgets.QGroupBox(self.syslinux_ab) self.groupBox_3 = QtWidgets.QGroupBox(self.tab_syslinux)
self.groupBox_3.setObjectName("groupBox_3") self.groupBox_3.setObjectName("groupBox_3")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.groupBox_3) self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.groupBox_3)
self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.gridLayout_4 = QtWidgets.QGridLayout() self.gridLayout_4 = QtWidgets.QGridLayout()
self.gridLayout_4.setObjectName("gridLayout_4") self.gridLayout_4.setObjectName("gridLayout_4")
self.edit_syslinux = QtWidgets.QPushButton(self.groupBox_3) self.button_edit_syslinux = QtWidgets.QPushButton(self.groupBox_3)
self.edit_syslinux.setObjectName("edit_syslinux") self.button_edit_syslinux.setObjectName("button_edit_syslinux")
self.gridLayout_4.addWidget(self.edit_syslinux, 0, 2, 1, 1) self.gridLayout_4.addWidget(self.button_edit_syslinux, 0, 2, 1, 1)
self.label_2 = QtWidgets.QLabel(self.groupBox_3) self.label_2 = QtWidgets.QLabel(self.groupBox_3)
self.label_2.setObjectName("label_2") self.label_2.setObjectName("label_2")
self.gridLayout_4.addWidget(self.label_2, 0, 0, 1, 1) self.gridLayout_4.addWidget(self.label_2, 0, 0, 1, 1)
spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_4.addItem(spacerItem9, 0, 1, 1, 1) self.gridLayout_4.addItem(spacerItem6, 0, 1, 1, 1)
self.horizontalLayout_5.addLayout(self.gridLayout_4) self.horizontalLayout_5.addLayout(self.gridLayout_4)
self.gridLayout_2.addWidget(self.groupBox_3, 2, 0, 1, 1) self.gridLayout_2.addWidget(self.groupBox_3, 2, 0, 1, 1)
spacerItem10 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) spacerItem7 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
self.gridLayout_2.addItem(spacerItem10, 1, 0, 1, 1) self.gridLayout_2.addItem(spacerItem7, 1, 0, 1, 1)
self.horizontalLayout_3.addLayout(self.gridLayout_2) self.horizontalLayout_3.addLayout(self.gridLayout_2)
self.tabWidget.addTab(self.syslinux_ab, "") self.tabWidget.addTab(self.tab_syslinux, "")
self.tab = QtWidgets.QWidget() self.tab_testboot = QtWidgets.QWidget()
self.tab.setObjectName("tab") self.tab_testboot.setObjectName("tab_testboot")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab) self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab_testboot)
self.verticalLayout_2.setObjectName("verticalLayout_2") self.verticalLayout_2.setObjectName("verticalLayout_2")
self.groupBox_5 = QtWidgets.QGroupBox(self.tab)
self.groupBox_5.setObjectName("groupBox_5")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.groupBox_5)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.gridLayout_7 = QtWidgets.QGridLayout()
self.gridLayout_7.setObjectName("gridLayout_7")
spacerItem11 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_7.addItem(spacerItem11, 3, 0, 1, 1)
spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_7.addItem(spacerItem12, 1, 6, 1, 1)
self.boot_iso_qemu = QtWidgets.QPushButton(self.groupBox_5)
self.boot_iso_qemu.setObjectName("boot_iso_qemu")
self.gridLayout_7.addWidget(self.boot_iso_qemu, 3, 6, 1, 1)
self.browse_iso_qemu = QtWidgets.QPushButton(self.groupBox_5)
self.browse_iso_qemu.setObjectName("browse_iso_qemu")
self.gridLayout_7.addWidget(self.browse_iso_qemu, 0, 6, 1, 1)
self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox_5)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout_7.addWidget(self.lineEdit_2, 0, 0, 1, 6)
spacerItem13 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout_7.addItem(spacerItem13, 2, 6, 1, 1)
self.label_3 = QtWidgets.QLabel(self.groupBox_5)
self.label_3.setObjectName("label_3")
self.gridLayout_7.addWidget(self.label_3, 2, 0, 1, 1)
self.ram_iso_256 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_256.setObjectName("ram_iso_256")
self.gridLayout_7.addWidget(self.ram_iso_256, 2, 1, 1, 1)
self.ram_iso_512 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_512.setObjectName("ram_iso_512")
self.gridLayout_7.addWidget(self.ram_iso_512, 2, 2, 1, 1)
self.ram_iso_768 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_768.setObjectName("ram_iso_768")
self.gridLayout_7.addWidget(self.ram_iso_768, 2, 3, 1, 1)
self.ram_iso_1024 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_1024.setObjectName("ram_iso_1024")
self.gridLayout_7.addWidget(self.ram_iso_1024, 2, 4, 1, 1)
self.ram_iso_2048 = QtWidgets.QRadioButton(self.groupBox_5)
self.ram_iso_2048.setObjectName("ram_iso_2048")
self.gridLayout_7.addWidget(self.ram_iso_2048, 2, 5, 1, 1)
self.verticalLayout_3.addLayout(self.gridLayout_7)
self.verticalLayout_2.addWidget(self.groupBox_5)
self.gridLayout_6 = QtWidgets.QGridLayout() self.gridLayout_6 = QtWidgets.QGridLayout()
self.gridLayout_6.setContentsMargins(-1, 10, -1, -1)
self.gridLayout_6.setVerticalSpacing(20)
self.gridLayout_6.setObjectName("gridLayout_6") self.gridLayout_6.setObjectName("gridLayout_6")
self.groupBox_4 = QtWidgets.QGroupBox(self.tab) self.groupBox_4 = QtWidgets.QGroupBox(self.tab_testboot)
self.groupBox_4.setStyleSheet("") self.groupBox_4.setStyleSheet("")
self.groupBox_4.setObjectName("groupBox_4") self.groupBox_4.setObjectName("groupBox_4")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_4) self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_4)
self.verticalLayout_4.setObjectName("verticalLayout_4") self.verticalLayout_4.setObjectName("verticalLayout_4")
self.gridLayout_8 = QtWidgets.QGridLayout() self.gridLayout_8 = QtWidgets.QGridLayout()
self.gridLayout_8.setObjectName("gridLayout_8") self.gridLayout_8.setObjectName("gridLayout_8")
self.ram_usb_2048 = QtWidgets.QRadioButton(self.groupBox_4) self.combo_usb_boot_ram = QtWidgets.QComboBox(self.groupBox_4)
self.ram_usb_2048.setObjectName("ram_usb_2048") self.combo_usb_boot_ram.setObjectName("combo_usb_boot_ram")
self.gridLayout_8.addWidget(self.ram_usb_2048, 0, 5, 1, 1) self.combo_usb_boot_ram.addItem("")
spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.combo_usb_boot_ram.addItem("")
self.gridLayout_8.addItem(spacerItem14, 0, 6, 1, 1) self.combo_usb_boot_ram.addItem("")
spacerItem15 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.combo_usb_boot_ram.addItem("")
self.gridLayout_8.addItem(spacerItem15, 1, 0, 1, 1) self.combo_usb_boot_ram.addItem("")
self.boot_usb_qemu = QtWidgets.QPushButton(self.groupBox_4) self.combo_usb_boot_ram.addItem("")
self.boot_usb_qemu.setObjectName("boot_usb_qemu") self.gridLayout_8.addWidget(self.combo_usb_boot_ram, 0, 1, 1, 1)
self.gridLayout_8.addWidget(self.boot_usb_qemu, 1, 6, 1, 1)
self.ram_usb_256 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_256.setObjectName("ram_usb_256")
self.gridLayout_8.addWidget(self.ram_usb_256, 0, 1, 1, 1)
self.ram_usb_768 = QtWidgets.QRadioButton(self.groupBox_4)
self.ram_usb_768.setObjectName("ram_usb_768")
self.gridLayout_8.addWidget(self.ram_usb_768, 0, 3, 1, 1)
self.label_4 = QtWidgets.QLabel(self.groupBox_4) self.label_4 = QtWidgets.QLabel(self.groupBox_4)
self.label_4.setObjectName("label_4") self.label_4.setObjectName("label_4")
self.gridLayout_8.addWidget(self.label_4, 0, 0, 1, 1) self.gridLayout_8.addWidget(self.label_4, 0, 0, 1, 1)
self.ram_usb_512 = QtWidgets.QRadioButton(self.groupBox_4) spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.ram_usb_512.setObjectName("ram_usb_512") self.gridLayout_8.addItem(spacerItem8, 0, 5, 1, 1)
self.gridLayout_8.addWidget(self.ram_usb_512, 0, 2, 1, 1) self.boot_usb_qemu = QtWidgets.QPushButton(self.groupBox_4)
self.ram_usb_1024 = QtWidgets.QRadioButton(self.groupBox_4) self.boot_usb_qemu.setObjectName("boot_usb_qemu")
self.ram_usb_1024.setObjectName("ram_usb_1024") self.gridLayout_8.addWidget(self.boot_usb_qemu, 0, 4, 1, 1)
self.gridLayout_8.addWidget(self.ram_usb_1024, 0, 4, 1, 1) spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_8.addItem(spacerItem9, 0, 3, 1, 1)
self.label_5 = QtWidgets.QLabel(self.groupBox_4)
self.label_5.setObjectName("label_5")
self.gridLayout_8.addWidget(self.label_5, 0, 2, 1, 1)
self.verticalLayout_4.addLayout(self.gridLayout_8) self.verticalLayout_4.addLayout(self.gridLayout_8)
self.gridLayout_6.addWidget(self.groupBox_4, 0, 0, 1, 1) self.gridLayout_6.addWidget(self.groupBox_4, 1, 0, 1, 1)
self.groupBox_5 = QtWidgets.QGroupBox(self.tab_testboot)
self.groupBox_5.setObjectName("groupBox_5")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.groupBox_5)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.gridLayout_7 = QtWidgets.QGridLayout()
self.gridLayout_7.setObjectName("gridLayout_7")
self.label_3 = QtWidgets.QLabel(self.groupBox_5)
self.label_3.setObjectName("label_3")
self.gridLayout_7.addWidget(self.label_3, 0, 0, 1, 1)
self.boot_iso_qemu = QtWidgets.QPushButton(self.groupBox_5)
self.boot_iso_qemu.setObjectName("boot_iso_qemu")
self.gridLayout_7.addWidget(self.boot_iso_qemu, 0, 4, 1, 1)
spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_7.addItem(spacerItem10, 0, 3, 1, 1)
self.combo_iso_boot_ram = QtWidgets.QComboBox(self.groupBox_5)
self.combo_iso_boot_ram.setObjectName("combo_iso_boot_ram")
self.combo_iso_boot_ram.addItem("")
self.combo_iso_boot_ram.addItem("")
self.combo_iso_boot_ram.addItem("")
self.combo_iso_boot_ram.addItem("")
self.combo_iso_boot_ram.addItem("")
self.combo_iso_boot_ram.addItem("")
self.gridLayout_7.addWidget(self.combo_iso_boot_ram, 0, 1, 1, 1)
spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_7.addItem(spacerItem11, 0, 5, 1, 1)
self.label = QtWidgets.QLabel(self.groupBox_5)
self.label.setObjectName("label")
self.gridLayout_7.addWidget(self.label, 0, 2, 1, 1)
self.verticalLayout_3.addLayout(self.gridLayout_7)
self.gridLayout_6.addWidget(self.groupBox_5, 0, 0, 1, 1)
self.verticalLayout_2.addLayout(self.gridLayout_6) self.verticalLayout_2.addLayout(self.gridLayout_6)
spacerItem16 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) spacerItem12 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem16) self.verticalLayout_2.addItem(spacerItem12)
self.tabWidget.addTab(self.tab, "") self.tabWidget.addTab(self.tab_testboot, "")
self.tab_2 = QtWidgets.QWidget() self.verticalLayout_7.addWidget(self.tabWidget)
self.tab_2.setObjectName("tab_2") self.progressbar = QtWidgets.QProgressBar(self.centralwidget)
self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.tab_2) self.progressbar.setProperty("value", 0)
self.horizontalLayout_6.setObjectName("horizontalLayout_6") self.progressbar.setInvertedAppearance(False)
self.gridLayout_10 = QtWidgets.QGridLayout() self.progressbar.setObjectName("progressbar")
self.gridLayout_10.setObjectName("gridLayout_10") self.verticalLayout_7.addWidget(self.progressbar)
spacerItem17 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) MainWindow.setCentralWidget(self.centralwidget)
self.gridLayout_10.addItem(spacerItem17, 0, 1, 1, 1) self.menubar = QtWidgets.QMenuBar(MainWindow)
spacerItem18 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.menubar.setGeometry(QtCore.QRect(0, 0, 629, 19))
self.gridLayout_10.addItem(spacerItem18, 1, 0, 1, 1) self.menubar.setNativeMenuBar(True)
spacerItem19 = QtWidgets.QSpacerItem(20, 30, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.menubar.setObjectName("menubar")
self.gridLayout_10.addItem(spacerItem19, 2, 1, 1, 1) self.menuFile = QtWidgets.QMenu(self.menubar)
self.label_5 = QtWidgets.QLabel(self.tab_2) self.menuFile.setObjectName("menuFile")
self.label_5.setObjectName("label_5") self.menu_Help = QtWidgets.QMenu(self.menubar)
self.gridLayout_10.addWidget(self.label_5, 1, 1, 1, 1) self.menu_Help.setObjectName("menu_Help")
spacerItem20 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) MainWindow.setMenuBar(self.menubar)
self.gridLayout_10.addItem(spacerItem20, 1, 2, 1, 1) self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.horizontalLayout_6.addLayout(self.gridLayout_10) self.statusbar.setObjectName("statusbar")
self.tabWidget.addTab(self.tab_2, "") MainWindow.setStatusBar(self.statusbar)
self.horizontalLayout.addWidget(self.tabWidget) self.action_Quit = QtWidgets.QAction(MainWindow)
self.action_Quit.setObjectName("action_Quit")
self.action_About = QtWidgets.QAction(MainWindow)
self.action_About.setObjectName("action_About")
self.menuFile.addAction(self.action_Quit)
self.menu_Help.addAction(self.action_About)
self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menu_Help.menuAction())
self.retranslateUi(Dialog) self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0) self.tabWidget.setCurrentIndex(3)
QtCore.QMetaObject.connectSlotsByName(Dialog) QtCore.QMetaObject.connectSlotsByName(MainWindow)
Dialog.setTabOrder(self.comboBox, self.detect_usb)
Dialog.setTabOrder(self.detect_usb, self.lineEdit)
Dialog.setTabOrder(self.lineEdit, self.slider_persistence)
Dialog.setTabOrder(self.slider_persistence, self.uninstall)
Dialog.setTabOrder(self.uninstall, self.listWidget)
Dialog.setTabOrder(self.listWidget, self.close)
Dialog.setTabOrder(self.close, self.comboBox_2)
Dialog.setTabOrder(self.comboBox_2, self.pushButton)
Dialog.setTabOrder(self.pushButton, self.pushbtn_imager_refreshusb)
Dialog.setTabOrder(self.pushbtn_imager_refreshusb, self.lineEdit_3)
Dialog.setTabOrder(self.lineEdit_3, self.imager_write)
Dialog.setTabOrder(self.imager_write, self.imager_close)
Dialog.setTabOrder(self.imager_close, self.install_sys_only)
Dialog.setTabOrder(self.install_sys_only, self.install_sys_all)
Dialog.setTabOrder(self.install_sys_all, self.install_syslinux)
Dialog.setTabOrder(self.install_syslinux, self.edit_syslinux)
Dialog.setTabOrder(self.edit_syslinux, self.lineEdit_2)
Dialog.setTabOrder(self.lineEdit_2, self.browse_iso_qemu)
Dialog.setTabOrder(self.browse_iso_qemu, self.ram_iso_256)
Dialog.setTabOrder(self.ram_iso_256, self.ram_iso_512)
Dialog.setTabOrder(self.ram_iso_512, self.ram_iso_768)
Dialog.setTabOrder(self.ram_iso_768, self.ram_iso_1024)
Dialog.setTabOrder(self.ram_iso_1024, self.ram_iso_2048)
Dialog.setTabOrder(self.ram_iso_2048, self.boot_iso_qemu)
Dialog.setTabOrder(self.boot_iso_qemu, self.ram_usb_256)
Dialog.setTabOrder(self.ram_usb_256, self.ram_usb_512)
Dialog.setTabOrder(self.ram_usb_512, self.ram_usb_768)
Dialog.setTabOrder(self.ram_usb_768, self.ram_usb_1024)
Dialog.setTabOrder(self.ram_usb_1024, self.ram_usb_2048)
Dialog.setTabOrder(self.ram_usb_2048, self.boot_usb_qemu)
Dialog.setTabOrder(self.boot_usb_qemu, self.tabWidget)
def retranslateUi(self, Dialog): def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "multibootusb")) MainWindow.setWindowTitle(_translate("MainWindow", "MultiBootUSB"))
self.groupBox_6.setTitle(_translate("Dialog", "USB Details")) self.label_select_usb_disk.setText(_translate("MainWindow", "<b>Select USB disk</b>"))
self.label_usb_dev.setText(_translate("Dialog", "Drive:")) self.button_detect_drives.setText(_translate("MainWindow", "Detect Drives"))
self.label_usb_vendor.setText(_translate("Dialog", "Vendor:")) self.checkbox_all_drives.setText(_translate("MainWindow", "All Drives"))
self.label_usb_model.setText(_translate("Dialog", "Model:")) self.group_usb_details.setTitle(_translate("MainWindow", "USB Details"))
self.label_usb_size.setText(_translate("Dialog", "Size:")) self.label_usb_dev.setText(_translate("MainWindow", "Drive:"))
self.label_usb_mount.setText(_translate("Dialog", "Mount:")) self.label_usb_vendor.setText(_translate("MainWindow", "Vendor:"))
self.close.setText(_translate("Dialog", "Quit")) self.label_usb_model.setText(_translate("MainWindow", "Model:"))
self.browse_iso.setText(_translate("Dialog", "Browse ISO")) self.label_usb_size.setText(_translate("MainWindow", "Size:"))
self.label_persistence.setText(_translate("Dialog", "Persistence")) self.label_usb_mount.setText(_translate("MainWindow", "Mount:"))
self.detect_usb.setText(_translate("Dialog", "Detect Drives")) self.image_details_group.setTitle(_translate("MainWindow", "Image Details"))
self.uninstall.setText(_translate("Dialog", "Uninstall Distro")) self.label_image_type.setText(_translate("MainWindow", "Type:"))
self.slider_persistence.setToolTip(_translate("Dialog", "Choose Persistence size. Not all distros supports persistence...")) self.label_image_size.setText(_translate("MainWindow", "Size:"))
self.checkBox_all_drives.setText(_translate("Dialog", "All Drives")) self.label_image_bootable.setText(_translate("MainWindow", "Boot:"))
self.label_persistence_value.setText(_translate("Dialog", "0 MB")) self.button_browse_image.setText(_translate("MainWindow", "Browse"))
self.create.setText(_translate("Dialog", "Install")) self.label_select_image.setText(_translate("MainWindow", "<b>Select image</b>"))
self.status.setText(_translate("Dialog", "Status: Idle")) self.button_uninstall_distro.setText(_translate("MainWindow", "Uninstall distro"))
self.labelstep1.setText(_translate("Dialog", "Step 1 :: Select drive")) self.button_install_distro.setText(_translate("MainWindow", "Install distro"))
self.labelstep2.setText(_translate("Dialog", "Step 2 :: Select ISO")) self.slider_persistence.setToolTip(_translate("MainWindow", "Choose Persistence size. Not all distros supports persistence..."))
self.labelstep3.setText(_translate("Dialog", "Step 3 :: Install distro")) self.label_persistence.setText(_translate("MainWindow", "Persistence"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("Dialog", "MultiBootUSB")) self.label_persistence_value.setText(_translate("MainWindow", "0 MB"))
self.groupBox_10.setTitle(_translate("Dialog", "Select image")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_multibootusb), _translate("MainWindow", "MultiBootUSB"))
self.pushButton.setText(_translate("Dialog", "Browse image...")) self.button_write_image_to_disk.setText(_translate("MainWindow", "Write image to USB"))
self.imager_bootable.setText(_translate("Dialog", "Bootable ISO")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_imager), _translate("MainWindow", "Write Image to disk"))
self.imager_iso_size.setText(_translate("Dialog", "Image Size")) self.groupBox_2.setTitle(_translate("MainWindow", "Install Syslinux"))
self.groupBox_9.setTitle(_translate("Dialog", "Select USB Drive")) self.check_install_sys_only.setText(_translate("MainWindow", "Install only syslinu&x (existing configurations will not be altered)."))
self.pushbtn_imager_refreshusb.setText(_translate("Dialog", "Refresh USB")) self.check_install_sys_all.setText(_translate("MainWindow", "Install syslinux and copy all re&quired files."))
self.label_imager_disk_label.setText(_translate("Dialog", "Disk Type:")) self.button_install_syslinux.setText(_translate("MainWindow", "Install"))
self.label_imager_total_size.setText(_translate("Dialog", "Disk Size:")) self.groupBox_3.setTitle(_translate("MainWindow", "syslinux.cfg"))
self.label_imager_uuid.setText(_translate("Dialog", "Disk Label:")) self.button_edit_syslinux.setText(_translate("MainWindow", "Edit"))
self.imager_label_status.setText(_translate("Dialog", "Status: Idle")) self.label_2.setText(_translate("MainWindow", "<html><head/><body><p align=\"justify\">Edit syslinux.cfg file using the default editor. </p><p align=\"justify\">Be <span style=\" font-weight:600; color:#ff0000;\">CAREFUL</span> while editing syslinux.cfg!</p></body></html>"))
self.label_10.setText(_translate("Dialog", "<html><head/><body><p><span style=\" font-weight:600; color:#ff0000;\">WARNING</span> : Any bootable USB made using<span style=\" font-weight:600;\"> ISO Imager will destroy all data </span>on the selected USB disk. </p><p>Use it at your own risk. Developers are not responsile for loss of any data.</p></body></html>")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_syslinux), _translate("MainWindow", "Install Syslinux"))
self.imager_write.setText(_translate("Dialog", "Write Image")) self.groupBox_4.setTitle(_translate("MainWindow", "Boot USB :: Test bootable USB drive without reboot"))
self.imager_close.setText(_translate("Dialog", "Quit")) self.combo_usb_boot_ram.setItemText(0, _translate("MainWindow", "Default"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.imager), _translate("Dialog", "Write Image to USB")) self.combo_usb_boot_ram.setItemText(1, _translate("MainWindow", "256"))
self.groupBox_2.setTitle(_translate("Dialog", "Install Syslinux")) self.combo_usb_boot_ram.setItemText(2, _translate("MainWindow", "512"))
self.install_sys_only.setText(_translate("Dialog", "Install only syslinu&x (existing configurations will not be altered).")) self.combo_usb_boot_ram.setItemText(3, _translate("MainWindow", "768"))
self.install_sys_all.setText(_translate("Dialog", "Install syslinux and copy all re&quired files.")) self.combo_usb_boot_ram.setItemText(4, _translate("MainWindow", "1024"))
self.install_syslinux.setText(_translate("Dialog", "Install")) self.combo_usb_boot_ram.setItemText(5, _translate("MainWindow", "2048"))
self.groupBox_3.setTitle(_translate("Dialog", "Edit syslinux.cfg")) self.label_4.setText(_translate("MainWindow", "Choose RAM size:"))
self.edit_syslinux.setText(_translate("Dialog", "Edit")) self.boot_usb_qemu.setText(_translate("MainWindow", "Boot &USB"))
self.label_2.setText(_translate("Dialog", "<html><head/><body><p align=\"justify\">Edit syslinux.cfg file directly using the default editor of your system. </p><p align=\"justify\">Be <span style=\" font-weight:600; color:#ff0000;\">CAREFUL</span> while editing syslinux.cfg!</p></body></html>")) self.label_5.setText(_translate("MainWindow", "MB"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.syslinux_ab), _translate("Dialog", "Install Syslinux")) self.groupBox_5.setTitle(_translate("MainWindow", "Boot ISO :: Test bootable ISOs without reboot"))
self.groupBox_5.setTitle(_translate("Dialog", "Boot ISO :: Test bootable ISOs without reboot")) self.label_3.setText(_translate("MainWindow", "Choose RAM size:"))
self.boot_iso_qemu.setText(_translate("Dialog", "Boot ISO")) self.boot_iso_qemu.setText(_translate("MainWindow", "Boot &ISO"))
self.browse_iso_qemu.setText(_translate("Dialog", "Browse ISO")) self.combo_iso_boot_ram.setItemText(0, _translate("MainWindow", "Default"))
self.label_3.setText(_translate("Dialog", "Choose RAM size:")) self.combo_iso_boot_ram.setItemText(1, _translate("MainWindow", "256"))
self.ram_iso_256.setText(_translate("Dialog", "&256 MB")) self.combo_iso_boot_ram.setItemText(2, _translate("MainWindow", "512"))
self.ram_iso_512.setText(_translate("Dialog", "&512 MB")) self.combo_iso_boot_ram.setItemText(3, _translate("MainWindow", "768"))
self.ram_iso_768.setText(_translate("Dialog", "&768 MB")) self.combo_iso_boot_ram.setItemText(4, _translate("MainWindow", "1024"))
self.ram_iso_1024.setText(_translate("Dialog", "&1024 MB")) self.combo_iso_boot_ram.setItemText(5, _translate("MainWindow", "2048"))
self.ram_iso_2048.setText(_translate("Dialog", "204&8 MB")) self.label.setText(_translate("MainWindow", "MB"))
self.groupBox_4.setTitle(_translate("Dialog", "Boot USB :: Test bootable USB drive without reboot")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_testboot), _translate("MainWindow", "Boot ISO/USB"))
self.ram_usb_2048.setText(_translate("Dialog", "20&48 MB")) self.menuFile.setTitle(_translate("MainWindow", "&File"))
self.boot_usb_qemu.setText(_translate("Dialog", "Boot USB")) self.menu_Help.setTitle(_translate("MainWindow", "&Help"))
self.ram_usb_256.setText(_translate("Dialog", "25&6 MB")) self.action_Quit.setText(_translate("MainWindow", "&Quit"))
self.ram_usb_768.setText(_translate("Dialog", "7&68 MB")) self.action_About.setText(_translate("MainWindow", "&About"))
self.label_4.setText(_translate("Dialog", "Choose RAM size:"))
self.ram_usb_512.setText(_translate("Dialog", "5&12 MB"))
self.ram_usb_1024.setText(_translate("Dialog", "1&024 MB"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Dialog", "Boot ISO/USB"))
self.label_5.setText(_translate("Dialog", "<html><head/><body><p align=\"center\">An advanced bootable usb creator with option to install/uninstall multiple distros.</p><p align=\"center\">This software is written in python and pyqt. </p><p align=\"center\">Copyright 2010-2016 Sundar</p><p align=\"center\"><span style=\" font-weight:600;\">Author(s)</span>: Sundar, Ian Bruce, Lee</p><p align=\"center\"><span style=\" font-weight:600;\">Licence</span>: GPL version 2 or later</p><p align=\"center\"><span style=\" font-weight:600;\">Home page</span>: <a href=\" http://multibootusb.org\"><span style=\" text-decoration: underline; color:#0000ff;\">http://multibootusb.org</span></a></p><p align=\"center\"><span style=\" font-weight:600;\">Help/Email</span>: feedback.multibootusb@gmail.com</p><p align=\"center\"><span style=\" font-weight:600;\">Source Code</span>: <a href=\"https://github.com/mbusb/multibootusb\"><span style=\" text-decoration: underline; color:#0000ff;\">https://github.com/mbusb/multibootusb</span></a></p><p><br/></p></body></html>"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Dialog", "About"))

@ -15,7 +15,7 @@ import signal
from PyQt5 import QtGui from PyQt5 import QtGui
from PyQt5 import QtWidgets from PyQt5 import QtWidgets
from PyQt5 import QtCore from PyQt5 import QtCore
from .gui.ui_multibootusb import Ui_Dialog from .gui.ui_multibootusb import Ui_MainWindow
from .gen import * from .gen import *
from . import iso from . import iso
from . import usb from . import usb
@ -28,10 +28,10 @@ if platform.system() == "Windows":
def dd_linux(): def dd_linux():
import time import time
input = "if=" + config.imager_iso_link input = "if=" + config.image_path
in_file_size = float(os.path.getsize(config.imager_iso_link)) in_file_size = float(os.path.getsize(config.image_path))
output = "of=" + config.imager_usb_disk output = "of=" + config.usb_disk
os.system("umount " + config.imager_usb_disk + "1") os.system("umount " + config.usb_disk + "1")
command = ['dd', input, output, "bs=1M", "oflag=sync"] command = ['dd', input, output, "bs=1M", "oflag=sync"]
log("Executing ==> " + " ".join(command)) log("Executing ==> " + " ".join(command))
dd_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False) dd_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
@ -72,9 +72,9 @@ def dd_win():
windd = resource_path(os.path.join("data", "tools", "dd", "dd.exe")) windd = resource_path(os.path.join("data", "tools", "dd", "dd.exe"))
if os.path.exists(resource_path(os.path.join("data", "tools", "dd", "dd.exe"))): if os.path.exists(resource_path(os.path.join("data", "tools", "dd", "dd.exe"))):
log("dd exist") log("dd exist")
input = "if=" + config.imager_iso_link input = "if=" + config.image_path
in_file_size = float(os.path.getsize(config.imager_iso_link) / 1024 / 1024) in_file_size = float(os.path.getsize(config.image_path) / 1024 / 1024)
output = "of=\\\.\\" + config.imager_usb_disk output = "of=\\\.\\" + config.usb_disk
command = [windd, input, output, "bs=1M", "--progress"] command = [windd, input, output, "bs=1M", "--progress"]
log("Executing ==> " + " ".join(command)) log("Executing ==> " + " ".join(command))
dd_process = subprocess.Popen(command, universal_newlines=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE, dd_process = subprocess.Popen(command, universal_newlines=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE,
@ -94,31 +94,31 @@ def dd_win():
return return
class Imager(QtWidgets.QDialog, Ui_Dialog): class Imager(QtWidgets.QMainWindow, Ui_MainWindow):
""" """
Raw write to USB disk using dd. Raw write to USB disk using dd.
""" """
def __init__(self): def __init__(self):
QtWidgets.QDialog.__init__(self) QtWidgets.QMainWindow.__init__(self)
self.ui = Ui_Dialog() self.ui = Ui_MainWindow()
self.ui.setupUi(self) self.ui.setupUi(self)
def on_Imager_Browse_iso_Click(self): # def on_Imager_Browse_iso_Click(self):
""" # """
Browse and choose an ISO. # Browse and choose an ISO.
:return: # :return:
""" # """
self.ui.lineEdit_3.clear() # self.ui.lineEdit_3.clear()
config.imager_iso_link = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', "", "ISO Files (*.iso)")[0] # config.imager_iso_link = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', "", "ISO Files (*.iso)")[0]
if config.imager_iso_link: # if config.imager_iso_link:
if platform.system() == "Windows": # if platform.system() == "Windows":
if "/" in config.imager_iso_link: # if "/" in config.imager_iso_link:
config.imager_iso_link = config.imager_iso_link.strip().replace("/", "\\") # config.imager_iso_link = config.imager_iso_link.strip().replace("/", "\\")
self.ui.lineEdit_3.insert(str(config.imager_iso_link)) # self.ui.lineEdit_3.insert(str(config.imager_iso_link))
self.add_iso_gui_label_text() # self.add_iso_gui_label_text()
else: # else:
log("File not selected...") # log("File not selected...")
def add_iso_gui_label_text(self): def add_iso_gui_label_text(self):
""" """
@ -127,31 +127,31 @@ class Imager(QtWidgets.QDialog, Ui_Dialog):
""" """
log("Testing ISO...") log("Testing ISO...")
self.ui.imager_bootable.setVisible(True) self.ui.imager_bootable.setVisible(True)
if iso.is_bootable(config.imager_iso_link) is True: if iso.is_bootable(config.image_path) is True:
self.ui.imager_bootable.setText("Bootable ISO: Yes") self.ui.imager_bootable.setText("Bootable ISO: Yes")
log("ISO is bootable.") log("ISO is bootable.")
else: else:
self.ui.imager_bootable.setText("Bootable ISO: No") self.ui.imager_bootable.setText("Bootable ISO: No")
log("ISO is not bootable.") log("ISO is not bootable.")
if os.path.exists(config.imager_iso_link): if os.path.exists(config.image_path):
log("Path " + config.imager_iso_link + " exists...") log("Path " + config.image_path + " exists...")
self.iso_size = str(round(os.path.getsize(config.imager_iso_link) / 1024 / 1024)) self.iso_size = str(round(os.path.getsize(config.image_path) / 1024 / 1024))
self.ui.imager_iso_size.setVisible(True) self.ui.imager_iso_size.setVisible(True)
self.ui.imager_iso_size.setText("ISO Size: " + self.iso_size + " MB") self.ui.imager_iso_size.setText("ISO Size: " + self.iso_size + " MB")
log("ISO Size is " + self.iso_size + " MB") log("ISO Size is " + self.iso_size + " MB")
def onImagerComboChange(self): # def onImagerComboChange(self):
config.imager_usb_disk = str(self.ui.comboBox_2.currentText()) # config.imager_usb_disk = str(self.ui.comboBox_2.currentText())
if bool(config.imager_usb_disk): # if bool(config.imager_usb_disk):
self.ui.imager_disk_label.setText(self.imager_usb_detail(config.imager_usb_disk, partition=0).usb_type) # self.ui.imager_disk_label.setText(self.imager_usb_detail(config.imager_usb_disk, partition=0).usb_type)
self.ui.imager_total_size.setText(usb.bytes2human(int(self.imager_usb_detail(config.imager_usb_disk, partition=0).total_size))) # self.ui.imager_total_size.setText(usb.bytes2human(int(self.imager_usb_detail(config.imager_usb_disk, partition=0).total_size)))
#
if platform.system() == "Linux": # if platform.system() == "Linux":
self.ui.label_imager_uuid.setText("Disk Model:") # self.ui.label_imager_uuid.setText("Disk Model:")
self.ui.imager_uuid.setText(str(self.imager_usb_detail(config.imager_usb_disk, partition=0).model)) # self.ui.imager_uuid.setText(str(self.imager_usb_detail(config.imager_usb_disk, partition=0).model))
else: # else:
self.ui.imager_uuid.setText(self.imager_usb_detail(config.imager_usb_disk, partition=0).model) # self.ui.imager_uuid.setText(self.imager_usb_detail(config.imager_usb_disk, partition=0).model)
def imager_list_usb(self, partition=1): def imager_list_usb(self, partition=1):
""" """

@ -27,8 +27,8 @@ def install_distro():
:return: :return:
""" """
usb_mount = config.usb_mount usb_mount = config.usb_mount
install_dir = os.path.join(usb_mount, "multibootusb", iso_basename(config.iso_link)) install_dir = os.path.join(usb_mount, "multibootusb", iso_basename(config.image_path))
_iso_file_list = iso.iso_file_list(config.iso_link) _iso_file_list = iso.iso_file_list(config.image_path)
if not os.path.exists(os.path.join(usb_mount, "multibootusb")): if not os.path.exists(os.path.join(usb_mount, "multibootusb")):
log("Copying multibootusb directory to " + usb_mount) log("Copying multibootusb directory to " + usb_mount)
@ -42,59 +42,59 @@ def install_distro():
with open(os.path.join(install_dir, "iso_file_list.cfg"), 'w') as f: with open(os.path.join(install_dir, "iso_file_list.cfg"), 'w') as f:
for file_path in _iso_file_list: for file_path in _iso_file_list:
f.write(file_path + "\n") f.write(file_path + "\n")
log("Installing " + iso_name(config.iso_link) + " on " + install_dir) log("Installing " + iso_name(config.image_path) + " on " + install_dir)
if config.distro == "opensuse": if config.distro == "opensuse":
iso.iso_extract_file(config.iso_link, install_dir, 'boot') iso.iso_extract_file(config.image_path, install_dir, 'boot')
status_text = "Copying ISO..." status_text = "Copying ISO..."
if platform.system() == "Windows": if platform.system() == "Windows":
subprocess.call(["xcopy", config.iso_link, usb_mount], shell=True) # Have to use xcopy as python file copy is dead slow. subprocess.call(["xcopy", config.image_path, usb_mount], shell=True) # Have to use xcopy as python file copy is dead slow.
elif platform.system() == "Linux": elif platform.system() == "Linux":
log("Copying " + config.iso_link + " to " + usb_mount) log("Copying " + config.image_path + " to " + usb_mount)
shutil.copy(config.iso_link, usb_mount) shutil.copy(config.image_path, usb_mount)
elif config.distro == "Windows" or config.distro == "alpine" or config.distro == 'pc-unlocker': elif config.distro == "Windows" or config.distro == "alpine" or config.distro == 'pc-unlocker':
log("Extracting iso to " + usb_mount) log("Extracting iso to " + usb_mount)
iso_extract_full(config.iso_link, usb_mount) iso_extract_full(config.image_path, usb_mount)
elif config.distro == "trinity-rescue": elif config.distro == "trinity-rescue":
iso.iso_extract_file(config.iso_link, usb_mount, '*trk3') iso.iso_extract_file(config.image_path, usb_mount, '*trk3')
elif config.distro == "ipfire": elif config.distro == "ipfire":
iso.iso_extract_file(config.iso_link, usb_mount, '*.tlz') iso.iso_extract_file(config.image_path, usb_mount, '*.tlz')
iso.iso_extract_file(config.iso_link, usb_mount, 'distro.img') iso.iso_extract_file(config.image_path, usb_mount, 'distro.img')
iso.iso_extract_file(config.iso_link, install_dir, 'boot') iso.iso_extract_file(config.image_path, install_dir, 'boot')
elif config.distro == "zenwalk": elif config.distro == "zenwalk":
config.status_text = "Copying ISO..." config.status_text = "Copying ISO..."
iso.iso_extract_file(config.iso_link, install_dir, "kernel") iso.iso_extract_file(config.image_path, install_dir, "kernel")
copy_iso(config.iso_link, install_dir) copy_iso(config.image_path, install_dir)
elif config.distro == "salix-live": elif config.distro == "salix-live":
# iso.iso_extract_file(config.iso_link, install_dir, "boot") # iso.iso_extract_file(config.image_path, install_dir, "boot")
iso.iso_extract_file(config.iso_link, install_dir, '*syslinux') iso.iso_extract_file(config.image_path, install_dir, '*syslinux')
iso.iso_extract_file(config.iso_link, install_dir, '*menus') iso.iso_extract_file(config.image_path, install_dir, '*menus')
iso.iso_extract_file(config.iso_link, install_dir, '*vmlinuz') iso.iso_extract_file(config.image_path, install_dir, '*vmlinuz')
iso.iso_extract_file(config.iso_link, install_dir, '*initrd*') iso.iso_extract_file(config.image_path, install_dir, '*initrd*')
iso.iso_extract_file(config.iso_link, usb_mount, '*modules') iso.iso_extract_file(config.image_path, usb_mount, '*modules')
iso.iso_extract_file(config.iso_link, usb_mount, '*packages') iso.iso_extract_file(config.image_path, usb_mount, '*packages')
iso.iso_extract_file(config.iso_link, usb_mount, '*optional') iso.iso_extract_file(config.image_path, usb_mount, '*optional')
iso.iso_extract_file(config.iso_link, usb_mount, '*liveboot') iso.iso_extract_file(config.image_path, usb_mount, '*liveboot')
#iso.iso_extract_full(config.iso_link, usb_mount) #iso.iso_extract_full(config.image_path, usb_mount)
config.status_text = "Copying ISO..." config.status_text = "Copying ISO..."
copy_iso(config.iso_link, install_dir) copy_iso(config.image_path, install_dir)
elif config.distro == 'sgrubd2': elif config.distro == 'sgrubd2':
copy_iso(config.iso_link, install_dir) copy_iso(config.image_path, install_dir)
elif config.distro == 'alt-linux': elif config.distro == 'alt-linux':
iso.iso_extract_file(config.iso_link, install_dir, '-xr!*rescue') iso.iso_extract_file(config.image_path, install_dir, '-xr!*rescue')
iso.iso_extract_file(config.iso_link, config.usb_mount, 'rescue') iso.iso_extract_file(config.image_path, config.usb_mount, 'rescue')
elif config.distro == "generic": elif config.distro == "generic":
#with open(os.path.join(install_dir, "generic.cfg"), "w") as f: #with open(os.path.join(install_dir, "generic.cfg"), "w") as f:
# f.write(os.path.join(isolinux_bin_dir(config.iso_link), "generic") + ".bs") # f.write(os.path.join(isolinux_bin_dir(config.image_path), "generic") + ".bs")
iso_extract_full(config.iso_link, usb_mount) iso_extract_full(config.image_path, usb_mount)
elif config.distro == 'grub4dos': elif config.distro == 'grub4dos':
iso_extract_full(config.iso_link, usb_mount) iso_extract_full(config.image_path, usb_mount)
elif config.distro == 'ReactOS': elif config.distro == 'ReactOS':
iso_extract_full(config.iso_link, usb_mount) iso_extract_full(config.image_path, usb_mount)
elif config.distro == 'grub4dos_iso' or config.distro == 'raw_iso': elif config.distro == 'grub4dos_iso' or config.distro == 'raw_iso':
copy_iso(config.iso_link, install_dir) copy_iso(config.image_path, install_dir)
else: else:
iso.iso_extract_full(config.iso_link, install_dir) iso.iso_extract_full(config.image_path, install_dir)
if platform.system() == 'Linux': if platform.system() == 'Linux':
log('ISO extracted successfully. Sync is in progress...') log('ISO extracted successfully. Sync is in progress...')
@ -134,13 +134,14 @@ def install_progress():
thrd = threading.Thread(target=install_distro, name="install_progress") thrd = threading.Thread(target=install_distro, name="install_progress")
# thrd.daemon() # thrd.daemon()
# install_size = usb_size_used / 1024 # install_size = usb_size_used / 1024
install_size = iso_size(config.iso_link) / 1024 install_size = iso_size(config.image_path) / 1024
final_size = (usb_size_used + iso_size(config.iso_link)) + config.persistence final_size = (usb_size_used + iso_size(config.image_path)) + config.persistence
thrd.start() thrd.start()
pbar = progressbar.ProgressBar(maxval=100).start() # bar = progressbar.ProgressBar(redirect_stdout=True) pbar = progressbar.ProgressBar(maxval=100).start() # bar = progressbar.ProgressBar(redirect_stdout=True)
while thrd.is_alive(): while thrd.is_alive():
current_size = details(config.usb_disk)['size_used'] current_size = details(config.usb_disk)['size_used']
percentage = int((current_size / final_size) * 100) percentage = int((current_size / final_size) * 100)
# log("Install at " + str(percentage) + "%")
if percentage > 100: if percentage > 100:
percentage = 100 percentage = 100
config.percentage = percentage config.percentage = percentage
@ -157,29 +158,29 @@ def install_patch():
if platform.system() == 'Linux': # Need to syn under Linux. Otherwise, USB disk becomes random read only. if platform.system() == 'Linux': # Need to syn under Linux. Otherwise, USB disk becomes random read only.
os.system('sync') os.system('sync')
iso_cfg_ext_dir = os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir") iso_cfg_ext_dir = os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir")
isolinux_path = os.path.join(iso_cfg_ext_dir, isolinux_bin_path(config.iso_link)) isolinux_path = os.path.join(iso_cfg_ext_dir, isolinux_bin_path(config.image_path))
iso_linux_bin_dir = isolinux_bin_dir(config.iso_link) iso_linux_bin_dir = isolinux_bin_dir(config.image_path)
config.syslinux_version = isolinux_version(isolinux_path) config.syslinux_version = isolinux_version(isolinux_path)
iso_file_list = iso.iso_file_list(config.iso_link) iso_file_list = iso.iso_file_list(config.image_path)
os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link), isolinux_bin_dir(config.iso_link)) os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path), isolinux_bin_dir(config.image_path))
if any("makeboot.sh" in s.lower() for s in iso_file_list): if any("makeboot.sh" in s.lower() for s in iso_file_list):
for module in os.listdir(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link), for module in os.listdir(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path),
isolinux_bin_dir(config.iso_link))): isolinux_bin_dir(config.image_path))):
if module.endswith(".c32"): if module.endswith(".c32"):
if os.path.exists(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link), if os.path.exists(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path),
isolinux_bin_dir(config.iso_link), module)): isolinux_bin_dir(config.image_path), module)):
try: try:
os.remove(os.path.join(config.usb_mount, "multibootusb", os.remove(os.path.join(config.usb_mount, "multibootusb",
iso_basename(config.iso_link), isolinux_bin_dir(config.iso_link), module)) iso_basename(config.image_path), isolinux_bin_dir(config.image_path), module))
log("Copying " + module) log("Copying " + module)
log((resource_path( log((resource_path(
os.path.join(multibootusb_host_dir(), "syslinux", "modules", config.syslinux_version, module)), os.path.join(multibootusb_host_dir(), "syslinux", "modules", config.syslinux_version, module)),
os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link), os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path),
isolinux_bin_dir(config.iso_link), module))) isolinux_bin_dir(config.image_path), module)))
shutil.copy(resource_path( shutil.copy(resource_path(
os.path.join(multibootusb_host_dir(), "syslinux", "modules", config.syslinux_version, module)), os.path.join(multibootusb_host_dir(), "syslinux", "modules", config.syslinux_version, module)),
os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link), os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path),
isolinux_bin_dir(config.iso_link), module)) isolinux_bin_dir(config.image_path), module))
except Exception as err: except Exception as err:
log(err) log(err)
log("Could not copy " + module) log("Could not copy " + module)
@ -188,5 +189,5 @@ def install_patch():
if __name__ == '__main__': if __name__ == '__main__':
config.iso_link = '../../../DISTROS/2016/slitaz-4.0.iso' config.image_path = '../../../DISTROS/2016/slitaz-4.0.iso'
install_distro() install_distro()

@ -158,7 +158,7 @@ def isolinux_version(isolinux_bin_path):
if re.search(r'isolinux ', strin, re.I): if re.search(r'isolinux ', strin, re.I):
for number in version: for number in version:
if re.search(r'isolinux ' + number, strin, re.I): if re.search(r'isolinux ' + number, strin, re.I):
log("\n\nFound syslinux version " + number + "\n\n") log("\nFound syslinux version " + number + "\n")
return str(number) return str(number)
@ -200,6 +200,9 @@ def iso_file_path(iso_link, file_name):
:param file_name: file name to be checked :param file_name: file name to be checked
:return: Path to file as string :return: Path to file as string
""" """
assert iso_link
assert file_name
file_path = False file_path = False
iso_file_list = _7zip.list_iso(iso_link) iso_file_list = _7zip.list_iso(iso_link)
for f in iso_file_list: for f in iso_file_list:

@ -160,7 +160,7 @@ class ISO9660:
self.rripOffset = rripNode.offset self.rripOffset = rripNode.offset
#gen.log ("RRIP: rrip_offset %d"%(self.rripOffset)) #gen.log ("RRIP: rrip_offset %d"%(self.rripOffset))
else: else:
gen.log (" This disc don't support RRIP") gen.log ("This ISO doesn't support RRIP")
self.rootDir = root_dir self.rootDir = root_dir
# Rrip extension # Rrip extension

@ -43,18 +43,18 @@ def cli_install_distro():
if usb.is_block(config.usb_disk) is False: if usb.is_block(config.usb_disk) is False:
log(config.usb_disk, 'is not a valid device partition...') log(config.usb_disk, 'is not a valid device partition...')
exit(1) exit(1)
elif integrity(config.iso_link) is not True: elif integrity(config.image_path) is not True:
log(config.iso_link, ' failed to pass integrity check...') log(config.image_path, ' failed to pass integrity check...')
exit(1) exit(1)
elif size_not_enough(config.iso_link, config.usb_disk) is True: elif size_not_enough(config.image_path, config.usb_disk) is True:
log(config.usb_disk, 'does not have enough space...') log(config.usb_disk, 'does not have enough space...')
else: else:
prepare_mbusb_host_dir() prepare_mbusb_host_dir()
extract_cfg_file(config.iso_link) extract_cfg_file(config.image_path)
_distro = distro(iso_cfg_ext_dir(), config.iso_link) _distro = distro(iso_cfg_ext_dir(), config.image_path)
log('Detected distro type is', _distro) log('Detected distro type is', _distro)
if _distro is not None: if _distro is not None:
log('\nSelected ISO is :', quote(iso_name(config.iso_link))) log('\nSelected ISO is :', quote(iso_name(config.image_path)))
log('Selected target device is:', quote(config.usb_disk), '\n') log('Selected target device is:', quote(config.usb_disk), '\n')
log('Please confirm the option.') log('Please confirm the option.')
log('Y/y/Yes/yes/YES or N/n/No/no/NO') log('Y/y/Yes/yes/YES or N/n/No/no/NO')
@ -62,11 +62,11 @@ def cli_install_distro():
config.distro = _distro config.distro = _distro
copy_mbusb_dir_usb(config.usb_disk) copy_mbusb_dir_usb(config.usb_disk)
install_progress() install_progress()
syslinux_distro_dir(config.usb_disk, config.iso_link, _distro) syslinux_distro_dir(config.usb_disk, config.image_path, _distro)
syslinux_default(config.usb_disk) syslinux_default(config.usb_disk)
update_distro_cfg_files(config.iso_link, config.usb_disk, _distro) update_distro_cfg_files(config.image_path, config.usb_disk, _distro)
else: else:
log('Sorry', iso_name(config.iso_link), 'is not supported at the moment\n' log('Sorry', iso_name(config.image_path), 'is not supported at the moment\n'
'Please report tissue at https://github.com/mbusb/multibootusb/issues') 'Please report tissue at https://github.com/mbusb/multibootusb/issues')

@ -13,14 +13,17 @@ import signal
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
import subprocess import subprocess
import time import time
from scripts.gui.ui_multibootusb import Ui_Dialog from scripts.gui.ui_multibootusb import Ui_MainWindow
from scripts.gui.ui_about import Ui_About
from . import usb from . import usb
from .gen import * from .gen import *
from .install import * from .install import *
from .uninstall_distro import * from .uninstall_distro import *
from .syslinux import * from .syslinux import *
from .distro import * from .distro import *
from .qemu import *
from .iso import * from .iso import *
#from .imager import *
from .imager import Imager, dd_linux, dd_win from .imager import Imager, dd_linux, dd_win
from . import persistence from . import persistence
from . import config from . import config
@ -28,173 +31,198 @@ from . import admin
from . import qemu from . import qemu
from .update_cfg_file import update_distro_cfg_files from .update_cfg_file import update_distro_cfg_files
class AppGui(qemu.Qemu, Imager, QtWidgets.QMainWindow, Ui_MainWindow):
class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
""" """
Main multibootusb GUI manipulation class. Main multibootusb GUI manipulation class.
""" """
def __init__(self): def __init__(self):
QtWidgets.QDialog.__init__(self) QtWidgets.QMainWindow.__init__(self)
self.ui = Ui_Dialog() self.ui = Ui_MainWindow()
self.ui.setupUi(self) self.ui.setupUi(self)
self.ui.tabWidget.setCurrentIndex(0) self.ui.tabWidget.setCurrentIndex(0)
# self.qemu = Qemu()
self.ui.label_persistence_value.setVisible(False) self.ui.label_persistence_value.setVisible(False)
self.ui.label_persistence.setVisible(False) self.ui.label_persistence.setVisible(False)
self.ui.slider_persistence.setVisible(False) self.ui.slider_persistence.setVisible(False)
self.ui.label_imager_disk_label.setVisible(False) config.usb_disk = None
self.ui.label_imager_total_size.setVisible(False) config.image_path = None
self.ui.label_imager_uuid.setVisible(False)
self.ui.label_usb_dev.setVisible(False)
self.ui.label_usb_vendor.setVisible(False)
self.ui.label_usb_model.setVisible(False)
self.ui.label_usb_size.setVisible(False)
self.ui.label_usb_mount.setVisible(False)
self.ui.imager_bootable.setVisible(False)
self.ui.imager_iso_size.setVisible(False)
# Main Tab # Main Tab
self.ui.checkBox_all_drives.clicked.connect(self.add_device) self.ui.checkbox_all_drives.setVisible(False)
self.ui.detect_usb.clicked.connect(self.onRefereshClick) # FIXME self.ui.checkbox_all_drives.clicked.connect(self.add_device)
self.ui.close.clicked.connect(self.on_close_Click) self.ui.button_detect_drives.clicked.connect(self.onRefreshClick)
self.ui.browse_iso.clicked.connect(self.browse_iso) self.ui.action_Quit.triggered.connect(self.on_close_Click)
self.ui.comboBox.activated[str].connect(self.onComboChange) self.ui.action_About.triggered.connect(self.onAboutClick)
# self.ui.create.clicked.connect(self.update_progress) self.ui.button_browse_image.clicked.connect(self.browse_iso)
self.ui.create.clicked.connect(self.onCreateClick) # self.ui.combo_drives.activated[str].connect(self.onComboChange)
self.ui.combo_drives.currentIndexChanged.connect(self.onComboChange)
self.ui.button_install_distro.clicked.connect(self.onCreateClick)
self.ui.button_uninstall_distro.clicked.connect(self.OnUninstallClick)
self.ui.slider_persistence.valueChanged.connect(self.update_slider_text) self.ui.slider_persistence.valueChanged.connect(self.update_slider_text)
self.ui.uninstall.clicked.connect(self.OnUninstallClick) # self.ui.slider_persistence.sliderReleased.connect(self.ui_update_persistence)
# ISO Imager Tab # ISO Imager Tab
self.ui.pushButton.clicked.connect(self.on_Imager_Browse_iso_Click) self.ui.button_write_image_to_disk.clicked.connect(self.dd_write)
self.ui.comboBox_2.activated[str].connect(self.onImagerComboChange)
self.ui.pushbtn_imager_refreshusb.clicked.connect(self.onRefereshClick)
self.ui.imager_close.clicked.connect(self.on_close_Click)
self.ui.imager_write.clicked.connect(self.dd_write)
# Syslinux Tab # Syslinux Tab
self.ui.install_syslinux.clicked.connect(self.onInstall_syslinuxClick) self.ui.button_install_syslinux.clicked.connect(self.onInstall_syslinuxClick)
self.ui.edit_syslinux.clicked.connect(self.onedit_syslinux) self.ui.button_edit_syslinux.clicked.connect(self.onedit_syslinux)
# QEMU Tab # QEMU Tab
self.ui.browse_iso_qemu.clicked.connect(self.on_Qemu_Browse_iso_Click)
self.ui.boot_iso_qemu.clicked.connect(self.on_Qemu_Boot_iso_Click) self.ui.boot_iso_qemu.clicked.connect(self.on_Qemu_Boot_iso_Click)
self.ui.boot_usb_qemu.clicked.connect(lambda: self.on_Qemu_Boot_usb_Click(str(self.ui.comboBox.currentText()))) self.ui.boot_usb_qemu.clicked.connect(self.on_Qemu_Boot_usb_Click)
# self.ui.tabWidget.removeTab(3) # self.ui.combo_iso_boot_ram.activated[str].connect(self.qemu_iso_ram)
# self.ui.combo_usb_boot_ram.activated[str].connect(self.qemu_usb_ram)
# self.ui.boot_usb_qemu.clicked.connect(lambda: self.on_Qemu_Boot_usb_Click(str(self.ui.combo_drives.currentText())))
# Update progressbar and status (Main ISO install) # Update progressbar and status (Main ISO install)
self.progress_thread_install = GuiInstallProgress() self.progress_thread_install = GuiInstallProgress()
self.progress_thread_install.finished.connect(self.install_syslinux) self.progress_thread_install.finished.connect(self.install_syslinux)
self.progress_thread_install.update.connect(self.ui.progressBar.setValue) self.progress_thread_install.update.connect(self.ui.progressbar.setValue)
self.progress_thread_install.status.connect(self.ui.status.setText) self.progress_thread_install.status.connect(self.ui.statusbar.showMessage)
# Update progressbar and status (Uninstall from previous install) # Update progressbar and status (Uninstall from previous install)
self.progress_thread_uninstall = GuiUninstallProgress() self.progress_thread_uninstall = GuiUninstallProgress()
self.progress_thread_uninstall.finished.connect(self.uninstall_sys_file_update) self.progress_thread_uninstall.finished.connect(self.uninstall_sys_file_update)
self.progress_thread_uninstall.update.connect(self.ui.progressBar.setValue) self.progress_thread_uninstall.update.connect(self.ui.progressbar.setValue)
self.progress_thread_uninstall.status.connect(self.ui.status.setText) self.progress_thread_uninstall.status.connect(self.ui.statusbar.showMessage)
# Update progressbar and status (dd ISO) # Update progressbar and status (dd ISO)
self.progress_thread_dd = DD_Progress() self.progress_thread_dd = DD_Progress()
self.progress_thread_dd.update.connect(self.ui.imager_progressbar.setValue) self.progress_thread_dd.update.connect(self.ui.progressbar.setValue)
self.progress_thread_dd.finished.connect(self.dd_finished) self.progress_thread_dd.finished.connect(self.dd_finished)
self.progress_thread_dd.status.connect(self.ui.imager_label_status.setText) self.progress_thread_dd.status.connect(self.ui.statusbar.showMessage)
self.add_device() # FIXME
# self.add_device()
prepare_mbusb_host_dir() prepare_mbusb_host_dir()
def add_device(self): # def add_device(self):
""" # """
Adds list of available USB devices to GUI combobox. # Adds list of available USB devices to GUI combobox.
:return: # :return:
""" # """
self.ui.comboBox.clear() # self.ui.combo_drives.clear()
self.ui.comboBox_2.clear() # if self.ui.checkbox_all_drives.isChecked():
if self.ui.checkBox_all_drives.isChecked(): # detected_device = usb.list_devices(partition=1, fixed=True)
detected_device = usb.list(partition=1, fixed=True) # else:
else: # detected_device = usb.list_devices()
detected_device = usb.list() # if bool(detected_device):
if bool(detected_device): # for device in detected_device:
for device in detected_device: # self.ui.combo_drives.addItem(str(device))
self.ui.comboBox.addItem(str(device)) # # if self.ui.combo_drives.currentText():
if self.ui.comboBox.currentText(): # # self.onComboChange()
self.onComboChange() #
# # FIXME
imager_detected_device = self.imager_list_usb(partition=0) # # imager_detected_device = Imager.imager_list_usb(partition=0)
if bool(imager_detected_device): # # if bool(imager_detected_device):
for disk in imager_detected_device: # # for disk in imager_detected_device:
self.ui.comboBox_2.addItem(str(disk)) # # self.ui.comboBox_2.addItem(str(disk))
self.onImagerComboChange() # # self.onImagerComboChange()
def onAboutClick(self):
about = QtWidgets.QDialog()
about.ui = Ui_About()
about.ui.setupUi(about)
about.setAttribute(QtCore.Qt.WA_DeleteOnClose)
about.setWindowTitle("About MultiBootUSB - " + mbusb_version())
about.setWindowIcon(QtGui.QIcon(resource_path(os.path.join("data", "tools", "multibootusb.png"))))
about.ui.button_close.clicked.connect(about.close)
about.exec_()
def onComboChange(self): def onComboChange(self):
""" """
Detects and updates GUI with populated USB device details. Detects and updates GUI with populated USB device details.
:return: :return:
""" """
self.ui.listWidget.clear() self.ui.installed_distros.clear()
config.usb_disk = str(self.ui.comboBox.currentText()) config.usb_disk = str(self.ui.combo_drives.currentText())
config.imager_usb_disk = str(self.ui.comboBox_2.currentText()) config.imager_usb_disk = str(self.ui.combo_drives.currentText())
if bool(config.usb_disk):
self.update_gui_oncombobox(config.usb_disk) if config.usb_disk:
log("Selected device " + config.usb_disk)
config.persistence_max_size = persistence.max_disk_persistence(config.usb_disk)
self.usb_details = usb.details(config.usb_disk)
config.usb_mount = self.usb_details['mount_point']
self.ui.usb_dev.setText(config.usb_disk)
# self.label.setFont(QtGui.QFont("Times",weight=QtGui.QFont.Bold))
if platform.system() == 'Windows':
self.ui.label_usb_vendor.setText("FileSystem:")
self.ui.usb_vendor.setText(self.usb_details['file_system'])
self.ui.label_usb_model.setText("Label: ")
self.ui.usb_model.setText(self.usb_details['label'])
else:
self.ui.usb_vendor.setText(self.usb_details['vendor'])
self.ui.usb_model.setText(self.usb_details['model'])
self.ui.usb_size.setText(str(usb.bytes2human(self.usb_details['size_total'])))
self.ui.usb_mount.setText(self.usb_details['mount_point'])
self.update_list_box(config.usb_disk)
self.ui_update_persistence()
else: else:
self.ui.usb_dev.clear()
self.ui.usb_vendor.clear()
self.ui.usb_model.clear()
self.ui.usb_size.clear()
self.ui.usb_mount.clear()
log("No USB disk found...") log("No USB disk found...")
def onRefereshClick(self):
def onRefreshClick(self):
""" """
Calls function to detect USB devices. Calls function to detect USB devices.
:return: :return:
""" """
self.ui.comboBox.clear() self.ui.combo_drives.clear()
self.ui.comboBox_2.clear() # self.ui.imager_disk_label.clear()
self.ui.imager_disk_label.clear() # self.ui.label_imager_disk_label.setVisible(False)
self.ui.label_imager_disk_label.setVisible(False) # self.ui.imager_total_size.clear()
self.ui.imager_total_size.clear() # self.ui.label_imager_total_size.setVisible(False)
self.ui.label_imager_total_size.setVisible(False) # self.ui.imager_uuid.clear()
self.ui.imager_uuid.clear() # self.ui.label_imager_uuid.setVisible(False)
self.ui.label_imager_uuid.setVisible(False) # self.ui.usb_dev.clear()
self.ui.usb_dev.clear() # self.ui.label_usb_dev.setVisible(False)
self.ui.label_usb_dev.setVisible(False) # self.ui.usb_vendor.clear()
self.ui.usb_vendor.clear() # self.ui.label_usb_vendor.setVisible(False)
self.ui.label_usb_vendor.setVisible(False) # self.ui.usb_model.clear()
self.ui.usb_model.clear() # self.ui.label_usb_model.setVisible(False)
self.ui.label_usb_model.setVisible(False) # self.ui.usb_size.clear()
self.ui.usb_size.clear() # self.ui.label_usb_size.setVisible(False)
self.ui.label_usb_size.setVisible(False) # self.ui.usb_mount.clear()
self.ui.usb_mount.clear() # self.ui.label_usb_mount.setVisible(False)
self.ui.label_usb_mount.setVisible(False)
# self.add_device()
self.add_device() self.ui.combo_drives.clear()
if self.ui.checkbox_all_drives.isChecked():
def update_gui_oncombobox(self, usb_disk): detected_devices = usb.list_devices(partition=1, fixed=True)
self.usb_details = usb.details(usb_disk)
config.usb_mount = self.usb_details['mount_point']
self.ui.usb_dev.setText(usb_disk)
self.ui.label_imager_disk_label.setVisible(True)
self.ui.label_imager_total_size.setVisible(True)
self.ui.label_imager_uuid.setVisible(True)
self.ui.label_usb_dev.setVisible(True)
self.ui.label_usb_vendor.setVisible(True)
self.ui.label_usb_model.setVisible(True)
self.ui.label_usb_size.setVisible(True)
self.ui.label_usb_mount.setVisible(True)
# self.label.setFont(QtGui.QFont("Times",weight=QtGui.QFont.Bold))
if platform.system() == 'Windows':
self.ui.label_usb_vendor.setText("FileSystem:")
self.ui.usb_vendor.setText(self.usb_details['file_system'])
self.ui.label_usb_model.setText("Label: ")
self.ui.usb_model.setText(self.usb_details['label'])
else: else:
self.ui.usb_vendor.setText(self.usb_details['vendor']) detected_devices = usb.list_devices()
self.ui.usb_model.setText(self.usb_details['model']) if detected_devices:
self.ui.usb_size.setText(str(usb.bytes2human(self.usb_details['size_total']))) for device in detected_devices:
self.ui.usb_mount.setText(self.usb_details['mount_point']) if platform.system() == 'Windows':
self.update_list_box(usb_disk) self.ui.combo_drives.addItem(str(device))
else:
self.ui.combo_drives.addItem(str(device["DEVNAME"]))
# if self.ui.combo_drives.currentText():
# self.onComboChange()
self.ui.combo_drives.setCurrentIndex(0)
# FIXME
# imager_detected_device = Imager.imager_list_usb(partition=0)
# if bool(imager_detected_device):
# for disk in imager_detected_device:
# self.ui.comboBox_2.addItem(str(disk))
# self.onImagerComboChange()
def update_list_box(self, usb_disk): def update_list_box(self, usb_disk):
""" """
@ -205,55 +233,77 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
distro_list = install_distro_list() distro_list = install_distro_list()
#sys_cfg_file = os.path.join(str(usb_mount), "multibootusb", "syslinux.cfg") #sys_cfg_file = os.path.join(str(usb_mount), "multibootusb", "syslinux.cfg")
if distro_list is not None: if distro_list is not None:
self.ui.listWidget.clear() self.ui.installed_distros.clear()
for name in distro_list: for name in distro_list:
self.ui.listWidget.addItem(name) self.ui.installed_distros.addItem(name)
else: else:
if config.usb_mount == 'No_Mount': if config.usb_mount == 'No_Mount':
log("UBS disk is not mounted and can't update list widget...") log("USB disk is not mounted and can't update list widget...")
#QtWidgets.QMessageBox.information(self, 'No Install...', #QtWidgets.QMessageBox.information(self, 'No Install...',
# 'syslinux.cfg does not exist for updating list widget.') # 'syslinux.cfg does not exist for updating list widget.')
def browse_iso(self): def browse_iso(self):
if str(self.ui.lineEdit.text()): if str(self.ui.image_path.text()):
self.ui.lineEdit.clear() self.ui.image_path.clear()
config.iso_link = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', '', 'ISO Files (*.iso)')[0] config.image_path = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', '', 'ISO Files (*.iso)')[0]
if config.iso_link: if config.image_path:
if platform.system() == "Windows": if platform.system() == "Windows":
if "/" in config.iso_link: if "/" in config.image_path:
config.iso_link = config.iso_link.strip().replace("/", "\\") config.image_path = config.image_path.strip().replace("/", "\\")
self.ui.lineEdit.insert(str(config.iso_link))
if os.path.exists(config.iso_link): self.ui.image_path.insert(str(config.image_path))
self.ui.label_image_size_value.setText(str(bytes2human(iso_size(config.image_path))))
self.ui.label_image_size_value.setVisible(True)
self.ui.label_image_bootable_value.setText(str(is_bootable(config.image_path)))
self.ui.label_image_bootable_value.setVisible(True)
if os.path.exists(config.image_path):
clean_iso_cfg_ext_dir(os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir")) # Need to be cleaned. clean_iso_cfg_ext_dir(os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir")) # Need to be cleaned.
extract_cfg_file(config.iso_link) extract_cfg_file(config.image_path)
config.distro = distro(iso_cfg_ext_dir(), config.iso_link) # Detect supported distro config.distro = distro(iso_cfg_ext_dir(), config.image_path) # Detect supported distro
self.ui.label_image_type_value.setText(str(config.distro))
self.ui.label_image_type_value.setVisible(True)
if config.distro: if config.distro:
per_availability = persistence.persistence_distro(config.distro, config.usb_disk, config.iso_link)[0] per_availability = persistence.persistence_distro(config.distro, config.image_path)
per_max_size = persistence.persistence_distro(config.distro, config.usb_disk, config.iso_link)[1]
if per_availability is not None: if per_availability is not None:
self.ui.label_persistence_value.setVisible(True) config.persistence_available = True
self.ui.label_persistence.setVisible(True) if config.usb_disk:
self.ui.slider_persistence.setVisible(True) per_max_size = persistence.max_disk_persistence(config.usb_disk)
self.ui.label_persistence_value.setEnabled(True) config.persistence_max_size = per_max_size
self.ui.label_persistence.setEnabled(True) log('Persistence Max Size: ' + str(bytes2human(per_max_size)))
self.ui.slider_persistence.setEnabled(True)
self.ui.slider_persistence.setTickInterval(10)
self.ui.slider_persistence.setSingleStep(10)
ui_per_max_size = per_max_size / 1024 / 1024
# config.persistence = per_max_size
self.ui.slider_persistence.setMaximum(ui_per_max_size)
log('Persistence Max Size: ' + str(bytes2human(per_max_size)))
else: else:
self.ui.label_persistence_value.setEnabled(False) config.persistence_available = False
self.ui.label_persistence.setEnabled(False) log('Persistence is not available for ' + iso_name(config.image_path))
self.ui.slider_persistence.setEnabled(False)
self.ui.label_persistence_value.setVisible(False) self.ui_update_persistence()
self.ui.label_persistence.setVisible(False)
self.ui.slider_persistence.setVisible(False)
log('Persistence is not available for ' + iso_name(config.iso_link))
else: else:
log("File not selected...") log("File not selected...")
def ui_update_persistence(self):
log("===== config.persistence_available = " + str(config.persistence_available))
log("===== config.persistence_max_size = " + str(config.persistence_max_size))
log("===== config.persistence = " + str(config.persistence))
if config.persistence_available and config.persistence_max_size:
self.ui.label_persistence_value.setVisible(True)
self.ui.label_persistence.setVisible(True)
self.ui.slider_persistence.setVisible(True)
self.ui.label_persistence_value.setEnabled(True)
self.ui.label_persistence.setEnabled(True)
self.ui.slider_persistence.setEnabled(True)
self.ui.slider_persistence.setTickInterval(10)
self.ui.slider_persistence.setSingleStep(10)
self.ui.slider_persistence.setMaximum(config.persistence_max_size / 1024 / 1024)
# log("===== getMaximum = " + self.ui.slider_persistence.getMaximum()
else:
self.ui.label_persistence_value.setEnabled(False)
self.ui.label_persistence.setEnabled(False)
self.ui.slider_persistence.setEnabled(False)
self.ui.label_persistence_value.setVisible(False)
self.ui.label_persistence.setVisible(False)
self.ui.slider_persistence.setVisible(False)
def update_slider_text(self): def update_slider_text(self):
slide_value = self.ui.slider_persistence.value() * 1024 * 1024 slide_value = self.ui.slider_persistence.value() * 1024 * 1024
self.ui.label_persistence_value.setText(bytes2human(slide_value)) self.ui.label_persistence_value.setText(bytes2human(slide_value))
@ -264,16 +314,16 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
Function to install syslinux on distro directory and on selected USB disks. Function to install syslinux on distro directory and on selected USB disks.
:return: :return:
""" """
self.ui.status.setText(str("Status: Installing Syslinux...")) self.ui.statusbar.showMessage(str("Status: Installing Syslinux..."))
syslinux_distro_dir(config.usb_disk, config.iso_link, config.distro) syslinux_distro_dir(config.usb_disk, config.image_path, config.distro)
syslinux_default(config.usb_disk) syslinux_default(config.usb_disk)
update_distro_cfg_files(config.iso_link, config.usb_disk, config.distro, config.persistence) update_distro_cfg_files(config.image_path, config.usb_disk, config.distro, config.persistence)
self.update_list_box(config.usb_disk) self.update_list_box(config.usb_disk)
if sys.platform.startswith("linux"): if sys.platform.startswith("linux"):
self.ui.status.setText("Status: Sync is in progress...") self.ui.statusbar.showMessage("Status: Sync is in progress...")
os.system('sync') os.system('sync')
self.ui.status.setText("Status: Idle") self.ui.statusbar.showMessage("Status: Idle")
QtWidgets.QMessageBox.information(self, 'Finished...', iso_name(config.iso_link) + ' has been successfully installed.') QtWidgets.QMessageBox.information(self, 'Finished...', iso_name(config.image_path) + ' has been successfully installed.')
config.process_exist = None config.process_exist = None
def onInstall_syslinuxClick(self): def onInstall_syslinuxClick(self):
@ -346,11 +396,11 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
Triggers a function to uninstall a selected distro. Triggers a function to uninstall a selected distro.
:return: :return:
""" """
if self.ui.listWidget.currentItem() is None: if self.ui.installed_distros.currentItem() is None:
log("Please select a distro from the list.") log("Please select a distro from the list.")
QtWidgets.QMessageBox.information(self, 'No selection.', 'Please select a distro from the list.') QtWidgets.QMessageBox.information(self, 'No selection.', 'Please select a distro from the list.')
else: else:
config.uninstall_distro_dir_name = str(self.ui.listWidget.currentItem().text()).strip() config.uninstall_distro_dir_name = str(self.ui.installed_distros.currentItem().text()).strip()
reply = QtWidgets.QMessageBox.question(self, "Review selection...", reply = QtWidgets.QMessageBox.question(self, "Review selection...",
"Are you sure to uninstall " + config.uninstall_distro_dir_name, "Are you sure to uninstall " + config.uninstall_distro_dir_name,
QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
@ -372,9 +422,9 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
update_sys_cfg_file() update_sys_cfg_file()
self.update_list_box(config.usb_mount) self.update_list_box(config.usb_mount)
if sys.platform.startswith("linux"): if sys.platform.startswith("linux"):
self.ui.status.setText("Status: Sync in progress...") self.ui.statusbar.showMessage("Status: Sync in progress...")
os.system('sync') os.system('sync')
self.ui.status.setText("Status: Idle") self.ui.statusbar.showMessage("Status: Idle")
QtWidgets.QMessageBox.information(self, 'Uninstall Complete...', QtWidgets.QMessageBox.information(self, 'Uninstall Complete...',
config.uninstall_distro_dir_name + ' has been successfully removed.') config.uninstall_distro_dir_name + ' has been successfully removed.')
@ -386,50 +436,50 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
:return: :return:
""" """
if not config.usb_disk: if not config.usb_disk:
log("No USB device found.\n\nInsert USB and use Refresh USB button to detect USB.") log("ERROR: No USB device found.")
QtWidgets.QMessageBox.information(self, "No Device...", QtWidgets.QMessageBox.information(self, "No Device...",
"No USB device found.\n\nInsert USB and use Refresh USB button to detect USB.") "No USB device found.\n\nInsert USB and use Refresh USB button to detect USB.")
elif not config.iso_link: elif not config.image_path:
log("No ISO found.\n\nPlease use step 2 to choose an ISO.") log("No ISO selected.")
QtWidgets.QMessageBox.information(self, "No ISO...", "No ISO found.\n\nPlease use step 2 to choose an ISO.") QtWidgets.QMessageBox.information(self, "No ISO...", "No ISO found.\n\nPlease select an ISO.")
elif usb.details(config.usb_disk)['mount_point'] == 'No_Mount': elif usb.details(config.usb_disk)['mount_point'] == 'No_Mount':
log("USB disk is not mounted.\nPlease mount USB disk and press refresh USB button.") log("ERROR: USB disk is not mounted.")
QtWidgets.QMessageBox.information(self, "No Mount...", "USB disk is not mounted.\n" QtWidgets.QMessageBox.information(self, "No Mount...", "USB disk is not mounted.\n"
"Please mount USB disk and press refresh USB button.") "Please mount USB disk and press refresh USB button.")
else: else:
# clean_iso_cfg_ext_dir(os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir")) # Need to be cleaned. # clean_iso_cfg_ext_dir(os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir")) # Need to be cleaned.
# extract_cfg_file(config.iso_link) # Extract files from ISO # extract_cfg_file(config.image_path) # Extract files from ISO
# config.distro = distro(iso_cfg_ext_dir(), config.iso_link) # Detect supported distro # config.distro = distro(iso_cfg_ext_dir(), config.image_path) # Detect supported distro
usb_details = usb.details(config.usb_disk) usb_details = usb.details(config.usb_disk)
log("USB Disk is " + config.usb_disk) log("MultiBoot Install: USB Disk is " + config.usb_disk)
log("USB Label is " + config.usb_label) log("MultiBoot Install: USB Label is " + config.usb_label)
log("USB UUID is " + config.usb_uuid) log("MultiBoot Install: USB UUID is " + config.usb_uuid)
log("USB Mount path is " + config.usb_mount) log("MultiBoot Install: USB Mount path is " + config.usb_mount)
log("Total size of the disk is " + str(usb.bytes2human(usb_details['size_total']))) log("MultiBoot Install: Total size of the disk is " + str(usb.bytes2human(usb_details['size_total'])))
log("Total used size is " + str(usb.bytes2human(usb_details['size_used']))) log("MultiBoot Install: Total used size is " + str(usb.bytes2human(usb_details['size_used'])))
log("Total size left on the disk is " + str(usb.bytes2human(usb_details['size_free']))) log("MultiBoot Install: Total size left on the disk is " + str(usb.bytes2human(usb_details['size_free'])))
log("FileSystem is " + usb_details['file_system']) log("MultiBoot Install: FileSystem is " + usb_details['file_system'])
log("Vendor is " + usb_details['vendor']) log("MultiBoot Install: Vendor is " + usb_details['vendor'])
log("Model is " + usb_details['model']) log("MultiBoot Install: Model is " + usb_details['model'])
log("Name of the ISO file is " + iso_name(config.iso_link)) log("MultiBoot Install: Name of the ISO file is " + iso_name(config.image_path))
if os.path.exists(config.iso_link): if os.path.exists(config.image_path):
self.ui.lineEdit.clear() self.ui.image_path.clear()
if config.distro: if config.distro:
log("Distro type detected: " + config.distro) log("MultiBoot Install: Distro type detected: " + config.distro)
copy_mbusb_dir_usb(config.usb_disk) copy_mbusb_dir_usb(config.usb_disk)
if not os.path.exists(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link))): if not os.path.exists(os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path))):
config.persistence = self.ui.slider_persistence.value() * 1024 * 1024 config.persistence = self.ui.slider_persistence.value() * 1024 * 1024
install_size = iso_size(config.iso_link) + config.persistence log("Persistence chosen is " + str(bytes2human(config.persistence)) + " MB")
log("Persistence chosen is " + str(config.persistence) + " MB") install_size = iso_size(config.image_path) + config.persistence
if install_size >= disk_usage(config.usb_mount).free: if install_size >= disk_usage(config.usb_mount).free:
QtWidgets.QMessageBox.information(self, "No Space.", "No space available on " + log("ERROR: Not enough space available on " + config.usb_disk)
config.usb_disk) QtWidgets.QMessageBox.information(self, "No Space.", "No space available on " + config.usb_disk)
else: else:
reply = QtWidgets.QMessageBox.question(self, 'Review selection...', reply = QtWidgets.QMessageBox.question(self, 'Review selection...',
'Selected USB disk: %s\n' % config.usb_disk + 'Selected USB disk: %s\n' % config.usb_disk +
'USB mount point: %s\n' % config.usb_mount + 'USB mount point: %s\n' % config.usb_mount +
'Selected distro: %s\n\n' % iso_name(config.iso_link) + 'Selected distro: %s\n\n' % iso_name(config.image_path) +
'Proceed with installation?', 'Proceed with installation?',
QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
@ -440,10 +490,10 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
else: else:
QtWidgets.QMessageBox.information(self, 'Already exists...', QtWidgets.QMessageBox.information(self, 'Already exists...',
os.path.basename(config.iso_link) + ' is already installed.') os.path.basename(config.image_path) + ' is already installed.')
else: else:
QtWidgets.QMessageBox.information(self, 'No support...', QtWidgets.QMessageBox.information(self, 'No support...',
'Sorry.\n' + os.path.basename(config.iso_link) + 'Sorry.\n' + os.path.basename(config.image_path) +
' is not supported at the moment.\n' ' is not supported at the moment.\n'
'Please email this issue to feedback.multibootusb@gmail.com') 'Please email this issue to feedback.multibootusb@gmail.com')
@ -455,14 +505,13 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
Re-enable the blocked widgets for newer use. Re-enable the blocked widgets for newer use.
:return: :return:
""" """
self.ui.imager_progressbar.setValue(0) self.ui.progressbar.setValue(0)
self.ui.imager_label_status.setText("Status: Idle") self.ui.statusbar.showMessage("Status: Idle")
self.ui.comboBox_2.setEnabled(True) self.ui.combo_drives.setEnabled(True)
self.ui.pushButton.setEnabled(True) self.ui.button_browse_image.setEnabled(True)
self.ui.imager_write.setEnabled(True) # self.ui.pushbtn_imager_refreshusb.setEnabled(True)
self.ui.pushbtn_imager_refreshusb.setEnabled(True) # self.ui.imager_bootable.setText("Bootable ISO: ")
self.ui.imager_bootable.setText("Bootable ISO: ") # self.ui.imager_iso_size.setText("Image Size: ")
self.ui.imager_iso_size.setText("Image Size: ")
config.process_exist = None config.process_exist = None
msgBox = QtWidgets.QMessageBox() msgBox = QtWidgets.QMessageBox()
@ -477,40 +526,39 @@ class AppGui(qemu.Qemu, Imager, QtWidgets.QDialog, Ui_Dialog):
Function to block the widgets under ISO Imager tab... Function to block the widgets under ISO Imager tab...
:return: :return:
""" """
self.ui.imager_progressbar.setValue(0) self.ui.progressbar.setValue(0)
self.ui.imager_label_status.clear() self.ui.statusbar.showMessage("Status: Idle")
self.ui.lineEdit_3.clear() # FIXME self.ui.lineEdit_3.clear()
self.ui.pushButton.setEnabled(False) self.ui.button_browse_image.setEnabled(False)
self.ui.comboBox_2.setEnabled(False) self.ui.combo_drives.setEnabled(False)
self.ui.pushbtn_imager_refreshusb.setEnabled(False) # FIXME self.ui.pushbtn_imager_refreshusb.setEnabled(False)
self.ui.imager_write.setEnabled(False) status_text = ("Status: Writing " + os.path.basename(config.image_path) + " to " + config.usb_disk)
status_text = ("Status: Writing <b>" + os.path.basename(config.imager_iso_link) + "</b>" + " to " + "<b>" + self.ui.statusbar.showMessage(status_text)
config.imager_usb_disk + "</b>")
self.ui.imager_label_status.setText(status_text)
def dd_quit(self): def dd_quit(self):
self.ui.imager_progressbar.setValue(0) self.ui.progressbar.setValue(0)
self.ui.imager_label_status.clear() self.ui.statusbar.showMessage("Status: Idle")
self.ui.comboBox_2.setEnabled(True) self.ui.combo_drives.setEnabled(True)
self.ui.pushButton.setEnabled(True) self.ui.button_browse_image.setEnabled(True)
QtWidgets.QMessageBox.information(self, 'Failed!', 'Failed writing image.') QtWidgets.QMessageBox.information(self, 'Failed!', 'Failed writing image.')
def dd_write(self): def dd_write(self):
if not config.imager_usb_disk: if not config.usb_disk:
QtWidgets.QMessageBox.information(self, 'No USB...', 'Please Insert USB disk and rerun multibootusb.') QtWidgets.QMessageBox.information(self, 'No USB...', 'Please Insert USB disk and rerun multibootusb.')
elif not config.imager_iso_link: elif not config.image_path:
QtWidgets.QMessageBox.information(self, 'No ISO...', 'Please select an ISO.') QtWidgets.QMessageBox.information(self, 'No ISO...', 'Please select an ISO.')
else: else:
usb_disk_size = int(self.imager_usb_detail(config.imager_usb_disk, partition=0).total_size) imager = Imager()
self.iso_size = os.path.getsize(config.imager_iso_link) usb_disk_size = int(imager.imager_usb_detail(config.usb_disk, partition=0).total_size)
self.iso_size = os.path.getsize(config.image_path)
if self.iso_size >= usb_disk_size: if self.iso_size >= usb_disk_size:
QtWidgets.QMessageBox.information(self, "No enough space on disk.", os.path.basename(config.imager_iso_link) + QtWidgets.QMessageBox.information(self, "No enough space on disk.", os.path.basename(config.image_path) +
" size is larger than the size of " + config.imager_usb_disk) " size is larger than the size of " + config.usb_disk)
else: else:
reply = QtWidgets.QMessageBox.question \ reply = QtWidgets.QMessageBox.question \
(self, 'Review selection', (self, 'Review selection',
'Selected disk: %s\n' % config.imager_usb_disk + 'Selected disk: %s\n' % config.usb_disk +
'Selected image: %s\n\n' % os.path.basename(config.imager_iso_link) + 'Selected image: %s\n\n' % os.path.basename(config.image_path) +
'Proceed with writing image to disk?', 'Proceed with writing image to disk?',
QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) QtWidgets.QMessageBox.Yes|QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No)
@ -563,9 +611,9 @@ class GuiInstallProgress(QtCore.QThread):
self.wait() self.wait()
def run(self): def run(self):
install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link)) install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path))
self.thread = GenericThread(install_progress) self.thread = GenericThread(install_progress)
status_text = "" status_text = "Status: "
self.thread.start() self.thread.start()
while self.thread.isRunning(): while self.thread.isRunning():
if config.status_text.strip(): if config.status_text.strip():
@ -573,13 +621,13 @@ class GuiInstallProgress(QtCore.QThread):
self.update.emit(config.percentage) self.update.emit(config.percentage)
self.status.emit(config.status_text) self.status.emit(config.status_text)
if not self.thread.isFinished() and config.percentage == 100: if not self.thread.isFinished() and config.percentage == 100:
config.status_text = "" config.status_text = "Status: Please wait..."
self.status.emit("Please wait...") self.status.emit("Status: Please wait...")
self.update.emit(100) self.update.emit(100)
self.update.emit(0) self.update.emit(0)
self.status.emit("Installing boot loader...") self.status.emit("Status: Installing boot loader...")
if self.thread.isFinished(): if self.thread.isFinished():
config.status_text = "" config.status_text = ""
@ -695,11 +743,14 @@ def show_admin_info():
def main_gui(): def main_gui():
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
# ui_about = Ui_About()
# ui = Ui_MainWindow()
window = AppGui() window = AppGui()
ui = Ui_Dialog()
window.show() window.show()
window.setWindowTitle("MultiBootUSB - " + mbusb_version()) window.setWindowTitle("MultiBootUSB - " + mbusb_version())
window.setWindowIcon(QtGui.QIcon(resource_path(os.path.join("data", "tools", "multibootusb.png")))) window.setWindowIcon(QtGui.QIcon(resource_path(os.path.join("data", "tools", "multibootusb.png"))))
if platform.system() == 'Linux': if platform.system() == 'Linux':
if os.getuid() != 0: if os.getuid() != 0:
show_admin_info() show_admin_info()

@ -16,40 +16,42 @@ from . import iso
from . import gen from . import gen
from . import config from . import config
def max_disk_persistence(usb_disk):
def persistence_distro(distro, usb_disk, iso_link):
""" """
Function to detect if distro can have persistence option. Detect max persistence value for filesystem on usb_disk
:param distro: Detected distro name. :param usb_disk: Disk filesystem to check
:return: Distro name as string or None otherwise. :return: Max persistence supported (bytes)
""" """
iso_size = iso.iso_size(iso_link) assert usb_disk is not None
fat_max_size = (4096 * 1024 * 1024) fat_max_size = (4096 * 1024 * 1024)
usb_details = usb.details(usb_disk) usb_details = usb.details(usb_disk)
usb_sf = usb_details['file_system']
usb_free_size = usb_details['size_free']
config.usb_uuid = usb_details['uuid'] config.usb_uuid = usb_details['uuid']
config.usb_label = usb_details['label'] config.usb_label = usb_details['label']
if usb_sf == 'vfat' or 'FAT32':
if usb_free_size > fat_max_size: if usb_details['file_system'] in ['vfat', 'FAT32'] and usb_details['size_free'] > fat_max_size:
_max_size = fat_max_size _max_size = fat_max_size
else:
_max_size = usb_free_size
else: else:
_max_size = usb_free_size _max_size = usb_details['size_free']
if distro == "ubuntu":
gen.log("Persistence option is available.") return _max_size
return "ubuntu", _max_size
# FIXME to get debian persistence workable... def persistence_distro(distro, iso_link):
# Able to add successfully but unable to keep persistence data. """
elif distro == "debian" or distro == "debian-install": Function to detect if distro can have persistence option.
gen.log("Persistence option is available.") :param distro: Detected distro name.
return "debian", _max_size :return: Distro name as string or None otherwise.
elif distro == "fedora": """
assert distro is not None
assert iso_link is not None
iso_size = iso.iso_size(iso_link)
if distro in ["ubuntu", "debian", "debian-install", "fedora"]:
gen.log("Persistence option is available.") gen.log("Persistence option is available.")
return "fedora", _max_size return distro
else: else:
return None, None return None
def create_persistence(): def create_persistence():
@ -66,22 +68,22 @@ def create_persistence():
mkfs = 'mkfs.ext3' mkfs = 'mkfs.ext3'
dd = 'dd' dd = 'dd'
persistence_mkfs_cmd = mkfs + ' -F ' + os.path.join(config.usb_mount, 'multibootusb', persistence_mkfs_cmd = mkfs + ' -F ' + os.path.join(config.usb_mount, 'multibootusb',
iso.iso_basename(config.iso_link), iso.iso_basename(config.image_path),
fs_name) fs_name)
elif platform.system() == 'Windows': elif platform.system() == 'Windows':
mkfs = gen.quote(gen.resource_path(os.path.join("data", "tools", "mkfs", "mke2fs.exe"))) mkfs = gen.quote(gen.resource_path(os.path.join("data", "tools", "mkfs", "mke2fs.exe")))
dd = gen.quote(gen.resource_path(os.path.join("data", "tools", "dd", "dd.exe"))) dd = gen.quote(gen.resource_path(os.path.join("data", "tools", "dd", "dd.exe")))
persistence_mkfs_cmd = 'echo y|' + mkfs + ' -b 1024 -L ' + fs_name + ' ' + os.path.join(config.usb_mount, 'multibootusb', persistence_mkfs_cmd = 'echo y|' + mkfs + ' -b 1024 -L ' + fs_name + ' ' + os.path.join(config.usb_mount, 'multibootusb',
iso.iso_basename(config.iso_link), fs_name) iso.iso_basename(config.image_path), fs_name)
if config.distro == 'fedora': if config.distro == 'fedora':
persistence_dd_cmd = dd + ' if=/dev/zero ' \ persistence_dd_cmd = dd + ' if=/dev/zero ' \
'of=' + os.path.join(config.usb_mount, 'multibootusb', 'of=' + os.path.join(config.usb_mount, 'multibootusb',
iso.iso_basename(config.iso_link), 'LiveOS', fs_name) + \ iso.iso_basename(config.image_path), 'LiveOS', fs_name) + \
' bs=1M count=' + str(int(persistence)) ' bs=1M count=' + str(int(persistence))
else: else:
persistence_dd_cmd = dd + ' if=/dev/zero of=' + os.path.join(config.usb_mount, 'multibootusb', persistence_dd_cmd = dd + ' if=/dev/zero of=' + os.path.join(config.usb_mount, 'multibootusb',
iso.iso_basename(config.iso_link), fs_name) +\ iso.iso_basename(config.image_path), fs_name) +\
' bs=1M count=' + str(int(persistence)) ' bs=1M count=' + str(int(persistence))
gen.log('Executing ==>' + persistence_dd_cmd) gen.log('Executing ==>' + persistence_dd_cmd)

@ -13,72 +13,73 @@ import subprocess
import platform import platform
from .admin import adminCmd from .admin import adminCmd
from PyQt5 import QtWidgets from PyQt5 import QtWidgets
from .gui.ui_multibootusb import Ui_Dialog from .gui.ui_multibootusb import Ui_MainWindow
from .gen import * from .gen import *
from . import config
class Qemu(QtWidgets.QDialog, Ui_Dialog): class Qemu(QtWidgets.QMainWindow, Ui_MainWindow):
""" """
ISO and USB booting using QEMU. ISO and USB booting using QEMU.
""" """
def on_Qemu_Browse_iso_Click(self):
"""
Browse and choose an ISO.
:return:
"""
self.ui.lineEdit_2.clear()
qemu = self.check_qemu_exist()
if not qemu is None:
qemu_iso_link = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', "", "ISO Files (*.iso)")[0] def __init__(self):
else: QtWidgets.QMainWindow.__init__(self)
log("QEMU does not exist.\nPlease install qemu package to avail this feature.") self.ui = Ui_MainWindow()
QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu package to avail this feature.') self.ui.setupUi(self)
qemu_iso_link = None
# def on_Qemu_Browse_iso_Click(self):
if not qemu_iso_link is None: # """
self.ui.lineEdit_2.insert(qemu_iso_link) # Browse and choose an ISO.
else: # :return:
log ("File not selected.") # """
# self.ui.lineEdit_2.clear()
#
# qemu = self.check_qemu_exist()
#
# if not qemu is None:
# qemu_iso_link = QtWidgets.QFileDialog.getOpenFileName(self, 'Select an iso...', "", "ISO Files (*.iso)")[0]
# else:
# log("QEMU does not exist.\nPlease install qemu package to avail this feature.")
# QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu package to avail this feature.')
# qemu_iso_link = None
#
# if not qemu_iso_link is None:
# self.ui.lineEdit_2.insert(qemu_iso_link)
# else:
# log ("File not selected.")
def on_Qemu_Boot_iso_Click(self): def on_Qemu_Boot_iso_Click(self):
""" """
Main function to boot a selected ISO. Main function to boot a selected ISO.
:return: :return:
""" """
if not self.ui.lineEdit_2.text(): # if not self.ui.lineEdit_2.text():
QtWidgets.QMessageBox.information(self, 'No ISO...', 'No ISO selected.\n\nPlease choose an iso and click Boot ISO.') if not config.image_path:
QtWidgets.QMessageBox.information(self, 'No ISO...', 'No ISO selected.\n\nPlease choose an ISO first.')
else: else:
qemu = self.check_qemu_exist() qemu = self.check_qemu_exist()
qemu_iso_link = str(self.ui.lineEdit_2.text()) qemu_iso_link = config.image_path
if qemu is None: if not qemu:
log("QEMU does not exist.\nPlease install qemu package to avail this feature.") log("ERROR: ISO Boot: qemu not found!")
QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu to avail this feature.') QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu to use this feature.')
else: else:
ram = self.qemu_iso_ram() ram = self.qemu_iso_ram()
if not ram is None: if ram:
self.ui.lineEdit_2.clear() ram = " -m " + ram
if platform.system() == "Windows":
try:
log("Executing ==> " + qemu + " -cdrom " + str(qemu_iso_link) + " -boot d -m " + ram)
subprocess.Popen(qemu + " -cdrom " + str(qemu_iso_link) + " -boot d -m " + ram, shell=True)
except:
QtWidgets.QMessageBox.information(self, 'Error...', 'Unable to start QEMU.')
else:
log(qemu + ' -m ' + ram + ' -cdrom ' + str(qemu_iso_link) + ' -boot d')
try:
log("Executing ==> " + qemu + " -cdrom " + str(qemu_iso_link) + " -boot d -m " + ram)
subprocess.Popen(qemu + " -cdrom " + str(qemu_iso_link) + " -boot d -m " + ram, shell=True)
except:
QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting ISO\n'
'Unable to start QEMU.')
else: else:
QtWidgets.QMessageBox.information(self, 'No ram...', 'No ram selected.\n\nPlease choose any ram value and click Boot ISO.') ram = ""
cmd = qemu + ram + ' -boot d' + ' -cdrom ' + str(qemu_iso_link)
try:
log("Executing ==> " + cmd)
subprocess.Popen(cmd, shell=True)
except:
QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting ISO\n'
'Unable to start QEMU.')
def on_Qemu_Boot_usb_Click(self, usb_disk):
def on_Qemu_Boot_usb_Click(self):
""" """
Main function to boot a selected USB disk. Main function to boot a selected USB disk.
:param usb_disk: Path to usb disk. :param usb_disk: Path to usb disk.
@ -86,31 +87,41 @@ class Qemu(QtWidgets.QDialog, Ui_Dialog):
""" """
qemu = self.check_qemu_exist() qemu = self.check_qemu_exist()
if qemu is None: if not config.usb_disk:
log("QEMU does not exist.\nPlease install qemu package to avail this feature.") QtWidgets.QMessageBox.information(self, 'No disk...', 'No USB disk selected.\n\nPlease choose a disk first.')
QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu to avail this feature.')
else: else:
ram = self.qemu_usb_ram() qemu = self.check_qemu_exist()
if ram is None: qemu_usb_disk = config.usb_disk
QtWidgets.QMessageBox.information(self, 'No ram...', 'No ram selected.\n\nPlease choose any ram value and click Boot USB.')
if qemu is None:
log("ERROR: USB Boot: qemu not found!")
QtWidgets.QMessageBox.information(self, 'No QEMU...', 'Please install qemu to use this feature.')
else: else:
ram = self.qemu_usb_ram()
if ram:
ram = " -m " + ram
else:
ram = ""
if platform.system() == "Windows": if platform.system() == "Windows":
disk_number = self.get_physical_disk_number(usb_disk) disk_number = self.get_physical_disk_number(qemu_usb_disk)
parent_dir = os.getcwd() parent_dir = os.getcwd()
os.chdir(resource_path(os.path.join("data", "tools", "qemu"))) os.chdir(resource_path(os.path.join("data", "tools", "qemu")))
cmd = qemu + ' -L . -boot c' + ram + ' -hda //./PhysicalDrive ' + disk_number
try: try:
log("Executing ==> " + qemu + " -L . -boot c -m " + ram + " -hda //./PhysicalDrive" + disk_number) log("Executing ==> " + cmd)
subprocess.Popen("qemu-system-x86_64.exe -L . -boot c -m " + ram + " -hda //./PhysicalDrive" + disk_number, shell=True) subprocess.Popen(cmd, shell=True)
except: except:
QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting USB\n' QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting USB\nUnable to start QEMU.')
'Unable to start QEMU.')
os.chdir(parent_dir) os.chdir(parent_dir)
elif platform.system() == "Linux": elif platform.system() == "Linux":
cmd = qemu + ' -hda ' + qemu_usb_disk + ram + ' -vga std'
try: try:
qemu_cmd = qemu + ' -hda ' + usb_disk[:-1] + ' -m ' + ram + ' -vga std' log('Executing ==> ' + cmd)
log('Executing ==> ' + qemu_cmd)
# adminCmd([qemu, '-hda', usb_disk[:-1], '-m', ram, '-vga std'], gui=True) # adminCmd([qemu, '-hda', usb_disk[:-1], '-m', ram, '-vga std'], gui=True)
subprocess.Popen(qemu_cmd, shell=True) subprocess.Popen(cmd, shell=True)
# adminCmd(qemu_cmd, gui=True) # adminCmd(qemu_cmd, gui=True)
except: except:
QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting USB\n\nUnable to start QEMU.') QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting USB\n\nUnable to start QEMU.')
@ -120,36 +131,26 @@ class Qemu(QtWidgets.QDialog, Ui_Dialog):
Choose a ram size for ISO booting. Choose a ram size for ISO booting.
:return: Ram size as string. :return: Ram size as string.
""" """
if self.ui.ram_iso_256.isChecked(): selected_ram = self.ui.combo_iso_boot_ram.currentText()
return str(256) log("QEMU: ISO RAM = " + selected_ram)
elif self.ui.ram_iso_512.isChecked():
return str(512) if selected_ram == "Default":
elif self.ui.ram_iso_768.isChecked():
return str(768)
elif self.ui.ram_iso_1024.isChecked():
return str(1024)
elif self.ui.ram_iso_2048.isChecked():
return str(2047)
else:
return None return None
else:
return selected_ram
def qemu_usb_ram(self): def qemu_usb_ram(self):
""" """
Choose a ram size for USB booting. Choose a ram size for USB booting.
:return: Ram size as string. :return: Ram size as string.
""" """
if self.ui.ram_usb_256.isChecked(): selected_ram = self.ui.combo_usb_boot_ram.currentText()
return str(256) log("QEMU: USB RAM = " + selected_ram)
if self.ui.ram_usb_512.isChecked():
return str(512) if selected_ram == "Default":
if self.ui.ram_usb_768.isChecked():
return str(768)
if self.ui.ram_usb_1024.isChecked():
return str(1024)
if self.ui.ram_usb_2048.isChecked():
return str(2047)
else:
return None return None
else:
return selected_ram
def check_qemu_exist(self): def check_qemu_exist(self):
""" """
@ -158,21 +159,22 @@ class Qemu(QtWidgets.QDialog, Ui_Dialog):
""" """
if platform.system() == "Linux": if platform.system() == "Linux":
if subprocess.call('which qemu-system-x86_64', shell=True) == 0: if subprocess.call('which qemu-system-x86_64', shell=True) == 0:
log("qemu-system-x86_64 exists...")
qemu = "qemu-system-x86_64" qemu = "qemu-system-x86_64"
elif subprocess.call('which qemu', shell=True) == 0: elif subprocess.call('which qemu', shell=True) == 0:
log("qemu exists")
qemu = "qemu" qemu = "qemu"
else: else:
qemu = None qemu = ""
if qemu:
return qemu
else:
return None
elif platform.system() == "Windows": elif platform.system() == "Windows":
log(resource_path(os.path.join("data", "tools", "qemu", "qemu-system-x86_64.exe"))) qemu = resource_path(os.path.join("data", "tools", "qemu", "qemu-system-x86_64.exe"))
return resource_path(os.path.join("data", "tools", "qemu", "qemu-system-x86_64.exe")) log(qemu)
if qemu:
log("QEMU: using " + qemu)
else:
log("QEMU: ERROR: not found!")
return qemu
def get_physical_disk_number(self, usb_disk): def get_physical_disk_number(self, usb_disk):
@ -194,3 +196,4 @@ class Qemu(QtWidgets.QDialog, Ui_Dialog):
""" """
log("Physical Device Number is " + partition.Caption[6:-14]) log("Physical Device Number is " + partition.Caption[6:-14])
return str(partition.Caption[6:-14]) return str(partition.Caption[6:-14])

@ -123,8 +123,8 @@ def syslinux_distro_dir(usb_disk, iso_link, distro):
install_dir = os.path.join(usb_mount, "multibootusb", iso_basename(iso_link)) install_dir = os.path.join(usb_mount, "multibootusb", iso_basename(iso_link))
distro_syslinux_install_dir = os.path.join(install_dir, iso_linux_bin_dir.strip("/")).replace(usb_mount, "") distro_syslinux_install_dir = os.path.join(install_dir, iso_linux_bin_dir.strip("/")).replace(usb_mount, "")
distro_sys_install_bs = os.path.join(install_dir, iso_linux_bin_dir.strip("/"), distro + '.bs') distro_sys_install_bs = os.path.join(install_dir, iso_linux_bin_dir.strip("/"), distro + '.bs')
log (distro_sys_install_bs) # log (distro_sys_install_bs)
#log (distro_syslinux_install_dir) # log (distro_syslinux_install_dir)
if usb_fs in syslinux_fs: if usb_fs in syslinux_fs:
if config.syslinux_version == str(3): if config.syslinux_version == str(3):

@ -133,20 +133,32 @@ class UDisks2(object):
def mount(self, device_node_path): def mount(self, device_node_path):
d = self.device(device_node_path) d = self.device(device_node_path)
mount_options = ['rw', 'noexec', 'nosuid',
'nodev', 'uid=%d'%os.geteuid(), 'gid=%d'%os.getegid()] # euid = os.environ['SUDO_UID']
# egid = os.environ['SUDO_GID']
#
# if euid and egid:
# user, group = int(euid), int(egid)
# else:
# user, group = os.getuid(), os.getgid()
#
# mount_options = ['rw', 'noexec', 'nosuid', 'nodev', 'uid=%d' % user, 'gid=%d' % group]
mount_options = ['rw', 'noexec', 'nosuid', 'nodev']
try: try:
return str(d.Mount( mp = str(d.Mount(
{ {
'auth.no_user_interaction':True, 'auth.no_user_interaction':True,
'options':','.join(mount_options) 'options':','.join(mount_options)
}, },
dbus_interface=self.FILESYSTEM)) dbus_interface=self.FILESYSTEM))
print(mp)
except: except:
# May be already mounted, check # May be already mounted, check
mp = node_mountpoint(str(device_node_path)) mp = node_mountpoint(str(device_node_path))
if mp is None: if mp is None:
raise raise
finally:
return mp return mp
def unmount(self, device_node_path): def unmount(self, device_node_path):

@ -119,6 +119,9 @@ def uninstall_distro():
if platform.system() == 'Linux': if platform.system() == 'Linux':
os.system('sync') os.system('sync')
# remove 'immutable' from files on ext2/3/4 fs
if usb_mount:
subprocess.call("chattr -i -R %s/* 2>/dev/null" % usb_mount, shell=True)
if os.path.exists(os.path.join(usb_mount, "multibootusb", config.uninstall_distro_dir_name, "iso_file_list.cfg")): if os.path.exists(os.path.join(usb_mount, "multibootusb", config.uninstall_distro_dir_name, "iso_file_list.cfg")):
with open(os.path.join(usb_mount, "multibootusb", config.uninstall_distro_dir_name, "iso_file_list.cfg"), "r") as f: with open(os.path.join(usb_mount, "multibootusb", config.uninstall_distro_dir_name, "iso_file_list.cfg"), "r") as f:

@ -27,7 +27,7 @@ def update_distro_cfg_files(iso_link, usb_disk, distro, persistence=0):
usb_label = usb_details['label'] usb_label = usb_details['label']
patch = None patch = None
iso_cfg_ext_dir = os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir") iso_cfg_ext_dir = os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir")
if isolinux_bin_exist(config.iso_link): if isolinux_bin_exist(config.image_path):
isolinux_path = os.path.join(iso_cfg_ext_dir, isolinux_bin_path(iso_link)[1:]) isolinux_path = os.path.join(iso_cfg_ext_dir, isolinux_bin_path(iso_link)[1:])
config.status_text = "Updating config files..." config.status_text = "Updating config files..."
install_dir = os.path.join(usb_mount, "multibootusb", iso_basename(iso_link)) install_dir = os.path.join(usb_mount, "multibootusb", iso_basename(iso_link))
@ -234,7 +234,7 @@ def update_distro_cfg_files(iso_link, usb_disk, distro, persistence=0):
# Assertain if the entry is made.. # Assertain if the entry is made..
sys_cfg_file = os.path.join(config.usb_mount, "multibootusb", "syslinux.cfg") sys_cfg_file = os.path.join(config.usb_mount, "multibootusb", "syslinux.cfg")
if gen.check_text_in_file(sys_cfg_file, iso_basename(config.iso_link)): if gen.check_text_in_file(sys_cfg_file, iso_basename(config.image_path)):
log('Updated entry in syslinux.cfg...') log('Updated entry in syslinux.cfg...')
else: else:
log('Unable to update entry in syslinux.cfg...') log('Unable to update entry in syslinux.cfg...')
@ -271,11 +271,11 @@ def update_mbusb_cfg_file(iso_link, usb_uuid, usb_mount, distro):
config_file.write(string) config_file.write(string)
config_file.close() config_file.close()
with open(sys_cfg_file, "a") as f: with open(sys_cfg_file, "a") as f:
f.write("#start " + iso_basename(config.iso_link) + "\n") f.write("#start " + iso_basename(config.image_path) + "\n")
f.write("LABEL " + iso_basename(config.iso_link) + "\n") f.write("LABEL " + iso_basename(config.image_path) + "\n")
f.write("MENU LABEL " + iso_basename(config.iso_link) + "\n") f.write("MENU LABEL " + iso_basename(config.image_path) + "\n")
f.write("BOOT " + '/multibootusb/' + iso_basename(iso_link) + '/' + isolinux_bin_dir(iso_link).replace("\\", "/") + '/' + distro + '.bs' + "\n") f.write("BOOT " + '/multibootusb/' + iso_basename(iso_link) + '/' + isolinux_bin_dir(iso_link).replace("\\", "/") + '/' + distro + '.bs' + "\n")
f.write("#end " + iso_basename(config.iso_link) + "\n") f.write("#end " + iso_basename(config.image_path) + "\n")
elif distro == "Windows": elif distro == "Windows":
if os.path.exists(sys_cfg_file): if os.path.exists(sys_cfg_file):
config_file = open(sys_cfg_file, "a") config_file = open(sys_cfg_file, "a")
@ -292,7 +292,7 @@ def update_mbusb_cfg_file(iso_link, usb_uuid, usb_mount, distro):
config_file.write("LABEL " + iso_basename(iso_link) + "\n") config_file.write("LABEL " + iso_basename(iso_link) + "\n")
config_file.write("MENU LABEL " + iso_basename(iso_link) + "\n") config_file.write("MENU LABEL " + iso_basename(iso_link) + "\n")
config_file.write("KERNEL grub.exe" + "\n") config_file.write("KERNEL grub.exe" + "\n")
config_file.write('APPEND --config-file=/multibootusb/' + iso_basename(config.iso_link) + '/menu.lst' + "\n") config_file.write('APPEND --config-file=/multibootusb/' + iso_basename(config.image_path) + '/menu.lst' + "\n")
config_file.write("#end " + iso_basename(iso_link) + "\n") config_file.write("#end " + iso_basename(iso_link) + "\n")
config_file.close() config_file.close()
elif distro == 'kaspersky': elif distro == 'kaspersky':
@ -301,7 +301,7 @@ def update_mbusb_cfg_file(iso_link, usb_uuid, usb_mount, distro):
config_file.write("#start " + iso_basename(iso_link) + "\n") config_file.write("#start " + iso_basename(iso_link) + "\n")
config_file.write("LABEL " + iso_basename(iso_link) + "\n") config_file.write("LABEL " + iso_basename(iso_link) + "\n")
config_file.write("MENU LABEL " + iso_basename(iso_link) + "\n") config_file.write("MENU LABEL " + iso_basename(iso_link) + "\n")
config_file.write("CONFIG " + '/multibootusb/' + iso_basename(config.iso_link) + '/kaspersky.cfg' + "\n") config_file.write("CONFIG " + '/multibootusb/' + iso_basename(config.image_path) + '/kaspersky.cfg' + "\n")
config_file.write("#end " + iso_basename(iso_link) + "\n") config_file.write("#end " + iso_basename(iso_link) + "\n")
config_file.close() config_file.close()
elif distro == 'grub4dos': elif distro == 'grub4dos':
@ -342,7 +342,7 @@ def update_mbusb_cfg_file(iso_link, usb_uuid, usb_mount, distro):
config_file.write("append initrd=../ntldr" + '\n') config_file.write("append initrd=../ntldr" + '\n')
else: else:
if isolinux_bin_exist(config.iso_link) is True: if isolinux_bin_exist(config.image_path) is True:
if distro == "generic": if distro == "generic":
distro_syslinux_install_dir = isolinux_bin_dir(iso_link) distro_syslinux_install_dir = isolinux_bin_dir(iso_link)
if not isolinux_bin_dir(iso_link) == "/": if not isolinux_bin_dir(iso_link) == "/":
@ -384,34 +384,34 @@ label hwinfo
def update_menu_lst(): def update_menu_lst():
sys_cfg_file = os.path.join(config.usb_mount, "multibootusb", "syslinux.cfg") sys_cfg_file = os.path.join(config.usb_mount, "multibootusb", "syslinux.cfg")
install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link)) install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path))
menu_lst = iso_menu_lst_path(config.iso_link).replace("\\", "/") menu_lst = iso_menu_lst_path(config.image_path).replace("\\", "/")
with open(sys_cfg_file, "a") as f: with open(sys_cfg_file, "a") as f:
f.write("#start " + iso_basename(config.iso_link) + "\n") f.write("#start " + iso_basename(config.image_path) + "\n")
f.write("LABEL " + iso_basename(config.iso_link) + "\n") f.write("LABEL " + iso_basename(config.image_path) + "\n")
f.write("MENU LABEL " + iso_basename(config.iso_link) + "\n") f.write("MENU LABEL " + iso_basename(config.image_path) + "\n")
f.write("KERNEL grub.exe" + "\n") f.write("KERNEL grub.exe" + "\n")
f.write('APPEND --config-file=/' + menu_lst + "\n") f.write('APPEND --config-file=/' + menu_lst + "\n")
f.write("#end " + iso_basename(config.iso_link) + "\n") f.write("#end " + iso_basename(config.image_path) + "\n")
def update_grub4dos_iso_menu(): def update_grub4dos_iso_menu():
sys_cfg_file = os.path.join(config.usb_mount, "multibootusb", "syslinux.cfg") sys_cfg_file = os.path.join(config.usb_mount, "multibootusb", "syslinux.cfg")
install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.iso_link)) install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path))
menu_lst_file = os.path.join(install_dir, 'menu.lst') menu_lst_file = os.path.join(install_dir, 'menu.lst')
with open(menu_lst_file, "w") as f: with open(menu_lst_file, "w") as f:
f.write("title Boot " + iso_name(config.iso_link) + "\n") f.write("title Boot " + iso_name(config.image_path) + "\n")
f.write("find --set-root --ignore-floppies --ignore-cd /multibootusb/" + iso_basename(config.iso_link) + '/' f.write("find --set-root --ignore-floppies --ignore-cd /multibootusb/" + iso_basename(config.image_path) + '/'
+ iso_name(config.iso_link) + "\n") + iso_name(config.image_path) + "\n")
f.write("map --heads=0 --sectors-per-track=0 /multibootusb/" + iso_basename(config.iso_link) f.write("map --heads=0 --sectors-per-track=0 /multibootusb/" + iso_basename(config.image_path)
+ '/' + iso_name(config.iso_link) + ' (hd32)' + "\n") + '/' + iso_name(config.image_path) + ' (hd32)' + "\n")
f.write("map --hook" + "\n") f.write("map --hook" + "\n")
f.write("chainloader (hd32)") f.write("chainloader (hd32)")
with open(sys_cfg_file, "a") as f: with open(sys_cfg_file, "a") as f:
f.write("#start " + iso_basename(config.iso_link) + "\n") f.write("#start " + iso_basename(config.image_path) + "\n")
f.write("LABEL " + iso_basename(config.iso_link) + "\n") f.write("LABEL " + iso_basename(config.image_path) + "\n")
f.write("MENU LABEL " + iso_basename(config.iso_link) + "\n") f.write("MENU LABEL " + iso_basename(config.image_path) + "\n")
f.write("KERNEL grub.exe" + "\n") f.write("KERNEL grub.exe" + "\n")
f.write('APPEND --config-file=/multibootusb/' + iso_basename(config.iso_link) + '/' + iso_name(config.iso_link) + "\n") f.write('APPEND --config-file=/multibootusb/' + iso_basename(config.image_path) + '/' + iso_name(config.image_path) + "\n")
f.write("#end " + iso_basename(config.iso_link) + "\n") f.write("#end " + iso_basename(config.image_path) + "\n")

@ -85,32 +85,39 @@ def disk_usage(mount_path):
raise NotImplementedError("Platform not supported.") raise NotImplementedError("Platform not supported.")
def list(partition=1, fixed=None): def list_devices(partition=1, fixed=None):
""" """
List inserted USB devices. List inserted USB devices.
:return: USB devices as list. :return: USB devices as list.
""" """
devices = [] devices = []
if platform.system() == "Linux": if platform.system() == "Linux":
import pyudev
import dbus
try: try:
# pyudev is good enough to detect USB devices on modern Linux machines. # pyudev is good enough to detect USB devices on modern Linux machines.
gen.log("Using pyudev for detecting USB drives...") gen.log("Using pyudev for detecting USB drives...")
import pyudev
context = pyudev.Context() context = pyudev.Context()
if fixed is None: # if fixed is None:
for device in context.list_devices(subsystem='block', DEVTYPE='partition', # for device in context.list_devices(subsystem='block', DEVTYPE='partition',
ID_FS_USAGE="filesystem", ID_TYPE="disk", # ID_FS_USAGE="filesystem", ID_TYPE="disk",
ID_BUS="usb"): # ID_BUS="usb"):
# if device['ID_BUS'] == "usb" and device['DEVTYPE'] == "partition": # # if device['ID_BUS'] == "usb" and device['DEVTYPE'] == "partition":
if device.get('ID_BUS') in ("usb", "scsi") and device.get('DEVTYPE') == "partition": # if device.get('ID_BUS') in ("usb", "scsi") and device.get('DEVTYPE') == "partition":
# gen.log(device['DEVNAME']) # # gen.log(device['DEVNAME'])
devices.append(str(device['DEVNAME'])) # devices.append(str(device['DEVNAME']))
else: # else:
for device in context.list_devices(subsystem='block', DEVTYPE='partition'): # for device in context.list_devices(subsystem='block', DEVTYPE='partition'):
devices.append(str(device['DEVNAME'])) # devices.append(str(device['DEVNAME']))
for device in context.list_devices(subsystem='block',
ID_FS_USAGE="filesystem",
ID_TYPE="disk",
ID_BUS="usb"):
if device.get('ID_BUS') in ("usb", "scsi"):
gen.log("\t" + device['DEVNAME'])
# devices.append(str(device['DEVNAME']))
devices.append(device)
except: except:
import dbus
bus = dbus.SystemBus() bus = dbus.SystemBus()
try: try:
# You should come here only if your system does'nt have udev installed. # You should come here only if your system does'nt have udev installed.
@ -187,6 +194,8 @@ def details_udev(usb_disk_part):
""" """
Get details of USB partition using udev Get details of USB partition using udev
""" """
assert usb_disk_part is not None
if platform.system() == "Linux": if platform.system() == "Linux":
import pyudev import pyudev
""" """
@ -227,8 +236,24 @@ def details_udev(usb_disk_part):
model = str(device['ID_MODEL']) model = str(device['ID_MODEL'])
except: except:
model = str('No_Model') model = str('No_Model')
elif device.get('ID_BUS') in ("usb", "scsi") and device.get('DEVTYPE') == "disk":
mount_point = ''
uuid = 'No_UUID'
file_system = 'No_FS'
try:
label = str(device['ID_FS_LABEL'])
except:
label = "No_Label"
try:
vendor = str(device['ID_VENDOR'])
except:
vendor = str('No_Vendor')
try:
model = str(device['ID_MODEL'])
except:
model = str('No_Model')
if not mount_point == '': if mount_point:
size_total = shutil.disk_usage(mount_point)[0] size_total = shutil.disk_usage(mount_point)[0]
size_used = shutil.disk_usage(mount_point)[1] size_used = shutil.disk_usage(mount_point)[1]
size_free = shutil.disk_usage(mount_point)[2] size_free = shutil.disk_usage(mount_point)[2]
@ -370,6 +395,9 @@ def details(usb_disk_part):
vendor == > returns the name of the manufacturer. vendor == > returns the name of the manufacturer.
model == > returns the model name of the USB. model == > returns the model name of the USB.
""" """
assert usb_disk_part is not None
if platform.system() == 'Linux': if platform.system() == 'Linux':
try: try:
udev = details_udev(usb_disk_part) udev = details_udev(usb_disk_part)
@ -410,7 +438,7 @@ def details(usb_disk_part):
'vendor': vendor, 'model': model} 'vendor': vendor, 'model': model}
if __name__ == '__main__': if __name__ == '__main__':
usb_devices = list() usb_devices = list_devices()
if usb_devices is not None: if usb_devices is not None:
for dev in usb_devices: for dev in usb_devices:
gen.log(details(dev)) gen.log(details(dev))

Loading…
Cancel
Save