Added "Open console" action to Qube Manager
The action uses qvm-console-dispvm. fixes QubesOS/qubes-issues#4544
This commit is contained in:
		
							parent
							
								
									cf3f102ed7
								
							
						
					
					
						commit
						5c82ad5a29
					
				@ -418,6 +418,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtWidgets.QMainWindow):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        self.context_menu.addAction(self.action_updatevm)
 | 
					        self.context_menu.addAction(self.action_updatevm)
 | 
				
			||||||
        self.context_menu.addAction(self.action_run_command_in_vm)
 | 
					        self.context_menu.addAction(self.action_run_command_in_vm)
 | 
				
			||||||
 | 
					        self.context_menu.addAction(self.action_open_console)
 | 
				
			||||||
        self.context_menu.addAction(self.action_resumevm)
 | 
					        self.context_menu.addAction(self.action_resumevm)
 | 
				
			||||||
        self.context_menu.addAction(self.action_startvm_tools_install)
 | 
					        self.context_menu.addAction(self.action_startvm_tools_install)
 | 
				
			||||||
        self.context_menu.addAction(self.action_pausevm)
 | 
					        self.context_menu.addAction(self.action_pausevm)
 | 
				
			||||||
@ -773,6 +774,8 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtWidgets.QMainWindow):
 | 
				
			|||||||
                                            or vm.qid == 0)
 | 
					                                            or vm.qid == 0)
 | 
				
			||||||
            self.action_run_command_in_vm.setEnabled(
 | 
					            self.action_run_command_in_vm.setEnabled(
 | 
				
			||||||
                not vm.get_power_state() == "Paused" and vm.qid != 0)
 | 
					                not vm.get_power_state() == "Paused" and vm.qid != 0)
 | 
				
			||||||
 | 
					            self.action_open_console.setEnabled(
 | 
				
			||||||
 | 
					                not vm.get_power_state() == "Paused" and vm.qid != 0)
 | 
				
			||||||
            self.action_set_keyboard_layout.setEnabled(
 | 
					            self.action_set_keyboard_layout.setEnabled(
 | 
				
			||||||
                vm.qid != 0 and
 | 
					                vm.qid != 0 and
 | 
				
			||||||
                vm.get_power_state() != "Paused" and vm.is_running())
 | 
					                vm.get_power_state() != "Paused" and vm.is_running())
 | 
				
			||||||
@ -789,6 +792,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtWidgets.QMainWindow):
 | 
				
			|||||||
            self.action_editfwrules.setEnabled(False)
 | 
					            self.action_editfwrules.setEnabled(False)
 | 
				
			||||||
            self.action_updatevm.setEnabled(False)
 | 
					            self.action_updatevm.setEnabled(False)
 | 
				
			||||||
            self.action_run_command_in_vm.setEnabled(False)
 | 
					            self.action_run_command_in_vm.setEnabled(False)
 | 
				
			||||||
 | 
					            self.action_open_console.setEnabled(False)
 | 
				
			||||||
            self.action_set_keyboard_layout.setEnabled(False)
 | 
					            self.action_set_keyboard_layout.setEnabled(False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.update_logs_menu()
 | 
					        self.update_logs_menu()
 | 
				
			||||||
@ -1113,6 +1117,15 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtWidgets.QMainWindow):
 | 
				
			|||||||
        thread.finished.connect(self.clear_threads)
 | 
					        thread.finished.connect(self.clear_threads)
 | 
				
			||||||
        thread.start()
 | 
					        thread.start()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # noinspection PyArgumentList
 | 
				
			||||||
 | 
					    @QtCore.pyqtSlot(name='on_action_open_console_triggered')
 | 
				
			||||||
 | 
					    def action_open_console_triggered(self):
 | 
				
			||||||
 | 
					        # pylint: disable=invalid-name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        vm = self.get_selected_vm()
 | 
				
			||||||
 | 
					        subprocess.Popen(['qvm-console-dispvm', vm.name],
 | 
				
			||||||
 | 
					                         stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # noinspection PyArgumentList
 | 
					    # noinspection PyArgumentList
 | 
				
			||||||
    @QtCore.pyqtSlot(name='on_action_set_keyboard_layout_triggered')
 | 
					    @QtCore.pyqtSlot(name='on_action_set_keyboard_layout_triggered')
 | 
				
			||||||
    def action_set_keyboard_layout_triggered(self):
 | 
					    def action_set_keyboard_layout_triggered(self):
 | 
				
			||||||
 | 
				
			|||||||
@ -24,8 +24,7 @@
 | 
				
			|||||||
  </property>
 | 
					  </property>
 | 
				
			||||||
  <property name="windowIcon">
 | 
					  <property name="windowIcon">
 | 
				
			||||||
   <iconset theme="qubes-manager">
 | 
					   <iconset theme="qubes-manager">
 | 
				
			||||||
    <normaloff/>
 | 
					    <normaloff>.</normaloff>.</iconset>
 | 
				
			||||||
   </iconset>
 | 
					 | 
				
			||||||
  </property>
 | 
					  </property>
 | 
				
			||||||
  <property name="locale">
 | 
					  <property name="locale">
 | 
				
			||||||
   <locale language="English" country="UnitedStates"/>
 | 
					   <locale language="English" country="UnitedStates"/>
 | 
				
			||||||
@ -53,7 +52,16 @@
 | 
				
			|||||||
    <property name="sizeConstraint">
 | 
					    <property name="sizeConstraint">
 | 
				
			||||||
     <enum>QLayout::SetDefaultConstraint</enum>
 | 
					     <enum>QLayout::SetDefaultConstraint</enum>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
    <property name="margin">
 | 
					    <property name="leftMargin">
 | 
				
			||||||
 | 
					     <number>0</number>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="topMargin">
 | 
				
			||||||
 | 
					     <number>0</number>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="rightMargin">
 | 
				
			||||||
 | 
					     <number>0</number>
 | 
				
			||||||
 | 
					    </property>
 | 
				
			||||||
 | 
					    <property name="bottomMargin">
 | 
				
			||||||
     <number>0</number>
 | 
					     <number>0</number>
 | 
				
			||||||
    </property>
 | 
					    </property>
 | 
				
			||||||
    <property name="spacing">
 | 
					    <property name="spacing">
 | 
				
			||||||
@ -141,10 +149,10 @@
 | 
				
			|||||||
      <attribute name="horizontalHeaderCascadingSectionResizes">
 | 
					      <attribute name="horizontalHeaderCascadingSectionResizes">
 | 
				
			||||||
       <bool>false</bool>
 | 
					       <bool>false</bool>
 | 
				
			||||||
      </attribute>
 | 
					      </attribute>
 | 
				
			||||||
      <attribute name="horizontalHeaderDefaultSectionSize">
 | 
					      <attribute name="horizontalHeaderMinimumSectionSize">
 | 
				
			||||||
       <number>150</number>
 | 
					       <number>150</number>
 | 
				
			||||||
      </attribute>
 | 
					      </attribute>
 | 
				
			||||||
      <attribute name="horizontalHeaderMinimumSectionSize">
 | 
					      <attribute name="horizontalHeaderDefaultSectionSize">
 | 
				
			||||||
       <number>150</number>
 | 
					       <number>150</number>
 | 
				
			||||||
      </attribute>
 | 
					      </attribute>
 | 
				
			||||||
      <attribute name="verticalHeaderVisible">
 | 
					      <attribute name="verticalHeaderVisible">
 | 
				
			||||||
@ -263,7 +271,7 @@ Template</string>
 | 
				
			|||||||
     <x>0</x>
 | 
					     <x>0</x>
 | 
				
			||||||
     <y>0</y>
 | 
					     <y>0</y>
 | 
				
			||||||
     <width>1100</width>
 | 
					     <width>1100</width>
 | 
				
			||||||
     <height>23</height>
 | 
					     <height>24</height>
 | 
				
			||||||
    </rect>
 | 
					    </rect>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <property name="contextMenuPolicy">
 | 
					   <property name="contextMenuPolicy">
 | 
				
			||||||
@ -332,6 +340,7 @@ Template</string>
 | 
				
			|||||||
    <addaction name="action_appmenus"/>
 | 
					    <addaction name="action_appmenus"/>
 | 
				
			||||||
    <addaction name="action_updatevm"/>
 | 
					    <addaction name="action_updatevm"/>
 | 
				
			||||||
    <addaction name="action_run_command_in_vm"/>
 | 
					    <addaction name="action_run_command_in_vm"/>
 | 
				
			||||||
 | 
					    <addaction name="action_open_console"/>
 | 
				
			||||||
    <addaction name="action_set_keyboard_layout"/>
 | 
					    <addaction name="action_set_keyboard_layout"/>
 | 
				
			||||||
    <addaction name="separator"/>
 | 
					    <addaction name="separator"/>
 | 
				
			||||||
    <addaction name="logs_menu"/>
 | 
					    <addaction name="logs_menu"/>
 | 
				
			||||||
@ -385,6 +394,7 @@ Template</string>
 | 
				
			|||||||
   <addaction name="action_appmenus"/>
 | 
					   <addaction name="action_appmenus"/>
 | 
				
			||||||
   <addaction name="action_updatevm"/>
 | 
					   <addaction name="action_updatevm"/>
 | 
				
			||||||
   <addaction name="action_set_keyboard_layout"/>
 | 
					   <addaction name="action_set_keyboard_layout"/>
 | 
				
			||||||
 | 
					   <addaction name="action_open_console"/>
 | 
				
			||||||
   <addaction name="separator"/>
 | 
					   <addaction name="separator"/>
 | 
				
			||||||
   <addaction name="action_global_settings"/>
 | 
					   <addaction name="action_global_settings"/>
 | 
				
			||||||
   <addaction name="action_backup"/>
 | 
					   <addaction name="action_backup"/>
 | 
				
			||||||
@ -720,8 +730,7 @@ Template</string>
 | 
				
			|||||||
  <action name="action_about_qubes">
 | 
					  <action name="action_about_qubes">
 | 
				
			||||||
   <property name="icon">
 | 
					   <property name="icon">
 | 
				
			||||||
    <iconset theme="qubes-manager">
 | 
					    <iconset theme="qubes-manager">
 | 
				
			||||||
     <normaloff/>
 | 
					     <normaloff>.</normaloff>.</iconset>
 | 
				
			||||||
    </iconset>
 | 
					 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
   <property name="text">
 | 
					   <property name="text">
 | 
				
			||||||
    <string>&Qubes OS</string>
 | 
					    <string>&Qubes OS</string>
 | 
				
			||||||
@ -890,6 +899,19 @@ Template</string>
 | 
				
			|||||||
    <string>Virtualization Mode</string>
 | 
					    <string>Virtualization Mode</string>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
  </action>
 | 
					  </action>
 | 
				
			||||||
 | 
					  <action name="action_open_console">
 | 
				
			||||||
 | 
					   <property name="icon">
 | 
				
			||||||
 | 
					    <iconset resource="../resources.qrc">
 | 
				
			||||||
 | 
					     <normaloff>:/log.png</normaloff>
 | 
				
			||||||
 | 
					     <normalon>:/log.png</normalon>:/log.png</iconset>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="text">
 | 
				
			||||||
 | 
					    <string>Open console in qube</string>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="toolTip">
 | 
				
			||||||
 | 
					    <string>Open a secure Xen console in the qube. Useful chiefly for debugging purposes: for normal operation, use "Run Terminal" from the Domains widget. </string>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					  </action>
 | 
				
			||||||
 </widget>
 | 
					 </widget>
 | 
				
			||||||
 <resources>
 | 
					 <resources>
 | 
				
			||||||
  <include location="../resources.qrc"/>
 | 
					  <include location="../resources.qrc"/>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user