From 4ae804b3ec8a6129e3f02cb89166dadd5332f9eb Mon Sep 17 00:00:00 2001 From: Marek Marczykowski Date: Fri, 8 Apr 2011 22:32:38 +0200 Subject: [PATCH] Wait for qubes-session initialization before executing GUI application (#208) --- dom0/qvm-tools/qvm-run | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/dom0/qvm-tools/qvm-run b/dom0/qvm-tools/qvm-run index bafe3a79..db5f2ecb 100755 --- a/dom0/qvm-tools/qvm-run +++ b/dom0/qvm-tools/qvm-run @@ -57,6 +57,24 @@ def actually_execute(domid, cmd, options): args += ["-e"] subprocess.call(args) +def start_guid(vm, options): + if options.verbose: + print "--> Starting Qubes GUId..." + xid = vm.get_xid() + + retcode = subprocess.call ([qubes_guid_path, "-d", str(xid), "-c", vm.label.color, "-i", vm.label.icon, "-l", str(vm.label.index)]) + if (retcode != 0) : + print "ERROR: Cannot start qubes_guid!" + if options.tray: + tray_notify_error ("ERROR: Cannot start qubes_guid!") + exit (1) + + if options.verbose: + print "--> Waiting for qubes-session..." + + subprocess.call([qrexec_client_path, "-d", str(xid), "user:echo $$ >> /tmp/qubes-session-waiter; [ ! -f /tmp/qubes-session-env ] && exec sleep 365d"]) + + def vm_run_cmd(vm, cmd, options): if options.shutdown: if options.verbose: @@ -103,27 +121,14 @@ def vm_run_cmd(vm, cmd, options): exit (1) if os.getenv("DISPLAY") is not None: - if options.verbose: - print "--> Starting Qubes GUId..." - - retcode = subprocess.call ([qubes_guid_path, "-d", str(xid), "-c", vm.label.color, "-i", vm.label.icon, "-l", str(vm.label.index)]) - if (retcode != 0) : - print "ERROR: Cannot start qubes_guid!" - if options.tray: - tray_notify_error ("ERROR: Cannot start qubes_guid!") - exit (1) + start_guid(vm, options) actually_execute(str(xid), cmd, options); else: # VM already running... xid = vm.get_xid() if os.getenv("DISPLAY") is not None and not os.path.isfile("/var/run/qubes/guid_running.{0}".format(xid)): - retcode = subprocess.call ([qubes_guid_path, "-d", str(xid), "-c", vm.label.color, "-i", vm.label.icon, "-l", str(vm.label.index)]) - if (retcode != 0) : - print "ERROR: Cannot start qubes_guid!" - if options.tray: - tray_notify_error ("ERROR: Cannot start the GUI daemon for this VM!") - exit (1) + start_guid(vm, options) actually_execute(str(xid), cmd, options); def main():