diff -r 103a9f38f17f -r 5c452351be21 tools/python/xen/xend/image.py --- a/tools/python/xen/xend/image.py Fri Aug 18 16:20:27 2006 -0400 +++ b/tools/python/xen/xend/image.py Fri Aug 18 16:20:59 2006 -0400 @@ -20,6 +20,7 @@ import os, string import os, string import re import math +import signal import xen.lowlevel.xc from xen.xend import sxp @@ -190,6 +191,65 @@ class LinuxImageHandler(ImageHandler): cmdline = self.cmdline, ramdisk = self.ramdisk, features = self.vm.getFeatures()) + + def configure(self, imageConfig, deviceConfig): + ImageHandler.configure(self, imageConfig, deviceConfig) + + self.pid = 0 + log.info("configuring linux guest") + + # set up the graphics bits. + # FIXME: this is much like what we do for HVM, should it be + # for all image types now? + self.display = sxp.child_value(imageConfig, 'display') + self.xauthority = sxp.child_value(imageConfig, 'xauthority') + self.vncconsole = sxp.child_value(imageConfig, 'vncconsole') + self.vnc = sxp.child_value(imageConfig, 'vnc') + self.sdl = sxp.child_value(imageConfig, 'sdl') + if self.vnc: + self.vncdisplay = sxp.child_value(imageConfig, 'vncdisplay', + int(self.vm.getDomid())) + self.vncunused = sxp.child_value(imageConfig, 'vncunused') + if self.vnc or self.sdl: + log.info("setting use_graphics") + self.vm.writeDom("console/use_graphics", "1") + else: + self.vm.writeDom("console/use_graphics", "0") + + def createDeviceModel(self): + if self.pid: + return + # Execute device model (for us, it's just the fb frontend) + if not self.vnc and not self.sdl: + return + + if self.vnc: + args = ["/usr/lib/xen/bin/xen-vncfb"] + if self.vncdisplay: + p = 5900 + self.vncdisplay + else: + p = 5900 + self.vm.getDomid() + args = args + [ "--vncport", "%d" % (p,) ] + self.vm.writeDom("console/vnc-port", "p") + elif self.sdl: + args = ["/usr/lib/xen/bin/xen-sdlfb"] + args = args + [ "--domid", "%d" % self.vm.getDomid(), + "--title", self.vm.info['name'] ] + env = dict(os.environ) + if self.display: + env['DISPLAY'] = self.display + if self.xauthority: + env['XAUTHORITY'] = self.xauthority + log.info("spawning video: %s", args) + self.pid = os.spawnve(os.P_NOWAIT, args[0], args, env) + log.info("device model pid: %d", self.pid) + + def destroy(self): + if not self.pid: + return + os.kill(self.pid, signal.SIGKILL) + os.waitpid(self.pid, 0) + self.pid = 0 class HVMImageHandler(ImageHandler): @@ -342,7 +402,6 @@ class HVMImageHandler(ImageHandler): def destroy(self): self.unregister_shutdown_watch(); - import signal if not self.pid: return os.kill(self.pid, signal.SIGKILL) diff -r 103a9f38f17f -r 5c452351be21 tools/python/xen/xm/create.py --- a/tools/python/xen/xm/create.py Fri Aug 18 16:20:27 2006 -0400 +++ b/tools/python/xen/xm/create.py Fri Aug 18 16:20:59 2006 -0400 @@ -479,6 +479,8 @@ def configure_image(vals): if vals.builder == 'hvm': configure_hvm(config_image, vals) + + configure_graphics(config_image, vals) return config_image @@ -626,14 +628,21 @@ def configure_vifs(config_devs, vals): map(f, d.keys()) config_devs.append(['device', config_vif]) +def configure_graphics(config_image, vals): + """Create the config for graphic consoles. + """ + args = [ 'vnc', 'vncdisplay', 'vncconsole', 'vncunused', + 'sdl', 'display', 'xauthority' ] + for a in args: + if (vals.__dict__[a]): + config_image.append([a, vals.__dict__[a]]) def configure_hvm(config_image, vals): """Create the config for HVM devices. """ args = [ 'device_model', 'pae', 'vcpus', 'boot', 'fda', 'fdb', 'localtime', 'serial', 'stdvga', 'isa', 'nographic', 'soundhw', - 'vnc', 'vncdisplay', 'vncunused', 'vncconsole', 'sdl', 'display', - 'acpi', 'apic', 'xauthority', 'usb', 'usbdevice' ] + 'acpi', 'apic', 'usb', 'usbdevice' ] for a in args: if (vals.__dict__[a]): config_image.append([a, vals.__dict__[a]])