diff --git a/globalsettingsdlg.ui b/globalsettingsdlg.ui index ec828c7..de826a6 100644 --- a/globalsettingsdlg.ui +++ b/globalsettingsdlg.ui @@ -7,7 +7,7 @@ 0 0 678 - 318 + 331 @@ -161,13 +161,6 @@ - - - - Keep dispVM in memory - - - diff --git a/qubesmanager/global_settings.py b/qubesmanager/global_settings.py index 62e689d..2fd68ba 100644 --- a/qubesmanager/global_settings.py +++ b/qubesmanager/global_settings.py @@ -1,4 +1,4 @@ -#!/usr/bin/python2 +#!/usr/bin/python3 # # The Qubes OS Project, http://www.qubes-os.org # @@ -26,29 +26,14 @@ import os from PyQt4.QtCore import * from PyQt4.QtGui import * -from qubes.qubes import QubesVmCollection -from qubes.qubes import QubesException -from qubes.qubes import QubesDaemonPidfile -from qubes.qubes import QubesHost -from qubes.qubes import system_path +from qubesadmin import Qubes -import qubesmanager.resources_rc +from qubesmanager.ui_globalsettingsdlg import * -from pyinotify import WatchManager, Notifier, ThreadedNotifier, EventsCodes, ProcessEvent +from configparser import ConfigParser +from qubesadmin.utils import parse_size, updates_vms_status +from qubesadmin.vm import TemplateVM -import time -import threading -from operator import itemgetter - -from ui_globalsettingsdlg import * - -from ConfigParser import SafeConfigParser -from qubes.qubesutils import parse_size -from qubes.qubesutils import updates_dom0_toggle,updates_vms_toggle,\ - updates_dom0_status,updates_vms_status -from qubes import qmemman_algo - -dont_keep_dvm_in_memory_path = '/var/lib/qubes/dvmdata/dont-use-shm' qmemman_config_path = '/etc/qubes/qmemman.conf' @@ -70,14 +55,14 @@ class GlobalSettingsWindow(Ui_GlobalSettings, QDialog): self.__init_mem_defaults__() self.__init_updates__() - def __init_system_defaults__(self): - #updatevm and clockvm - all_vms = [vm for vm in self.qvm_collection.values() if not - vm.internal and vm.qid != 0] + # updatevm and clockvm + all_vms = [vm for vm in self.qvm_collection.domains + if (not vm.features.get('internal', False)) and vm.qid != 0] + self.updatevm_idx = -1 - current_update_vm = self.qvm_collection.get_updatevm_vm() + current_update_vm = self.qvm_collection.updatevm for (i, vm) in enumerate(all_vms): text = vm.name if vm is current_update_vm: @@ -89,10 +74,10 @@ class GlobalSettingsWindow(Ui_GlobalSettings, QDialog): self.updatevm_idx = len(all_vms) self.update_vm_combo.setCurrentIndex(self.updatevm_idx) - #clockvm + # clockvm self.clockvm_idx = -1 - current_clock_vm = self.qvm_collection.get_clockvm_vm() + current_clock_vm = self.qvm_collection.clockvm for (i, vm) in enumerate(all_vms): text = vm.name if vm is current_clock_vm: @@ -104,11 +89,11 @@ class GlobalSettingsWindow(Ui_GlobalSettings, QDialog): self.clockvm_idx = len(all_vms) self.clock_vm_combo.setCurrentIndex(self.clockvm_idx) - #default netvm - netvms = [vm for vm in all_vms if vm.is_netvm()] + # default netvm + netvms = [vm for vm in all_vms if getattr(vm, 'provides_network', False)] self.netvm_idx = -1 - current_netvm = self.qvm_collection.get_default_netvm() + current_netvm = self.qvm_collection.default_netvm for (i, vm) in enumerate(netvms): text = vm.name if vm is current_netvm: @@ -119,10 +104,10 @@ class GlobalSettingsWindow(Ui_GlobalSettings, QDialog): self.default_netvm_combo.setCurrentIndex(self.netvm_idx) #default template - templates = [vm for vm in all_vms if vm.is_template()] + templates = [vm for vm in all_vms if isinstance(vm, TemplateVM)] self.template_idx = -1 - current_template = self.qvm_collection.get_default_template() + current_template = self.qvm_collection.default_template for (i, vm) in enumerate(templates): text = vm.name if vm is current_template: @@ -137,49 +122,46 @@ class GlobalSettingsWindow(Ui_GlobalSettings, QDialog): if self.update_vm_combo.currentIndex() != self.updatevm_idx: updatevm_name = str(self.update_vm_combo.currentText()) updatevm_name = updatevm_name.split(' ')[0] - updatevm = self.qvm_collection.get_vm_by_name(updatevm_name) + updatevm = self.qvm_collection.domains[updatevm_name] - self.qvm_collection.set_updatevm_vm(updatevm) - self.anything_changed = True + self.qvm_collection.updatevm = updatevm #clockvm if self.clock_vm_combo.currentIndex() != self.clockvm_idx: clockvm_name = str(self.clock_vm_combo.currentText()) clockvm_name = clockvm_name.split(' ')[0] - clockvm = self.qvm_collection.get_vm_by_name(clockvm_name) + clockvm = self.qvm_collection.domains[clockvm_name] - self.qvm_collection.set_clockvm_vm(clockvm) - self.anything_changed = True + self.qvm_collection.clockvm = clockvm #default netvm if self.default_netvm_combo.currentIndex() != self.netvm_idx: name = str(self.default_netvm_combo.currentText()) name = name.split(' ')[0] - vm = self.qvm_collection.get_vm_by_name(name) + vm = self.qvm_collection.domains[name] - self.qvm_collection.set_default_netvm(vm) - self.anything_changed = True + self.qvm_collection.default_netvm = vm #default template if self.default_template_combo.currentIndex() != self.template_idx: name = str(self.default_template_combo.currentText()) name = name.split(' ')[0] - vm = self.qvm_collection.get_vm_by_name(name) + vm = self.qvm_collection.domains[name] - self.qvm_collection.set_default_template(vm) - self.anything_changed = True + self.qvm_collection.default_template = vm def __init_kernel_defaults__(self): kernel_list = [] - for k in os.listdir(system_path["qubes_kernels_base_dir"]): + # TODO system_path["qubes_kernels_base_dir"] idea: qubes.pulls['linux-kernel'].volumes + for k in os.listdir('/var/lib/qubes/vm-kernels'): kernel_list.append(k) self.kernel_idx = 0 for (i, k) in enumerate(kernel_list): text = k - if k == self.qvm_collection.get_default_kernel(): + if k == self.qvm_collection.default_kernel: text += self.tr(" (current)") self.kernel_idx = i self.default_kernel_combo.insertItem(i, text) @@ -190,16 +172,15 @@ class GlobalSettingsWindow(Ui_GlobalSettings, QDialog): kernel = str(self.default_kernel_combo.currentText()) kernel = kernel.split(' ')[0] - self.qvm_collection.set_default_kernel(kernel) - self.anything_changed = True + self.qvm_collection.default_kernel = kernel def __init_mem_defaults__(self): #qmemman settings - self.qmemman_config = SafeConfigParser() - self.vm_min_mem_val = str(qmemman_algo.MIN_PREFMEM) - self.dom0_mem_boost_val = str(qmemman_algo.DOM0_MEM_BOOST) + self.qmemman_config = ConfigParser() + self.vm_min_mem_val = '200MiB' #str(qmemman_algo.MIN_PREFMEM) + self.dom0_mem_boost_val = '350MiB' #str(qmemman_algo.DOM0_MEM_BOOST) self.qmemman_config.read(qmemman_config_path) if self.qmemman_config.has_section('global'): @@ -212,11 +193,7 @@ class GlobalSettingsWindow(Ui_GlobalSettings, QDialog): self.min_vm_mem.setValue(self.vm_min_mem_val/1024/1024) self.dom0_mem_boost.setValue(self.dom0_mem_boost_val/1024/1024) - #keep dispvm in memory - exists = os.path.exists(dont_keep_dvm_in_memory_path) - self.dispvm_in_memory.setChecked( not exists) - def __apply_mem_defaults__(self): #qmemman settings @@ -233,7 +210,7 @@ class GlobalSettingsWindow(Ui_GlobalSettings, QDialog): self.qmemman_config.add_section('global') self.qmemman_config.set('global', 'vm-min-mem', current_min_vm_mem) self.qmemman_config.set('global', 'dom0-mem-boost', current_dom0_mem_boost) - self.qmemman_config.set('global', 'cache-margin-factor', str(qmemman_algo.CACHE_FACTOR)) + self.qmemman_config.set('global', 'cache-margin-factor', str(1.3)) # removed qmemman_algo.CACHE_FACTOR qmemman_config_file = open(qmemman_config_path, 'a') self.qmemman_config.write(qmemman_config_file) @@ -268,22 +245,11 @@ class GlobalSettingsWindow(Ui_GlobalSettings, QDialog): qmemman_config_file.writelines(config_lines) qmemman_config_file.close() - self.anything_changed = True - - #keep dispvm in memory - was_checked = not os.path.exists(dont_keep_dvm_in_memory_path) - if was_checked != self.dispvm_in_memory.isChecked(): - if was_checked: - #touch file - open(dont_keep_dvm_in_memory_path, 'w').close() - else: - #rm file - os.remove(dont_keep_dvm_in_memory_path) - self.anything_changed = True def __init_updates__(self): self.updates_val = False - self.updates_dom0_val = updates_dom0_status(self.qvm_collection) + # TODO updates_dom0_status(self.qvm_collection) + self.updates_dom0_val = True self.updates_dom0.setChecked(self.updates_dom0_val) updates_vms = updates_vms_status(self.qvm_collection) if updates_vms is None: @@ -293,33 +259,28 @@ class GlobalSettingsWindow(Ui_GlobalSettings, QDialog): def __apply_updates__(self): if self.updates_dom0.isChecked() != self.updates_dom0_val: - updates_dom0_toggle(self.qvm_collection, self.updates_dom0.isChecked()) + # TODO updates_dom0_toggle(self.qvm_collection, self.updates_dom0.isChecked()) + raise NotImplementedError('Toggle dom0 updates not implemented') if self.updates_vm.checkState() != Qt.PartiallyChecked: - self.anything_changed = True - updates_vms_toggle(self.qvm_collection, self.updates_vm - .isChecked()) + for vm in self.qvm_collection.domains: + vm.features['check-updates'] = bool(self.updates_vm.checkState()) def reject(self): self.done(0) def save_and_apply(self): - self.qvm_collection.lock_db_for_writing() - - self.anything_changed = False + self.__apply_system_defaults__() self.__apply_kernel_defaults__() self.__apply_mem_defaults__() self.__apply_updates__() - if self.anything_changed == True: - self.qvm_collection.save() - self.qvm_collection.unlock_db() + # Bases on the original code by: # Copyright (c) 2002-2007 Pascal Varet def handle_exception( exc_type, exc_value, exc_traceback ): - import sys import os.path import traceback @@ -337,31 +298,23 @@ def handle_exception( exc_type, exc_value, exc_traceback ): def main(): - global qubes_host - qubes_host = QubesHost() - - global app - app = QApplication(sys.argv) - app.setOrganizationName("The Qubes Project") - app.setOrganizationDomain("http://qubes-os.org") - app.setApplicationName("Qubes Global Settings") + global qtapp + qtapp = QApplication(sys.argv) + qtapp.setOrganizationName("The Qubes Project") + qtapp.setOrganizationDomain("http://qubes-os.org") + qtapp.setApplicationName("Qubes Global Settings") sys.excepthook = handle_exception - qvm_collection = QubesVmCollection() - qvm_collection.lock_db_for_reading() - qvm_collection.load() - qvm_collection.unlock_db() + app = Qubes() global global_window - global_window = GlobalSettingsWindow() + global_window = GlobalSettingsWindow(qtapp, app) global_window.show() - app.exec_() - app.exit() - - + qtapp.exec_() + qtapp.exit() if __name__ == "__main__": main()