diff --git a/src/virtManager/details.py b/src/virtManager/details.py index 61e011870..0d60d638d 100644 --- a/src/virtManager/details.py +++ b/src/virtManager/details.py @@ -182,6 +182,12 @@ class vmmDetails(gobject.GObject): self.addhw = None self.choose_cd = None + # Security info tooltips + util.tooltip_wrapper(self.window.get_widget("security-static-info"), + _("Static SELinux security type tells libvirt to always start the guest process with the specified label. The administrator is responsible for making sure the images are labeled corectly on disk.")) + util.tooltip_wrapper(self.window.get_widget("security-dynamic-info"), + _("The dynamic SELinux security type tells libvirt to automatically pick a unique label for the guest process and guest image, ensuring total isolation of the guest. (Default)")) + self.cpu_usage_graph = sparkline.Sparkline() self.cpu_usage_graph.set_property("reversed", True) self.window.get_widget("graph-table").attach(self.cpu_usage_graph, 1, 2, 0, 1) @@ -276,6 +282,7 @@ class vmmDetails(gobject.GObject): "on_details_pages_switch_page": self.switch_page, + "on_config_security_apply_clicked": self.config_security_apply, "on_config_vcpus_apply_clicked": self.config_vcpus_apply, "on_config_vcpus_changed": self.config_vcpus_changed, "on_config_memory_changed": self.config_memory_changed, @@ -320,6 +327,9 @@ class vmmDetails(gobject.GObject): "on_console_auth_password_activate": self.auth_login, "on_console_auth_login_clicked": self.auth_login, + "on_security_label_changed": self.security_label_changed, + "on_security_type_changed": self.security_type_changed, + "on_security_model_changed": self.security_model_changed, }) self.vm.connect("status-changed", self.update_widget_states) @@ -650,7 +660,7 @@ class vmmDetails(gobject.GObject): def hw_selected(self, src=None): pagetype = self.get_hw_selection(HW_LIST_COL_TYPE) - if not pagetype: + if pagetype is None: self.window.get_widget("hw-panel").set_sensitive(True) self.window.get_widget("hw-list").get_selection().select_path(0) self.window.get_widget("hw-panel").set_current_page(0) @@ -902,6 +912,32 @@ class vmmDetails(gobject.GObject): self.window.get_widget("overview-arch").set_text(arch) self.window.get_widget("overview-emulator").set_text(emu) + vmmodel, ignore, vmlabel = self.vm.get_seclabel() + semodel_combo = self.window.get_widget("security-model") + semodel_model = semodel_combo.get_model() + caps = self.vm.get_connection().get_capabilities() + + semodel_model.clear() + semodel_model.append(["None"]) + if caps.host.secmodel and caps.host.secmodel.model: + semodel_model.append([caps.host.secmodel.model]) + + active = 0 + for i in range(0, len(semodel_model)): + if vmmodel and vmmodel == semodel_model[i][0]: + active = i + break + semodel_combo.set_active(active) + + if self.vm.get_seclabel()[1] == "static": + self.window.get_widget("security-static").set_active(True) + else: + self.window.get_widget("security-dynamic").set_active(True) + + self.window.get_widget("security-label").set_text(vmlabel) + semodel_combo.emit("changed") + self.window.get_widget("config-security-apply").set_sensitive(False) + def refresh_stats_page(self): def _rx_tx_text(rx, tx, unit): return '%(rx)d %(unit)s in\n%(tx)d %(unit)s out' % locals() @@ -1499,6 +1535,50 @@ class vmmDetails(gobject.GObject): self.window.get_widget("details-pages").remove_page(page_idx) self.dynamic_tabs.remove(name) + # ----------------------- + # Overview -> Security + # ----------------------- + def security_model_changed(self, combo): + model = combo.get_model() + idx = combo.get_active() + if idx < 0: + return + + self.window.get_widget("config-security-apply").set_sensitive(True) + val = model[idx][0] + show_type = (val == "selinux") + self.window.get_widget("security-type-box").set_sensitive(show_type) + + def security_label_changed(self, label): + self.window.get_widget("config-security-apply").set_sensitive(True) + + def security_type_changed(self, button, sensitive = True): + self.window.get_widget("config-security-apply").set_sensitive(True) + self.window.get_widget("security-label").set_sensitive(not button.get_active()) + + def config_security_apply(self, src): + combo = self.window.get_widget("security-model") + model = combo.get_model() + semodel = model[combo.get_active()][0] + + if not semodel or str(semodel).lower() == "none": + semodel = None + + if self.window.get_widget("security-dynamic").get_active(): + setype = "dynamic" + else: + setype = "static" + + selabel = self.window.get_widget("security-label").get_text() + try: + self.vm.define_seclabel(semodel, setype, selabel) + except Exception, e: + self.err.show_err(_("Error Setting Security data: %s") % str(e), + "".join(traceback.format_exc())) + return + + self.window.get_widget("config-security-apply").set_sensitive(False) + # ----------------------- # Hardware Section Pieces # ----------------------- diff --git a/src/virtManager/domain.py b/src/virtManager/domain.py index f0f427ece..8a9d629a8 100644 --- a/src/virtManager/domain.py +++ b/src/virtManager/domain.py @@ -1322,6 +1322,49 @@ class vmmDomain(gobject.GObject): self.redefine(util.xml_parse_wrapper, set_boot_xml) + def get_seclabel(self): + xml = self.get_xml() + model = vutil.get_xml_path(xml, "/domain/seclabel/@model") + t = vutil.get_xml_path(self.get_xml(), "/domain/seclabel/@type") + label = vutil.get_xml_path(self.get_xml(), "/domain/seclabel/label") + + return [model, t or "dynamic", label or ""] + + def define_seclabel(self, model, t, label): + logging.debug("Changing seclabel with model=%s t=%s label=%s" % + (model, t, label)) + + def change_label(doc, ctx): + secnode = ctx.xpathEval("/domain/seclabel") + secnode = (secnode and secnode[0] or None) + + if not model: + if secnode: + secnode.unlinkNode() + + elif not secnode: + # Need to create new node + domain = ctx.xpathEval("/domain")[0] + seclabel = domain.newChild(None, "seclabel", None) + seclabel.setProp("model", model) + seclabel.setProp("type", t) + seclabel.newChild(None, "label", label) + + else: + # Change existing label info + secnode.setProp("model", model) + secnode.setProp("type", t) + l = ctx.xpathEval("/domain/seclabel/label") + if len(l) > 0: + l[0].setContent(label) + else: + secnode.newChild(None, "label", label) + + return doc.serialize() + + self.redefine(util.xml_parse_wrapper, + change_label) + def toggle_sample_cpu_stats(self, ignore1=None, ignore2=None, ignore3=None, ignore4=None): if self.config.get_stats_enable_cpu_poll(): diff --git a/src/vmm-details.glade b/src/vmm-details.glade index c23f9a737..194d1a8d1 100644 --- a/src/vmm-details.glade +++ b/src/vmm-details.glade @@ -1,7 +1,7 @@ - + + + - - Virtual Machine 800 @@ -36,8 +36,8 @@ - gtk-close True + gtk-close True True @@ -45,8 +45,8 @@ - gtk-quit True + gtk-quit True True @@ -136,7 +136,8 @@ True - + + @@ -414,7 +415,6 @@ False False - 0 @@ -431,7 +431,6 @@ False - True @@ -445,7 +444,6 @@ False - True @@ -458,6 +456,7 @@ False + False @@ -466,6 +465,7 @@ False + False @@ -476,7 +476,6 @@ False - True @@ -503,7 +502,7 @@ True <b>The console is currently unavailable</b> True - center + GTK_JUSTIFY_CENTER True @@ -516,20 +515,20 @@ Unavailable - False tab + False True True - automatic - automatic + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC True - none + GTK_SHADOW_NONE True @@ -556,9 +555,9 @@ Screenshot + tab 1 False - tab @@ -570,79 +569,19 @@ 3 3 - - True - 0 - Password: - - - 1 - 2 - GTK_FILL - - + - - True - True - False - - - 1 - 2 - 1 - 2 - - + - - Save this password in your keyring - True - True - False - True - 0 - True - - - 1 - 2 - 2 - 3 - GTK_FILL - - - - - - True - 0 - Username: - - - GTK_FILL - - - - - - True - True - - - - 1 - 2 - - + True True - False + 0 @@ -661,7 +600,6 @@ False False - 0 @@ -691,13 +629,73 @@ - + + True + True + + + + 1 + 2 + + - + + True + 0 + Username: + + + GTK_FILL + + - + + True + True + Save this password in your keyring + True + 0 + 0 + True + + + 1 + 2 + 2 + 3 + GTK_FILL + + + + + + True + True + False + + + 1 + 2 + 1 + 2 + + + + + + True + 0 + Password: + + + 1 + 2 + GTK_FILL + + @@ -710,21 +708,21 @@ Auth + tab 2 False - tab True True - automatic - automatic + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC True - none + GTK_SHADOW_NONE @@ -741,9 +739,9 @@ VNC + tab 3 False - tab @@ -754,20 +752,20 @@ Console - False tab + False True True - automatic - automatic + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC True - none + GTK_SHADOW_NONE True @@ -782,9 +780,9 @@ True True - automatic - automatic - in + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN True @@ -793,15 +791,12 @@ - - 0 - True True - False + 0 @@ -820,7 +815,6 @@ False False - 0 @@ -859,145 +853,149 @@ True + 3 12 - + True - 3 - 0 - none + 12 - + True - 12 + 3 + 0 + GTK_SHADOW_NONE - + True - 3 - 3 - 2 - 6 - 6 + 12 - + True - 0 - test-vm - True - - - 1 - 2 - GTK_FILL - GTK_FILL - - - - - True - 0 - 8ffc926e-b4da-b3b6-552f-e37b92f918d5 - True - - - 1 - 2 - 1 - 2 - - - - - - True - 3 + 3 + 3 + 2 + 6 + 6 - - True - gtk-stop - - - False - 0 - - - - + True 0 - Shut down + test-vm + True - False - 1 + 1 + 2 + GTK_FILL + GTK_FILL + + + + + True + 0 + 8ffc926e-b4da-b3b6-552f-e37b92f918d5 + True + + + 1 + 2 + 1 + 2 + + + + + + True + 3 + + + True + gtk-stop + + + False + + + + + True + 0 + Shut down + + + False + 1 + + + + + 1 + 2 + 2 + 3 + GTK_FILL + GTK_FILL + + + + + True + 1 + Name: + + + GTK_FILL + + + + + + True + 1 + UUID: + + + 1 + 2 + GTK_FILL + + + + + + True + 1 + Status: + + + 2 + 3 + GTK_FILL + - - 1 - 2 - 2 - 3 - GTK_FILL - GTK_FILL - - - - - True - 1 - Name: - - - GTK_FILL - - - - - - True - 1 - UUID: - - - 1 - 2 - GTK_FILL - - - - - - True - 1 - Status: - - - 2 - 3 - GTK_FILL - - + + + True + <b>Basic details</b> + True + + + label_item + + - - - True - <b>Basic details</b> - True - - - label_item - - False - 15 - 0 @@ -1005,7 +1003,7 @@ True 3 0 - none + GTK_SHADOW_NONE True @@ -1019,52 +1017,14 @@ 6 6 - + True 1 - Hypervisor: + Emulator: - GTK_FILL - GTK_FILL - - - - - True - Architecture: - - - 1 - 2 - GTK_FILL - GTK_FILL - - - - - True - 0 - foo - - - 1 - 2 - GTK_FILL - GTK_FILL - - - - - True - 0 - foo - - - 1 - 2 - 1 - 2 + 2 + 3 GTK_FILL GTK_FILL @@ -1085,14 +1045,52 @@ - + True - 1 - Emulator: + 0 + foo + + + 1 + 2 + 1 + 2 + GTK_FILL + GTK_FILL + + + + + True + 0 + foo + + + 1 + 2 + GTK_FILL + GTK_FILL + + + + + True + Architecture: + + + 1 + 2 + GTK_FILL + GTK_FILL + + + + + True + 1 + Hypervisor: - 2 - 3 GTK_FILL GTK_FILL @@ -1113,9 +1111,235 @@ + False 1 + + + True + True + 3 + + + True + 12 + + + True + 2 + 2 + 6 + 6 + + + True + 1 + 0 + Type: + + + 1 + 2 + GTK_FILL + GTK_FILL + + + + + True + 1 + Model: + + + GTK_FILL + GTK_FILL + + + + + True + 3 + 2 + 6 + 6 + + + True + True + 0 + gtk-info + + + 1 + 2 + + + + + + True + True + 0 + gtk-info + + + 1 + 2 + 1 + 2 + + + + + + True + True + Static + True + 0 + True + security-dynamic + + + 1 + 2 + GTK_FILL + + + + + True + True + Dynamic + True + 0 + True + + + + + + + + + + True + 6 + + + True + 20 + + + True + 0 + Label: + + + + + False + + + + + True + True + + + + + 1 + + + + + 2 + 2 + 3 + GTK_FILL + GTK_EXPAND + + + + + 1 + 2 + 1 + 2 + GTK_FILL + + + + + True + 6 + + + True + + + + + False + False + + + + + + + + 1 + 2 + GTK_FILL + + + + + + + + + + True + <b>Security</b> + True + + + label_item + + + + + 2 + + + + + True + 6 + 5 + GTK_BUTTONBOX_END + + + True + False + True + True + gtk-apply + True + 0 + + + + + + False + 3 + + @@ -1124,8 +1348,8 @@ Overview - False tab + False @@ -1136,7 +1360,7 @@ True 3 0 - none + GTK_SHADOW_NONE True @@ -1150,92 +1374,34 @@ 6 8 - - True - 1 - CPU -usage: - right - - - GTK_FILL - - + - - True - 1 - Memory -usage: - right - - - 1 - 2 - GTK_FILL - - + - - True - 1 - Disk -I/O: - right - - - 2 - 3 - GTK_FILL - - + - + + + + True - 1 - Network -I/O: - right + 0 + 0 KBytes/s +0KBytes/s + True + 2 + 3 3 4 GTK_FILL - - - True - 0 - 18% - - - 2 - 3 - GTK_FILL - - - - - - True - 0 - 30 MB of -128 MB - - - 2 - 3 - 1 - 2 - GTK_FILL - - - True @@ -1254,16 +1420,43 @@ I/O: - + True 0 - 0 KBytes/s -0KBytes/s - True + 30 MB of +128 MB 2 3 + 1 + 2 + GTK_FILL + + + + + + True + 0 + 18% + + + 2 + 3 + GTK_FILL + + + + + + True + 1 + Network +I/O: + GTK_JUSTIFY_RIGHT + + 3 4 GTK_FILL @@ -1271,16 +1464,47 @@ I/O: - + + True + 1 + Disk +I/O: + GTK_JUSTIFY_RIGHT + + + 2 + 3 + GTK_FILL + + - + + True + 1 + Memory +usage: + GTK_JUSTIFY_RIGHT + + + 1 + 2 + GTK_FILL + + - - - - + + True + 1 + CPU +usage: + GTK_JUSTIFY_RIGHT + + + GTK_FILL + + @@ -1299,7 +1523,6 @@ I/O: 15 - 0 @@ -1313,9 +1536,9 @@ I/O: Stats + tab 1 False - tab @@ -1325,7 +1548,7 @@ I/O: True 0 - none + GTK_SHADOW_NONE True @@ -1345,7 +1568,6 @@ I/O: False False - 0 @@ -1357,23 +1579,21 @@ I/O: 3 3 - + True - 1 - Current allocation: - - - GTK_FILL - - - - - - True - 1 - Change allocation: + True + 2 1 32 1 2 0 + 1 + True + GTK_UPDATE_IF_VALID + + Virtual CPU Select + + + 1 + 2 1 2 GTK_FILL @@ -1381,25 +1601,27 @@ I/O: - + True - 1 - Maximum allocation: + 0 + 2 - 2 - 3 + 1 + 2 GTK_FILL - + True - 1 - Total CPUs on host machine: + 0 + 8 + 1 + 2 3 4 GTK_FILL @@ -1422,14 +1644,12 @@ I/O: - + True - 0 - 8 + 1 + Total CPUs on host machine: - 1 - 2 3 4 GTK_FILL @@ -1437,40 +1657,42 @@ I/O: - + True - 0 - 2 + 1 + Maximum allocation: - 1 - 2 + 2 + 3 GTK_FILL - + True - True - 2 1 32 1 2 0 - 1 - True - if-valid - - Virtual CPU Select - - + 1 + Change allocation: - 1 - 2 1 2 GTK_FILL + + + True + 1 + Current allocation: + + + GTK_FILL + + + False @@ -1497,7 +1719,6 @@ I/O: False False 15 - 0 @@ -1517,7 +1738,6 @@ I/O: False False - 0 @@ -1551,29 +1771,28 @@ I/O: True 6 5 - end + GTK_BUTTONBOX_END - gtk-apply True False True True - False + gtk-apply True + 0 False False - 0 False False - end + GTK_PACK_END 2 @@ -1588,9 +1807,9 @@ I/O: Proc + tab 2 False - tab @@ -1600,7 +1819,7 @@ I/O: True 0 - none + GTK_SHADOW_NONE True @@ -1620,7 +1839,6 @@ I/O: False False - 0 @@ -1632,83 +1850,43 @@ I/O: 3 3 - + True - 1 - Current allocation: - - - GTK_FILL - - - - - - True - 1 - Change allocation: - - - 1 - 2 - GTK_FILL - - - - - - True - 1 - Maximum allocation: + + + True + True + 50 50 32000 1 25 0 + 2 + True + GTK_UPDATE_IF_VALID + + Max Memory Select + + + + + + + True + MB + + + False + False + 1 + + + 1 + 2 2 3 GTK_FILL - - - True - 1 - Total memory on host machine: - - - 3 - 4 - GTK_FILL - - - - - - True - 0 - 2 GB - - - 1 - 2 - 3 - 4 - GTK_FILL - - - - - - True - 0 - 200 MB - - - 1 - 2 - GTK_FILL - - - True @@ -1719,15 +1897,12 @@ I/O: 50 50 32000 1 25 0 2 True - if-valid + GTK_UPDATE_IF_VALID - Memory Select + Memory Select - - 0 - @@ -1751,46 +1926,83 @@ I/O: - + True - - - True - True - 50 50 32000 1 25 0 - 2 - True - if-valid - - Max Memory Select - - - - - 0 - - - - - True - MB - - - False - False - 1 - - + 0 + 200 MB 1 2 + GTK_FILL + + + + + + True + 0 + 2 GB + + + 1 + 2 + 3 + 4 + GTK_FILL + + + + + + True + 1 + Total memory on host machine: + + + 3 + 4 + GTK_FILL + + + + + + True + 1 + Maximum allocation: + + 2 3 GTK_FILL + + + True + 1 + Change allocation: + + + 1 + 2 + GTK_FILL + + + + + + True + 1 + Current allocation: + + + GTK_FILL + + + False @@ -1815,7 +2027,6 @@ I/O: 15 - 0 @@ -1823,22 +2034,21 @@ I/O: True 6 5 - end + GTK_BUTTONBOX_END - gtk-apply True False True True - False + gtk-apply True + 0 False False - 0 @@ -1859,9 +2069,9 @@ I/O: Mem + tab 3 False - tab @@ -1874,18 +2084,18 @@ I/O: True 0 - none + GTK_SHADOW_NONE True 12 - Start virtual machine on host boot up True True - False + Start virtual machine on host boot up True + 0 True @@ -1907,14 +2117,13 @@ I/O: False False 15 - 0 True 0 - none + GTK_SHADOW_NONE True @@ -1923,17 +2132,6 @@ I/O: True 2 - - - True - 0 - Device virtual machine will boot from: - - - - - - True @@ -1945,6 +2143,17 @@ I/O: GTK_FILL + + + True + 0 + Device virtual machine will boot from: + + + + + + @@ -1967,31 +2176,27 @@ I/O: - - 0 - True 6 5 - end + GTK_BUTTONBOX_END - gtk-apply True False True True - False + gtk-apply True + 0 False False - 0 @@ -2012,9 +2217,9 @@ I/O: Boot + tab 4 False - tab @@ -2024,7 +2229,7 @@ I/O: True 0 - none + GTK_SHADOW_NONE True @@ -2040,131 +2245,56 @@ I/O: 8 4 - - True - 0 - label402 - True - start - - - 1 - 2 - 1 - 2 - - + - - True - 1 - Source type: - True - right - - - GTK_FILL - - + - - True - 1 - Source path: - True - - - 1 - 2 - GTK_FILL - - + - + True - 1 - Target type: - True + True + True + gtk-connect + True + 0 + - 2 + 2 + 3 3 + + + + + + + True + 0 + True + + + 1 + 2 + 4 + 5 GTK_FILL - + True 1 - Target device: - True + Target bus: - 3 - 4 - GTK_FILL - - - - - - True - 0 - label393 - True - - - 1 - 2 - 3 - 4 - GTK_FILL - - - - - - True - 0 - disk - True - - - 1 - 2 - 2 - 3 - GTK_FILL - - - - - - True - 0 - Block - True - - - 1 - 2 - GTK_FILL - - - - - - True - 1 - Permissions: - - - 5 - 6 + 4 + 5 GTK_FILL @@ -2186,59 +2316,134 @@ I/O: - + True 1 - Target bus: + Permissions: - 4 - 5 + 5 + 6 GTK_FILL - + True 0 + Block True 1 2 - 4 - 5 GTK_FILL - - gtk-connect + True - True - True - False - True - + 0 + disk + True - 2 - 3 + 1 + 2 + 2 3 - + GTK_FILL - + + True + 0 + label393 + True + + + 1 + 2 + 3 + 4 + GTK_FILL + + - + + True + 1 + Target device: + True + + + 3 + 4 + GTK_FILL + + - + + True + 1 + Target type: + True + + + 2 + 3 + GTK_FILL + + + + + + True + 1 + Source path: + True + + + 1 + 2 + GTK_FILL + + + + + + True + 1 + Source type: + True + GTK_JUSTIFY_RIGHT + + + GTK_FILL + + + + + + True + 0 + label402 + True + PANGO_ELLIPSIZE_START + + + 1 + 2 + 1 + 2 + + @@ -2259,7 +2464,6 @@ I/O: False False 15 - 0 @@ -2280,7 +2484,6 @@ I/O: False False - 0 @@ -2312,21 +2515,20 @@ I/O: True 6 - end + GTK_BUTTONBOX_END - gtk-remove True True True - False + gtk-remove True + 0 False False - 0 @@ -2339,12 +2541,12 @@ I/O: True 5 - end + GTK_BUTTONBOX_END False False - end + GTK_PACK_END 2 @@ -2359,9 +2561,9 @@ I/O: Disk + tab 5 False - tab @@ -2371,7 +2573,7 @@ I/O: True 0 - none + GTK_SHADOW_NONE True @@ -2387,24 +2589,75 @@ I/O: 8 4 - + True - 1 - Source type: - True + 0 + True + 1 + 2 + 2 + 3 GTK_FILL - + True 1 - Source device: + Source model: + 2 + 3 + GTK_FILL + + + + + + True + 1 + MAC address: + True + network-mac-address + + + 3 + 4 + GTK_FILL + + + + + + True + True + False + + MAC Address Field + + + + 1 + 2 + 3 + 4 + + + + + + True + 0 + label401 + True + + + 1 + 2 1 2 GTK_FILL @@ -2426,15 +2679,12 @@ I/O: - + True - 0 - label401 - True + 1 + Source device: - 1 - 2 1 2 GTK_FILL @@ -2442,61 +2692,13 @@ I/O: - - True - True - False - - MAC Address Field - - - - 1 - 2 - 3 - 4 - - - - - + True 1 - MAC address: + Source type: True - network-mac-address - 3 - 4 - GTK_FILL - - - - - - True - 1 - Source model: - - - 2 - 3 - GTK_FILL - - - - - - True - 0 - True - - - 1 - 2 - 2 - 3 GTK_FILL @@ -2520,7 +2722,6 @@ I/O: False False 15 - 0 @@ -2541,7 +2742,6 @@ I/O: False False - 0 @@ -2573,21 +2773,20 @@ I/O: True 6 - end + GTK_BUTTONBOX_END - gtk-remove True True True - False + gtk-remove True + 0 False False - 0 @@ -2608,9 +2807,9 @@ I/O: Net + tab 6 False - tab @@ -2620,7 +2819,7 @@ I/O: True 0 - none + GTK_SHADOW_NONE True @@ -2636,27 +2835,15 @@ I/O: 8 4 - + True - 1 - Type: - True + 0 + label403 + True - GTK_FILL - - - - - - True - 1 - Mode: - - - 1 - 2 - GTK_FILL + 1 + 2 @@ -2677,15 +2864,27 @@ I/O: - + True - 0 - label403 - True + 1 + Mode: - 1 - 2 + 1 + 2 + GTK_FILL + + + + + + True + 1 + Type: + True + + + GTK_FILL @@ -2708,7 +2907,6 @@ I/O: False False 15 - 0 @@ -2729,7 +2927,6 @@ I/O: False False - 0 @@ -2761,21 +2958,20 @@ I/O: True 6 - end + GTK_BUTTONBOX_END - gtk-remove True True True - False + gtk-remove True + 0 False False - 0 @@ -2796,9 +2992,9 @@ I/O: Input + tab 7 False - tab @@ -2808,7 +3004,7 @@ I/O: True 0 - none + GTK_SHADOW_NONE True @@ -2824,29 +3020,12 @@ I/O: 8 4 - + True - 0 - label403 - True + 1 + Keymap: - 1 - 2 - - 1 - - - - - True - 0 - keylabel - True - - - 1 - 2 4 5 GTK_FILL @@ -2854,15 +3033,12 @@ I/O: - + True - 0 - label401 - True + 1 + Password: - 1 - 2 3 4 GTK_FILL @@ -2870,15 +3046,37 @@ I/O: - + True - 0 - label401 - True + 1 + Type: + True + + + GTK_FILL + + + + + + True + 1 + Address: + + + 1 + 2 + GTK_FILL + + + + + + True + 1 + Port: - 1 - 2 2 3 GTK_FILL @@ -2902,12 +3100,15 @@ I/O: - + True - 1 - Port: + 0 + label401 + True + 1 + 2 2 3 GTK_FILL @@ -2915,37 +3116,15 @@ I/O: - + True - 1 - Address: - - - 1 - 2 - GTK_FILL - - - - - - True - 1 - Type: - True - - - GTK_FILL - - - - - - True - 1 - Password: + 0 + label401 + True + 1 + 2 3 4 GTK_FILL @@ -2953,18 +3132,35 @@ I/O: - + True - 1 - Keymap: + 0 + keylabel + True + 1 + 2 4 5 GTK_FILL + + + True + 0 + label403 + True + + + 1 + 2 + + 1 + + @@ -2982,28 +3178,26 @@ I/O: 15 - 0 True 6 - end + GTK_BUTTONBOX_END - gtk-remove True True True - False + gtk-remove True + 0 False False - 0 @@ -3023,9 +3217,9 @@ I/O: Graphics + tab 8 False - tab @@ -3035,7 +3229,7 @@ I/O: True 0 - none + GTK_SHADOW_NONE True @@ -3049,17 +3243,6 @@ I/O: 2 8 4 - - - True - 0 - Device Model: - - - GTK_FILL - - - True @@ -3075,6 +3258,17 @@ I/O: 1 + + + True + 0 + Device Model: + + + GTK_FILL + + + @@ -3092,28 +3286,26 @@ I/O: 15 - 0 True 6 - end + GTK_BUTTONBOX_END - gtk-remove True True True - False + gtk-remove True + 0 False False - 0 @@ -3133,9 +3325,9 @@ I/O: Sound + tab 9 False - tab @@ -3145,7 +3337,7 @@ I/O: True 0 - none + GTK_SHADOW_NONE True @@ -3159,52 +3351,17 @@ I/O: 8 4 - - True - 1 - Device Type: - - - GTK_FILL - - - - - - True - 1 - Target Port: - - - 1 - 2 - GTK_FILL - - - - - - True - 1 - Source Path: - - - 2 - 3 - GTK_FILL - - - - - + True 0 - label506 + label508 True 1 2 + 2 + 3 GTK_FILL @@ -3226,21 +3383,56 @@ I/O: - + True 0 - label508 + label506 True 1 2 + GTK_FILL + + + + + + True + 1 + Source Path: + + 2 3 GTK_FILL + + + True + 1 + Target Port: + + + 1 + 2 + GTK_FILL + + + + + + True + 1 + Device Type: + + + GTK_FILL + + + @@ -3258,28 +3450,26 @@ I/O: 15 - 0 True 6 - end + GTK_BUTTONBOX_END - gtk-remove True True True - False + gtk-remove True + 0 False False - 0 @@ -3299,9 +3489,9 @@ I/O: Char + tab 10 False - tab @@ -3311,7 +3501,7 @@ I/O: True 0 - none + GTK_SHADOW_NONE True @@ -3325,7 +3515,44 @@ I/O: 8 4 - + + True + 1 + Source Device: + + + 2 + 3 + GTK_FILL + GTK_FILL + + + + + True + 1 + Device Type: + + + GTK_FILL + + + + + + True + 1 + Device Mode: + + + 1 + 2 + GTK_FILL + + + + + True 0 label @@ -3333,8 +3560,6 @@ I/O: 1 2 - 2 - 3 @@ -3353,7 +3578,7 @@ I/O: - + True 0 label @@ -3361,44 +3586,9 @@ I/O: 1 2 - - - - - - True - 1 - Device Mode: - - - 1 - 2 - GTK_FILL - - - - - - True - 1 - Device Type: - - - GTK_FILL - - - - - - True - 1 - Source Device: - - 2 3 - GTK_FILL - GTK_FILL + @@ -3418,28 +3608,26 @@ I/O: 15 - 0 True 6 - end + GTK_BUTTONBOX_END - gtk-remove True True True - False + gtk-remove True + 0 False False - 0 @@ -3459,9 +3647,9 @@ I/O: Hostdev + tab 11 False - tab @@ -3485,9 +3673,9 @@ I/O: Details + tab 1 False - tab