[Spice-devel] [xspice 4/6] Add a '--auto' flag to create a temporary xorg.conf file.

Alon Levy alevy at redhat.com
Thu Mar 14 11:57:49 PDT 2013


> Signed-off-by: Jeremy White <jwhite at codeweavers.com>
> ---
>  scripts/Xspice |   59
>  +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 58 insertions(+), 1 deletion(-)
> 
> diff --git a/scripts/Xspice b/scripts/Xspice
> index 1686f9e..32219b4 100755
> --- a/scripts/Xspice
> +++ b/scripts/Xspice
> @@ -19,6 +19,7 @@ which can be overridden as well.
>  import argparse
>  import os
>  import sys
> +import tempfile
>  
>  def which(x):
>      for p in os.environ['PATH'].split(':'):
> @@ -44,6 +45,7 @@ parser = argparse.ArgumentParser("Xspice",
>      usage="Xspice [Xspice and Xorg options intermixed]",
>      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('--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.
> @@ -119,6 +121,52 @@ def error(msg, exit_code=1):
>  if not args.xorg:
>      error("Xorg missing")
>  
> +if args.auto:
> +    cf = tempfile.NamedTemporaryFile(prefix="Xspice-", delete=True)
> +    args.config = cf.name
> +    xorg_args = [ '-logfile', cf.name + ".log" ] + xorg_args
> +    cf.write("""
> +Section "Device"
> +    Identifier "XSPICE"
> +    Driver "spiceqxl"
> +EndSection
> +
> +Section "InputDevice"
> +    Identifier "XSPICE POINTER"
> +    Driver     "xspice pointer"
> +EndSection
> +
> +Section "InputDevice"
> +    Identifier "XSPICE KEYBOARD"
> +    Driver     "xspice keyboard"
> +EndSection
> +
> +Section "Monitor"
> +    Identifier    "Configured Monitor"
> +EndSection
> +
> +Section "Screen"
> +    Identifier     "XSPICE Screen"
> +    Monitor        "Configured Monitor"
> +    Device         "XSPICE"
> +EndSection
> +
> +Section "ServerLayout"
> +    Identifier "XSPICE Example"
> +    Screen "XSPICE Screen"
> +    InputDevice "XSPICE KEYBOARD"
> +    InputDevice "XSPICE POINTER"
> +EndSection
> +
> +# Prevent udev from loading vmmouse in a vm and crashing.
> +Section "ServerFlags"
> +    Option "AutoAddDevices" "False"
> +EndSection
> +
> +
> +    """)
> +    cf.flush()
> +
>  var_args = ['port', 'tls_port', 'disable_ticketing',
>      'x509_dir', 'sasl', 'cacert_file', 'x509_cert_file',
>      'x509_key_file', 'x509_key_password',
> @@ -134,4 +182,13 @@ if cgdb and args.cgdb:
>      exec_args = [cgdb, '--args'] + exec_args
>      args.xorg = cgdb
>  
> -os.execv(args.xorg, exec_args + xorg_args)
> +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"
> +

Probably better to use atexit to allow for possible python exceptions on the way (i.e. bugs)

import atexit

def cleanup():
    if os.path.isfile(cf.name + ".log"):
        os.remove(cf.name + ".log")

atexit.register(cleanup)   

> +if args.auto:
> +    if os.path.isfile(cf.name + ".log"):
> +        os.remove(cf.name + ".log")
> --
> 1.7.10.4
> 
> 
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
> 


More information about the Spice-devel mailing list