All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Paravirt framebuffer support in xend [3/5]
@ 2006-09-02 19:58 Jeremy Katz
  2006-09-04  9:02 ` Steven Smith
  2006-09-14 19:27 ` Daniel P. Berrange
  0 siblings, 2 replies; 8+ messages in thread
From: Jeremy Katz @ 2006-09-02 19:58 UTC (permalink / raw)
  To: xen-devel; +Cc: Markus Armbruster

[-- Attachment #1: Type: text/plain, Size: 426 bytes --]

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@redhat.com>

[-- Attachment #2: xen-pvfb-3.patch --]
[-- Type: text/x-patch, Size: 4946 bytes --]

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
 
 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):
+        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):
+        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
         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]])
 
 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]])

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-09-14 19:27 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-02 19:58 [PATCH] Paravirt framebuffer support in xend [3/5] Jeremy Katz
2006-09-04  9:02 ` Steven Smith
2006-09-05 16:11   ` Jeremy Katz
2006-09-06  9:17     ` Steven Smith
2006-09-06 11:43       ` sos22-xen
2006-09-06 13:59       ` Jeremy Katz
2006-09-07  8:01         ` Steven Smith
2006-09-14 19:27 ` Daniel P. Berrange

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.