[Spice-devel] [xspice 6/6] Add a --xsession option, to allow for an automatic start of an xsession script

Jeremy White jwhite at codeweavers.com
Thu Mar 14 11:00:11 PDT 2013


Signed-off-by: Jeremy White <jwhite at codeweavers.com>
---
 scripts/Xspice |   28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/scripts/Xspice b/scripts/Xspice
index d7b3887..9917aca 100755
--- a/scripts/Xspice
+++ b/scripts/Xspice
@@ -20,6 +20,7 @@ import argparse
 import os
 import sys
 import tempfile
+import time
 
 def which(x):
     for p in os.environ['PATH'].split(':'):
@@ -46,6 +47,7 @@ parser = argparse.ArgumentParser("Xspice",
     epilog="Any options not parsed by Xspice get passed to Xorg as is.")
 parser.add_argument('--xorg', default=which('Xorg'))
 parser.add_argument('--auto', action='store_true', help='Automatically create a temporary xorg.conf and start the X server')
+parser.add_argument('--xsession', help='If given, will run after Xorg launch.  Should be a program like x-session-manager')
 parser.add_argument('--config', default='spiceqxl.xorg.conf')
 # Don't use any options that are already used by Xorg (unless we must)
 # specifically, don't use -p and -s.
@@ -185,17 +187,33 @@ for arg in var_args:
             a = str(a)
         os.environ['XSPICE_' + arg.upper()] = a
 
+display=""
+for arg in xorg_args:
+    if arg.startswith(":"):
+        display = arg
+
 exec_args = [args.xorg, '-config', args.config]
 if cgdb and args.cgdb:
     exec_args = [cgdb, '--args'] + exec_args
     args.xorg = cgdb
 
 xpid = os.spawnv(os.P_NOWAIT, args.xorg, exec_args + xorg_args)
-try:
-    os.waitpid(xpid, 0)
-except KeyboardInterrupt:
-# Catch Ctrl-C so we clean up the log file in that case
-    print "Keyboard Interrupt"
+time.sleep(2)
+
+retpid,rc = os.waitpid(xpid, os.WNOHANG)
+if retpid != 0:
+    print "Error: X server is not running"
+else:
+    if args.xsession:
+        environ = os.environ
+        environ ['DISPLAY'] = display
+        os.spawnlpe(os.P_NOWAIT, args.xsession, environ)
+
+    try:
+        os.waitpid(xpid, 0)
+    except KeyboardInterrupt:
+    # Catch Ctrl-C so we clean up the log file in that case
+        print "Keyboard Interrupt"
 
 if args.auto:
     if os.path.isfile(cf.name + ".log"):
-- 
1.7.10.4




More information about the Spice-devel mailing list