dom0/qvm-tools: add GUI (tray balloon) error reporing to qvm-start and extend it in qvm-run (#534)
This commit is contained in:
		
							parent
							
								
									705699baf2
								
							
						
					
					
						commit
						7d799e1d12
					
				| @ -87,6 +87,8 @@ def vm_run_cmd(vm, cmd, options): | |||||||
|             notify_function = tray_notify_generic if options.tray else None, |             notify_function = tray_notify_generic if options.tray else None, | ||||||
|             passio = options.passio, localcmd = options.localcmd) |             passio = options.passio, localcmd = options.localcmd) | ||||||
|     except QubesException as err: |     except QubesException as err: | ||||||
|  |         if options.tray: | ||||||
|  |             tray_notify_error(str(err)) | ||||||
|         print >> sys.stderr, "ERROR: %s" % str(err) |         print >> sys.stderr, "ERROR: %s" % str(err) | ||||||
|         exit(1) |         exit(1) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -26,13 +26,24 @@ from optparse import OptionParser | |||||||
| import subprocess | import subprocess | ||||||
| import os | import os | ||||||
| import sys | import sys | ||||||
|  | import dbus | ||||||
| 
 | 
 | ||||||
| qubes_guid_path = "/usr/bin/qubes_guid" | qubes_guid_path = "/usr/bin/qubes_guid" | ||||||
| 
 | 
 | ||||||
|  | notify_object = None | ||||||
|  | 
 | ||||||
|  | def tray_notify(str, label, timeout = 3000): | ||||||
|  |     notify_object.Notify("Qubes", 0, label.icon, "Qubes", str, [], [], timeout, dbus_interface="org.freedesktop.Notifications") | ||||||
|  | 
 | ||||||
|  | def tray_notify_error(str, timeout = 3000): | ||||||
|  |     notify_object.Notify("Qubes", 0, "dialog-error", "Qubes", str, [], [], timeout, dbus_interface="org.freedesktop.Notifications") | ||||||
|  | 
 | ||||||
| def main(): | def main(): | ||||||
|     usage = "usage: %prog [options] <vm-name>" |     usage = "usage: %prog [options] <vm-name>" | ||||||
|     parser = OptionParser (usage) |     parser = OptionParser (usage) | ||||||
|     parser.add_option ("-q", "--quiet", action="store_false", dest="verbose", default=True) |     parser.add_option ("-q", "--quiet", action="store_false", dest="verbose", default=True) | ||||||
|  |     parser.add_option ("--tray", action="store_true", dest="tray", default=False, | ||||||
|  |                        help="Use tray notifications instead of stdout" ) | ||||||
|     parser.add_option ("--no-guid", action="store_true", dest="noguid", default=False, |     parser.add_option ("--no-guid", action="store_true", dest="noguid", default=False, | ||||||
| 		      help="Do not start the GUId (ignored)") | 		      help="Do not start the GUId (ignored)") | ||||||
|     parser.add_option ("--drive", dest="drive", default=None, |     parser.add_option ("--drive", dest="drive", default=None, | ||||||
| @ -53,6 +64,10 @@ def main(): | |||||||
|         parser.error ("You must specify VM name!") |         parser.error ("You must specify VM name!") | ||||||
|     vmname = args[0] |     vmname = args[0] | ||||||
| 
 | 
 | ||||||
|  |     if options.tray: | ||||||
|  |         global notify_object | ||||||
|  |         notify_object = dbus.SessionBus().get_object("org.freedesktop.Notifications", "/org/freedesktop/Notifications") | ||||||
|  | 
 | ||||||
|     qvm_collection = QubesVmCollection() |     qvm_collection = QubesVmCollection() | ||||||
|     qvm_collection.lock_db_for_reading() |     qvm_collection.lock_db_for_reading() | ||||||
|     qvm_collection.load() |     qvm_collection.load() | ||||||
| @ -89,7 +104,10 @@ def main(): | |||||||
|     try: |     try: | ||||||
|         vm.verify_files() |         vm.verify_files() | ||||||
|         xid = vm.start(verbose=options.verbose, preparing_dvm=options.preparing_dvm, start_guid=not options.noguid) |         xid = vm.start(verbose=options.verbose, preparing_dvm=options.preparing_dvm, start_guid=not options.noguid) | ||||||
|     except (IOError, OSError, QubesException) as err: |     except (IOError, OSError, QubesException, MemoryError) as err: | ||||||
|  |         if options.tray: | ||||||
|  |             tray_notify_error(str(err)) | ||||||
|  |         else: | ||||||
|             print >> sys.stderr, "ERROR: {0}".format(err) |             print >> sys.stderr, "ERROR: {0}".format(err) | ||||||
|         exit (1) |         exit (1) | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Marek Marczykowski
						Marek Marczykowski