dom0/qvm-core: implemented guiagent_installed preference for HVm
This commit is contained in:
parent
9ebfd63bef
commit
1f513edd2f
@ -2287,6 +2287,7 @@ class QubesHVm(QubesVm):
|
||||
attrs['maxmem'].pop('save')
|
||||
attrs['timezone'] = { 'default': 'localtime', 'save': 'str(self.timezone)' }
|
||||
attrs['qrexec_installed'] = { 'default': False, 'save': 'str(self.qrexec_installed)' }
|
||||
attrs['guiagent_installed'] = { 'default' : False, 'save': 'str(self.guiagent_installed)' }
|
||||
attrs['_start_guid_first']['eval'] = 'True'
|
||||
|
||||
return attrs
|
||||
@ -2306,6 +2307,10 @@ class QubesHVm(QubesVm):
|
||||
# HVM doesn't support dynamic memory management
|
||||
self.maxmem = self.memory
|
||||
|
||||
# Disable qemu GUID if the user installed qubes gui agent
|
||||
if self.guiagent_installed:
|
||||
self._start_guid_first = False
|
||||
|
||||
@property
|
||||
def type(self):
|
||||
return "HVM"
|
||||
@ -2471,26 +2476,27 @@ class QubesHVm(QubesVm):
|
||||
return -1
|
||||
|
||||
def start_guid(self, verbose = True, notify_function = None):
|
||||
if verbose:
|
||||
print >> sys.stderr, "--> Starting Qubes GUId..."
|
||||
# If user force the guiagent, start_guid will mimic a standard QubesVM
|
||||
if self.guiagent_installed:
|
||||
super(QubesHVm, self).start_guid(verbose, notify_function)
|
||||
else:
|
||||
if verbose:
|
||||
print >> sys.stderr, "--> Starting Qubes GUId..."
|
||||
|
||||
retcode = subprocess.call ([qubes_guid_path, "-d", str(self.stubdom_xid), "-c", self.label.color, "-i", self.label.icon, "-l", str(self.label.index)])
|
||||
if (retcode != 0) :
|
||||
raise QubesException("Cannot start qubes_guid!")
|
||||
retcode = subprocess.call ([qubes_guid_path, "-d", str(self.stubdom_xid), "-c", self.label.color, "-i", self.label.icon, "-l", str(self.label.index)])
|
||||
if (retcode != 0) :
|
||||
raise QubesException("Cannot start qubes_guid!")
|
||||
|
||||
def start_qrexec_daemon(self, **kwargs):
|
||||
if self.qrexec_installed:
|
||||
super(QubesHVm, self).start_qrexec_daemon(**kwargs)
|
||||
|
||||
if kwargs.get('verbose'):
|
||||
print >> sys.stderr, "--> Waiting for user '%s' login..." % self.default_user
|
||||
if self._start_guid_first:
|
||||
if kwargs.get('verbose'):
|
||||
print >> sys.stderr, "--> Waiting for user '%s' login..." % self.default_user
|
||||
|
||||
p = self.run('QUBESRPC qubes.WaitForSession', user="SYSTEM", passio_popen=True, gui=False, wait=True)
|
||||
p.communicate(input=self.default_user)
|
||||
|
||||
retcode = subprocess.call([qubes_clipd_path])
|
||||
if retcode != 0:
|
||||
print >> sys.stderr, "ERROR: Cannot start qclipd!"
|
||||
# TODO retrieve the notify_function from kwargs ?
|
||||
self.wait_for_session(**kwargs)
|
||||
|
||||
def pause(self):
|
||||
if dry_run:
|
||||
@ -2507,12 +2513,16 @@ class QubesHVm(QubesVm):
|
||||
super(QubesHVm, self).unpause()
|
||||
|
||||
def is_guid_running(self):
|
||||
xid = self.stubdom_xid
|
||||
if xid < 0:
|
||||
return False
|
||||
if not os.path.exists('/var/run/qubes/guid_running.%d' % xid):
|
||||
return False
|
||||
return True
|
||||
# If user force the guiagent, is_guid_running will mimic a standard QubesVM
|
||||
if self.guiagent_installed:
|
||||
return super(QubesHVm, self).is_guid_running()
|
||||
else:
|
||||
xid = self.stubdom_xid
|
||||
if xid < 0:
|
||||
return False
|
||||
if not os.path.exists('/var/run/qubes/guid_running.%d' % xid):
|
||||
return False
|
||||
return True
|
||||
|
||||
class QubesVmCollection(dict):
|
||||
"""
|
||||
@ -2877,7 +2887,7 @@ class QubesVmCollection(dict):
|
||||
"uses_default_netvm", "label", "memory", "vcpus", "pcidevs",
|
||||
"maxmem", "kernel", "uses_default_kernel", "kernelopts", "uses_default_kernelopts",
|
||||
"mac", "services", "include_in_backups", "debug",
|
||||
"default_user", "qrexec_timeout", "qrexec_installed", "drive" )
|
||||
"default_user", "qrexec_timeout", "qrexec_installed", "guiagent_installed", "drive" )
|
||||
|
||||
for attribute in common_attr_list:
|
||||
kwargs[attribute] = element.get(attribute)
|
||||
@ -2942,6 +2952,9 @@ class QubesVmCollection(dict):
|
||||
if "qrexec_installed" in kwargs:
|
||||
kwargs["qrexec_installed"] = True if kwargs["qrexec_installed"] == "True" else False
|
||||
|
||||
if "guiagent_installed" in kwargs:
|
||||
kwargs["guiagent_installed"] = True if kwargs["guiagent_installed"] == "True" else False
|
||||
|
||||
if "drive" in kwargs and kwargs["drive"] == "None":
|
||||
kwargs["drive"] = None
|
||||
|
||||
|
@ -84,6 +84,9 @@ def do_list(vm):
|
||||
if hasattr(vm, 'qrexec_installed'):
|
||||
print fmt.format("qrexec_installed", str(vm.qrexec_installed))
|
||||
|
||||
if hasattr(vm, 'guiagent_installed'):
|
||||
print fmt.format("guiagent_installed", str(vm.guiagent_installed))
|
||||
|
||||
if hasattr(vm, 'qrexec_timeout'):
|
||||
print fmt.format("qrexec timeout", str(vm.qrexec_timeout))
|
||||
|
||||
@ -336,6 +339,14 @@ def set_qrexec_installed(vms, vm, args):
|
||||
vm.qrexec_installed = bool(eval(args[0].capitalize()))
|
||||
return True
|
||||
|
||||
def set_guiagent_installed(vms, vm, args):
|
||||
if len (args) != 1:
|
||||
print >> sys.stderr, "Missing value (True/False)!"
|
||||
return False
|
||||
|
||||
vm.guiagent_installed = bool(eval(args[0].capitalize()))
|
||||
return True
|
||||
|
||||
def set_qrexec_timeout(vms, vm, args):
|
||||
if len (args) != 1:
|
||||
print >> sys.stderr, "Missing timeout value (seconds)!"
|
||||
@ -373,6 +384,7 @@ properties = {
|
||||
"debug": set_debug,
|
||||
"default_user": set_default_user,
|
||||
"qrexec_installed": set_qrexec_installed,
|
||||
"guiagent_installed": set_guiagent_installed,
|
||||
"qrexec_timeout": set_qrexec_timeout,
|
||||
"timezone": set_timezone,
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user