mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
serialcon: Fix serial reopening when VM reboots
This commit is contained in:
parent
d052b6a829
commit
4570afd1dc
@ -1194,8 +1194,6 @@ class vmmDomain(vmmDomainBase):
|
|||||||
"netRxRate" : 10.0,
|
"netRxRate" : 10.0,
|
||||||
}
|
}
|
||||||
|
|
||||||
self._update_status()
|
|
||||||
|
|
||||||
self.config.on_stats_enable_net_poll_changed(
|
self.config.on_stats_enable_net_poll_changed(
|
||||||
self.toggle_sample_network_traffic)
|
self.toggle_sample_network_traffic)
|
||||||
self.config.on_stats_enable_disk_poll_changed(
|
self.config.on_stats_enable_disk_poll_changed(
|
||||||
@ -1217,6 +1215,7 @@ class vmmDomain(vmmDomainBase):
|
|||||||
self._backend)
|
self._backend)
|
||||||
|
|
||||||
# Hook up our own status listeners
|
# Hook up our own status listeners
|
||||||
|
self._update_status()
|
||||||
self.connect("status-changed", self._update_start_vcpus)
|
self.connect("status-changed", self._update_start_vcpus)
|
||||||
|
|
||||||
##########################
|
##########################
|
||||||
@ -1959,6 +1958,11 @@ class vmmDomain(vmmDomainBase):
|
|||||||
if status != self.lastStatus:
|
if status != self.lastStatus:
|
||||||
oldstatus = self.lastStatus
|
oldstatus = self.lastStatus
|
||||||
self.lastStatus = status
|
self.lastStatus = status
|
||||||
|
|
||||||
|
# Send 'config-changed' before a status-update, so users
|
||||||
|
# are operating with fresh XML
|
||||||
|
self.refresh_xml()
|
||||||
|
|
||||||
util.safe_idle_add(util.idle_emit, self, "status-changed",
|
util.safe_idle_add(util.idle_emit, self, "status-changed",
|
||||||
oldstatus, status)
|
oldstatus, status)
|
||||||
|
|
||||||
|
@ -64,7 +64,9 @@ class vmmSerialConsole(gtk.HBox):
|
|||||||
|
|
||||||
self.connect("realize", self.handle_realize)
|
self.connect("realize", self.handle_realize)
|
||||||
self.connect("unrealize", self.handle_unrealize)
|
self.connect("unrealize", self.handle_unrealize)
|
||||||
|
self.vm.connect("config-changed", self.update_tty_path)
|
||||||
self.vm.connect("status-changed", self.vm_status_changed)
|
self.vm.connect("status-changed", self.vm_status_changed)
|
||||||
|
self.update_tty_path(self.vm)
|
||||||
|
|
||||||
def handle_realize(self, ignore=None):
|
def handle_realize(self, ignore=None):
|
||||||
self.opentty()
|
self.opentty()
|
||||||
@ -72,14 +74,14 @@ class vmmSerialConsole(gtk.HBox):
|
|||||||
def handle_unrealize(self, src=None, ignore=None):
|
def handle_unrealize(self, src=None, ignore=None):
|
||||||
self.closetty()
|
self.closetty()
|
||||||
|
|
||||||
def vm_status_changed(self, src, status, ignore):
|
def vm_status_changed(self, src, oldstatus_ignore, status):
|
||||||
if status in [ libvirt.VIR_DOMAIN_RUNNING ]:
|
if status in [ libvirt.VIR_DOMAIN_RUNNING ]:
|
||||||
self.opentty()
|
self.opentty()
|
||||||
else:
|
else:
|
||||||
self.closetty()
|
self.closetty()
|
||||||
|
|
||||||
def get_tty_path(self):
|
def update_tty_path(self, vm):
|
||||||
serials = self.vm.get_serial_devs()
|
serials = vm.get_serial_devs()
|
||||||
for s in serials:
|
for s in serials:
|
||||||
port = s[3]
|
port = s[3]
|
||||||
path = s[2]
|
path = s[2]
|
||||||
@ -87,25 +89,27 @@ class vmmSerialConsole(gtk.HBox):
|
|||||||
if path != self.ttypath:
|
if path != self.ttypath:
|
||||||
logging.debug("Serial console '%s' path changed to %s."
|
logging.debug("Serial console '%s' path changed to %s."
|
||||||
% (self.target_port, path))
|
% (self.target_port, path))
|
||||||
|
self.ttypath = path
|
||||||
|
return
|
||||||
|
|
||||||
return path
|
logging.debug("No devices found for serial target port '%s'." %
|
||||||
|
|
||||||
logging.debug("No serial devices found for serial console '%s'." %
|
|
||||||
self.target_port)
|
self.target_port)
|
||||||
return None
|
self.ttypath = None
|
||||||
|
|
||||||
def opentty(self):
|
def opentty(self):
|
||||||
if self.ptyio != None:
|
if self.ptyio != None:
|
||||||
self.closetty()
|
self.closetty()
|
||||||
|
|
||||||
self.ttypath = self.get_tty_path()
|
|
||||||
ipty = self.ttypath
|
ipty = self.ttypath
|
||||||
|
logging.debug("Opening serial tty path: %s" % self.ttypath)
|
||||||
if ipty == None:
|
if ipty == None:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.ptyio = pty.slave_open(ipty)
|
self.ptyio = pty.slave_open(ipty)
|
||||||
fcntl.fcntl(self.ptyio, fcntl.F_SETFL, os.O_NONBLOCK)
|
fcntl.fcntl(self.ptyio, fcntl.F_SETFL, os.O_NONBLOCK)
|
||||||
self.ptysrc = gobject.io_add_watch(self.ptyio, gobject.IO_IN | gobject.IO_ERR | gobject.IO_HUP, self.display_data)
|
self.ptysrc = gobject.io_add_watch(self.ptyio,
|
||||||
|
gobject.IO_IN | gobject.IO_ERR | gobject.IO_HUP,
|
||||||
|
self.display_data)
|
||||||
|
|
||||||
# Save term settings & set to raw mode
|
# Save term settings & set to raw mode
|
||||||
self.ptytermios = termios.tcgetattr(self.ptyio)
|
self.ptytermios = termios.tcgetattr(self.ptyio)
|
||||||
|
Loading…
Reference in New Issue
Block a user