Ticket #1755: 1755.patch

File 1755.patch, 2.6 KB (added by sascha_silbe, 14 years ago)

sugar-emulator: better error messages in case of failures

  • src/jarabe/util/emulator.py

    From: Sascha Silbe <sascha-pgp@silbe.org>
    Subject: [PATCH] sugar-emulator: better error messages in case of failures (#1755)
    
    Replaces traceback with error message in these cases:
    - virtual X server cannot be executed
    - virtual X server doesn't work
    
    Provides explicit error message in these cases:
    - DISPLAY not set
    
    Signed-off-by: Sascha Silbe <sascha-pgp@silbe.org>
    
    ---
     src/jarabe/util/emulator.py |   24 +++++++++++++++++++++++-
     1 files changed, 23 insertions(+), 1 deletions(-)
    
    diff --git a/src/jarabe/util/emulator.py b/src/jarabe/util/emulator.py
    index 607d840..d9dca7f 100644
    a b  
    1717import os
    1818import signal
    1919import subprocess
     20import sys
    2021import time
    2122from optparse import OptionParser
    2223
    import gobject 
    2627from sugar import env
    2728
    2829
     30ERROR_NO_DISPLAY = 30
     31ERROR_NO_SERVER = 31
     32
     33
    2934default_dimensions = (800, 600)
    3035def _run_xephyr(display, dpi, dimensions, fullscreen):
    3136    cmd = [ 'Xephyr' ]
    def _run_xephyr(display, dpi, dimensions, fullscreen): 
    5964
    6065    cmd.append('-noreset')
    6166
    62     pipe = subprocess.Popen(cmd)
     67    try:
     68        pipe = subprocess.Popen(cmd)
     69
     70    except OSError, exc:
     71        sys.stderr.write('Error executing server: %s\n' % (exc, ))
     72        return None
    6373
    6474    os.environ['DISPLAY'] = ":%d" % (display)
    6575    os.environ['SUGAR_EMULATOR_PID'] = str(pipe.pid)
    def _start_xephyr(dpi, dimensions, fullscreen): 
    8797    for display in range(30, 40):
    8898        if not _check_server(display):
    8999            pipe = _run_xephyr(display, dpi, dimensions, fullscreen)
     100            if pipe is None:
     101                return None
    90102
    91103            for i_ in range(10):
    92104                if _check_server(display):
    def _start_xephyr(dpi, dimensions, fullscreen): 
    96108
    97109            _kill_pipe(pipe)
    98110
     111    return None
     112
    99113
    100114def _start_window_manager():
    101115    cmd = ['metacity']
    def main(): 
    132146                      help='Do not run emulator in fullscreen mode')
    133147    (options, args) = parser.parse_args()
    134148
     149    if not os.environ.get('DISPLAY'):
     150        sys.stderr.write('DISPLAY not set, cannot connect to host X server.\n')
     151        return ERROR_NO_DISPLAY
     152
    135153    _setup_env()
    136154
    137155    server = _start_xephyr(options.dpi, options.dimensions, options.fullscreen)
     156    if server is None:
     157        sys.stderr.write('Failed to start server. Please check output above'
     158            ' for any error message.\n')
     159        return ERROR_NO_SERVER
    138160
    139161    if options.scaling:
    140162        os.environ['SUGAR_SCALING'] = options.scaling