settings: devices
This commit is contained in:
parent
c32391a030
commit
1861ff386d
@ -572,26 +572,31 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
|
|||||||
|
|
||||||
######## devices tab
|
######## devices tab
|
||||||
def __init_devices_tab__(self):
|
def __init_devices_tab__(self):
|
||||||
self.dev_list = MultiSelectWidget(self)
|
self.dev_list = multiselectwidget.MultiSelectWidget(self)
|
||||||
self.dev_list.add_all_button.setVisible(False)
|
self.dev_list.add_all_button.setVisible(False)
|
||||||
self.devices_layout.addWidget(self.dev_list)
|
self.devices_layout.addWidget(self.dev_list)
|
||||||
|
|
||||||
devs = []
|
devs = []
|
||||||
lspci = subprocess.Popen(["/usr/sbin/lspci",], stdout = subprocess.PIPE)
|
lspci = subprocess.check_output(['/usr/sbin/lspci']).decode()
|
||||||
for dev in lspci.stdout:
|
for dev in lspci.splitlines():
|
||||||
devs.append( (dev.rstrip(), dev.split(' ')[0]) )
|
devs.append((dev.rstrip(), dev.split(' ')[0]))
|
||||||
|
|
||||||
class DevListWidgetItem(QListWidgetItem):
|
class DevListWidgetItem(QListWidgetItem):
|
||||||
def __init__(self, name, slot, parent = None):
|
def __init__(self, name, ident, parent = None):
|
||||||
super(DevListWidgetItem, self).__init__(name, parent)
|
super(DevListWidgetItem, self).__init__(name, parent)
|
||||||
self.slot = slot
|
self.ident = ident
|
||||||
self.Type
|
self.Type
|
||||||
|
|
||||||
for d in devs:
|
persistent = [ass.ident.replace('_', ':')
|
||||||
if d[1] in self.vm.pcidevs:
|
for ass in self.vm.devices['pci'].persistent()]
|
||||||
self.dev_list.selected_list.addItem( DevListWidgetItem(d[0], d[1]))
|
|
||||||
|
for name, ident in devs:
|
||||||
|
if ident in persistent:
|
||||||
|
self.dev_list.selected_list.addItem(
|
||||||
|
DevListWidgetItem(name, ident))
|
||||||
else:
|
else:
|
||||||
self.dev_list.available_list.addItem( DevListWidgetItem(d[0], d[1]))
|
self.dev_list.available_list.addItem(
|
||||||
|
DevListWidgetItem(name, ident))
|
||||||
|
|
||||||
if self.dev_list.selected_list.count() > 0 and self.include_in_balancing.isChecked():
|
if self.dev_list.selected_list.count() > 0 and self.include_in_balancing.isChecked():
|
||||||
self.dmm_warning_adv.show()
|
self.dmm_warning_adv.show()
|
||||||
@ -610,27 +615,26 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
|
|||||||
|
|
||||||
def __apply_devices_tab__(self):
|
def __apply_devices_tab__(self):
|
||||||
msg = []
|
msg = []
|
||||||
sth_changed = False
|
|
||||||
added = []
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for i in range(self.dev_list.selected_list.count()):
|
old = [ass.ident.replace('_', ':')
|
||||||
item = self.dev_list.selected_list.item(i)
|
for ass in self.vm.devices['pci'].persistent()]
|
||||||
if item.slot not in self.vm.pcidevs:
|
|
||||||
added.append(item)
|
|
||||||
|
|
||||||
if self.dev_list.selected_list.count() - len(added) < len(self.vm.pcidevs): #sth removed
|
new = [self.dev_list.selected_list.item(i).ident
|
||||||
sth_changed = True
|
for i in range(self.dev_list.selected_list.count())]
|
||||||
elif len(added) > 0:
|
for ident in new:
|
||||||
sth_changed = True
|
if ident not in old:
|
||||||
|
ass = qubesadmin.devices.DeviceAssignment(
|
||||||
|
self.vm.app.domains['dom0'],
|
||||||
|
ident.replace(':', '_'),
|
||||||
|
persistent=True)
|
||||||
|
self.vm.devices['pci'].attach(ass)
|
||||||
|
for ass in self.vm.devices['pci'].assignments(persistent=True):
|
||||||
|
if ass.ident.replace('_', ':') not in new:
|
||||||
|
self.vm.devices['pci'].detach(ass)
|
||||||
|
|
||||||
|
self.anything_changed = True
|
||||||
|
|
||||||
if sth_changed == True:
|
|
||||||
pcidevs = []
|
|
||||||
for i in range(self.dev_list.selected_list.count()):
|
|
||||||
slot = self.dev_list.selected_list.item(i).slot
|
|
||||||
pcidevs.append(slot)
|
|
||||||
self.vm.pcidevs = pcidevs
|
|
||||||
self.anything_changed = True
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
if utils.is_debug():
|
if utils.is_debug():
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
Loading…
Reference in New Issue
Block a user