hvm: seamless_gui_mode setting, including runtime change support (#810)
This commit is contained in:
parent
12d897cd3e
commit
5704b41a45
@ -70,6 +70,9 @@ class QubesHVm(QubesVm):
|
||||
attrs['guiagent_installed'] = { 'default' : False,
|
||||
'attr': '_guiagent_installed',
|
||||
'save': lambda: str(self._guiagent_installed) }
|
||||
attrs['seamless_gui_mode'] = { 'default': False,
|
||||
'attr': '_seamless_gui_mode',
|
||||
'save': lambda: str(self._seamless_gui_mode) }
|
||||
attrs['_start_guid_first']['func'] = lambda x: True
|
||||
attrs['services']['default'] = "{'meminfo-writer': False}"
|
||||
|
||||
@ -140,6 +143,23 @@ class QubesHVm(QubesVm):
|
||||
print >>sys.stderr, "WARNING: When guiagent_installed set in template, it will be propagated to the VM"
|
||||
self._guiagent_installed = value
|
||||
|
||||
@property
|
||||
def seamless_gui_mode(self):
|
||||
if not self.guiagent_installed:
|
||||
return False
|
||||
return self._seamless_gui_mode
|
||||
|
||||
@seamless_gui_mode.setter
|
||||
def seamless_gui_mode(self, value):
|
||||
if self._seamless_gui_mode == value:
|
||||
return
|
||||
if not self.guiagent_installed and value:
|
||||
raise ValueError("Seamless GUI mode requires GUI agent installed")
|
||||
|
||||
self._seamless_gui_mode = value
|
||||
if self.is_running():
|
||||
self.send_gui_mode()
|
||||
|
||||
@property
|
||||
def drive(self):
|
||||
return self._drive
|
||||
@ -456,6 +476,15 @@ class QubesHVm(QubesVm):
|
||||
print >> sys.stderr, "--> Waiting for user '%s' login..." % self.default_user
|
||||
|
||||
self.wait_for_session(notify_function=kwargs.get('notify_function', None))
|
||||
self.send_gui_mode()
|
||||
|
||||
def send_gui_mode(self):
|
||||
if self.seamless_gui_mode:
|
||||
service_input = "SEAMLESS"
|
||||
else:
|
||||
service_input = "FULLSCREEN"
|
||||
|
||||
self.run_service("qubes.SetGuiMode", input=service_input)
|
||||
|
||||
def create_xenstore_entries(self, xid = None):
|
||||
if dry_run:
|
||||
|
@ -86,11 +86,14 @@ def do_list(vm):
|
||||
if hasattr(vm, 'qrexec_installed'):
|
||||
print fmt.format("qrexec_installed", str(vm.qrexec_installed))
|
||||
|
||||
if hasattr(vm, 'qrexec_timeout'):
|
||||
print fmt.format("qrexec_timeout", str(vm.qrexec_timeout))
|
||||
|
||||
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))
|
||||
if hasattr(vm, 'seamless_gui_mode'):
|
||||
print fmt.format("seamless_gui_mode", str(vm.seamless_gui_mode))
|
||||
|
||||
if hasattr(vm, 'drive'):
|
||||
print fmt.format("drive", str(vm.drive))
|
||||
@ -370,6 +373,21 @@ def set_guiagent_installed(vms, vm, args):
|
||||
vm.guiagent_installed = bool(eval(args[0].capitalize()))
|
||||
return True
|
||||
|
||||
def set_seamless_gui_mode(vms, vm, args):
|
||||
if len(args) != 1:
|
||||
print >> sys.stderr, "Missing value (true/false)!"
|
||||
return False
|
||||
|
||||
if not args[0].lower() in ['true', 'false']:
|
||||
print >> sys.stderr, "Invalid value, expected 'true' or 'false'"
|
||||
return False
|
||||
|
||||
if args[0].lower() == 'true':
|
||||
vm.seamless_gui_mode = True
|
||||
else:
|
||||
vm.seamless_gui_mode = False
|
||||
return True
|
||||
|
||||
def set_autostart(vms, vm, args):
|
||||
if len (args) != 1:
|
||||
print >> sys.stderr, "Missing value (True/False)!"
|
||||
@ -416,6 +434,7 @@ properties = {
|
||||
"default_user": set_default_user,
|
||||
"qrexec_installed": set_qrexec_installed,
|
||||
"guiagent_installed": set_guiagent_installed,
|
||||
"seamless_gui_mode": set_seamless_gui_mode,
|
||||
"qrexec_timeout": set_qrexec_timeout,
|
||||
"timezone": set_timezone,
|
||||
"internal": set_internal,
|
||||
|
Loading…
Reference in New Issue
Block a user