From 4dfad5f1aeb2cc46fef07a3f5cd6d4d2b8230e6d Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Fri, 15 Jun 2012 17:37:19 +0200 Subject: [PATCH 1/3] dom0: qvm-run --nogui switch Can be used to not start guid. --- dom0/qvm-core/qubes.py | 4 ++-- dom0/qvm-tools/qvm-run | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dom0/qvm-core/qubes.py b/dom0/qvm-core/qubes.py index 08c2b727..f7385009 100755 --- a/dom0/qvm-core/qubes.py +++ b/dom0/qvm-core/qubes.py @@ -1301,7 +1301,7 @@ class QubesVm(object): return conf - def run(self, command, verbose = True, autostart = False, notify_function = None, passio = False, passio_popen = False, localcmd = None, wait = False): + def run(self, command, verbose = True, autostart = False, notify_function = None, passio = False, passio_popen = False, localcmd = None, wait = False, gui = True): """command should be in form 'user:cmdline'""" if not self.is_running(): @@ -1321,7 +1321,7 @@ class QubesVm(object): raise QubesException("Not enough memory to start '{0}' VM! Close one or more running VMs and try again.".format(self.name)) xid = self.get_xid() - if os.getenv("DISPLAY") is not None and not self.is_guid_running(): + if gui and os.getenv("DISPLAY") is not None and not self.is_guid_running(): self.start_guid(verbose = verbose, notify_function = notify_function) args = [qrexec_client_path, "-d", str(xid), command] diff --git a/dom0/qvm-tools/qvm-run b/dom0/qvm-tools/qvm-run index 89d53756..d83236cd 100755 --- a/dom0/qvm-tools/qvm-run +++ b/dom0/qvm-tools/qvm-run @@ -85,7 +85,7 @@ def vm_run_cmd(vm, cmd, options): return vm.run(cmd, autostart = options.auto, verbose = options.verbose, notify_function = tray_notify_generic if options.tray else None, - passio = options.passio, localcmd = options.localcmd) + passio = options.passio, localcmd = options.localcmd, gui = options.gui) except QubesException as err: if options.tray: tray_notify_error(str(err)) @@ -130,6 +130,9 @@ def main(): parser.add_option ("--force", action="store_true", dest="force", default=False, help="Force operation, even if may damage other VMs (eg shutdown of NetVM)") + parser.add_option ("--nogui", action="store_false", dest="gui", default=True, + help="Run command without gui") + (options, args) = parser.parse_args () From 92844a161ac923ce70f816d5728ac094e0c1c4c4 Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Fri, 15 Jun 2012 17:40:03 +0200 Subject: [PATCH 2/3] dom0: qvm-run --nogui support for HVM Translate it to "nogui:" command prefix. --- dom0/qvm-core/qubes.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dom0/qvm-core/qubes.py b/dom0/qvm-core/qubes.py index f7385009..4624c955 100755 --- a/dom0/qvm-core/qubes.py +++ b/dom0/qvm-core/qubes.py @@ -2406,6 +2406,8 @@ class QubesHVm(QubesVm): def run(self, command, **kwargs): if self.qrexec_installed: + if 'gui' in kwargs and kwargs['gui']==False: + command = "nogui:" + command super(QubesHVm, self).run(command, **kwargs) else: raise QubesException("Needs qrexec agent installed in VM to use this function. See also qvm-prefs.") From 06d99b77df9750324dee36a152e68cd8a4de0efa Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Fri, 15 Jun 2012 17:42:14 +0200 Subject: [PATCH 3/3] dom0: minor qvm-sync-clock fix Catch any error in vm.run, to not break clock syncing of all VMs because one VM. --- dom0/qvm-tools/qvm-sync-clock | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dom0/qvm-tools/qvm-sync-clock b/dom0/qvm-tools/qvm-sync-clock index 30978af4..449c664f 100755 --- a/dom0/qvm-tools/qvm-sync-clock +++ b/dom0/qvm-tools/qvm-sync-clock @@ -91,7 +91,8 @@ def main(): print >> sys.stderr, '--> Syncing \'%s\' clock.' % vm.name try: vm.run('root:date -u -s "%s"' % date_out, verbose=verbose) - except NotImplementedError: + except Exception as e: + print >> sys.stderr, "ERROR syncing time in VM '%s': %s" % (vm.name, str(e)) pass main()