> Add support in xend and xm to know about the vnc and sdl options for PV
> domains. Launch xen-sdlfb or xen-vncfb if we're setting up a graphics
> console. Also, if we're going to use a graphical console in the guest,
> set /<dompath>/console/use_graphics to 1.
>
> (Note: this patch requires a tiny bit of obvious change to work with my
> patch for vnclisten that I posted earlier today)
>
> Signed-off-by: Jeremy Katz <katzj@xxxxxxxxxx>
> diff -r a2a8f1ed16ea -r 2b360c6b44fa tools/python/xen/xend/image.py
> --- a/tools/python/xen/xend/image.py Sat Sep 02 15:22:19 2006 -0400
> +++ b/tools/python/xen/xend/image.py Sat Sep 02 15:23:32 2006 -0400
> @@ -20,8 +20,10 @@ import os, string
> import os, string
> import re
> import math
> +import signal
Why?
>
> import xen.lowlevel.xc
> +import xen.util.auxbin
> from xen.xend import sxp
> from xen.xend.XendError import VmError
> from xen.xend.XendLogging import log
> @@ -189,6 +191,68 @@ class LinuxImageHandler(ImageHandler):
> cmdline = self.cmdline,
> ramdisk = self.ramdisk,
> features = self.vm.getFeatures())
> +
> + def configure(self, imageConfig, deviceConfig):
Does this really belong in class LinuxImageHandler?
> + 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')
> + self.vnclisten = sxp.child_value(imageConfig, 'vnclisten')
> + 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):
Maybe call ImageHandler.createDeviceModel?
> + 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 = [xen.util.auxbin.pathTo("xen-vncfb")]
> + if self.vncunused:
> + args += ['--unused']
> + elif self.vncdisplay:
> + args += [ "--vncport", "%d" %(5900 + self.vncdisplay,) ]
> + if self.vnclisten:
> + args += [ "--listen", self.vnclisten ]
> + if self.vncconsole:
> + args += [ "--vncviewer" ]
> + elif self.sdl:
> + args = [xen.util.auxbin.pathTo("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 PPC_LinuxImageHandler(LinuxImageHandler):
>
> @@ -371,7 +435,6 @@ class HVMImageHandler(ImageHandler):
>
> def destroy(self):
> self.unregister_shutdown_watch();
> - import signal
Why?
> if not self.pid:
> return
> os.kill(self.pid, signal.SIGKILL)
> diff -r a2a8f1ed16ea -r 2b360c6b44fa tools/python/xen/xm/create.py
> --- a/tools/python/xen/xm/create.py Sat Sep 02 15:22:19 2006 -0400
> +++ b/tools/python/xen/xm/create.py Sat Sep 02 15:23:32 2006 -0400
> @@ -483,6 +483,8 @@ def configure_image(vals):
>
> if vals.builder == 'hvm':
> configure_hvm(config_image, vals)
> +
> + configure_graphics(config_image, vals)
>
> return config_image
>
> @@ -630,14 +632,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]])
This looks very wrong. What is it trying to do? Why do these parameters
need to be handled differently from the ones in configure_image?
>
> 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]])
Steven.
signature.asc
Description: Digital signature
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|