diff options
author | Sascha Silbe <sascha-pgp@silbe.org> | 2010-06-02 11:03:10 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu.vizoso@collabora.co.uk> | 2010-06-02 11:03:10 (GMT) |
commit | cb4fdde40a56e6576d4a966cc28cda3fdea471a4 (patch) | |
tree | 34009950030c40ec4957bf02dcce1c33a46def81 | |
parent | e9bc53279851db9811e59d9b4ba8e4d088fcd1e7 (diff) |
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>
-rw-r--r-- | 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/src/jarabe/util/emulator.py +++ b/src/jarabe/util/emulator.py @@ -17,6 +17,7 @@ import os import signal import subprocess +import sys import time from optparse import OptionParser @@ -26,6 +27,10 @@ import gobject from sugar import env +ERROR_NO_DISPLAY = 30 +ERROR_NO_SERVER = 31 + + default_dimensions = (800, 600) def _run_xephyr(display, dpi, dimensions, fullscreen): cmd = [ 'Xephyr' ] @@ -59,7 +64,12 @@ def _run_xephyr(display, dpi, dimensions, fullscreen): cmd.append('-noreset') - pipe = subprocess.Popen(cmd) + try: + pipe = subprocess.Popen(cmd) + + except OSError, exc: + sys.stderr.write('Error executing server: %s\n' % (exc, )) + return None os.environ['DISPLAY'] = ":%d" % (display) os.environ['SUGAR_EMULATOR_PID'] = str(pipe.pid) @@ -87,6 +97,8 @@ def _start_xephyr(dpi, dimensions, fullscreen): for display in range(30, 40): if not _check_server(display): pipe = _run_xephyr(display, dpi, dimensions, fullscreen) + if pipe is None: + return None for i_ in range(10): if _check_server(display): @@ -96,6 +108,8 @@ def _start_xephyr(dpi, dimensions, fullscreen): _kill_pipe(pipe) + return None + def _start_window_manager(): cmd = ['metacity'] @@ -132,9 +146,17 @@ def main(): help='Do not run emulator in fullscreen mode') (options, args) = parser.parse_args() + if not os.environ.get('DISPLAY'): + sys.stderr.write('DISPLAY not set, cannot connect to host X server.\n') + return ERROR_NO_DISPLAY + _setup_env() server = _start_xephyr(options.dpi, options.dimensions, options.fullscreen) + if server is None: + sys.stderr.write('Failed to start server. Please check output above' + ' for any error message.\n') + return ERROR_NO_SERVER if options.scaling: os.environ['SUGAR_SCALING'] = options.scaling |