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
|
|
17 | 17 | import os |
18 | 18 | import signal |
19 | 19 | import subprocess |
| 20 | import sys |
20 | 21 | import time |
21 | 22 | from optparse import OptionParser |
22 | 23 | |
… |
… |
import gobject |
26 | 27 | from sugar import env |
27 | 28 | |
28 | 29 | |
| 30 | ERROR_NO_DISPLAY = 30 |
| 31 | ERROR_NO_SERVER = 31 |
| 32 | |
| 33 | |
29 | 34 | default_dimensions = (800, 600) |
30 | 35 | def _run_xephyr(display, dpi, dimensions, fullscreen): |
31 | 36 | cmd = [ 'Xephyr' ] |
… |
… |
def _run_xephyr(display, dpi, dimensions, fullscreen): |
59 | 64 | |
60 | 65 | cmd.append('-noreset') |
61 | 66 | |
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 |
63 | 73 | |
64 | 74 | os.environ['DISPLAY'] = ":%d" % (display) |
65 | 75 | os.environ['SUGAR_EMULATOR_PID'] = str(pipe.pid) |
… |
… |
def _start_xephyr(dpi, dimensions, fullscreen): |
87 | 97 | for display in range(30, 40): |
88 | 98 | if not _check_server(display): |
89 | 99 | pipe = _run_xephyr(display, dpi, dimensions, fullscreen) |
| 100 | if pipe is None: |
| 101 | return None |
90 | 102 | |
91 | 103 | for i_ in range(10): |
92 | 104 | if _check_server(display): |
… |
… |
def _start_xephyr(dpi, dimensions, fullscreen): |
96 | 108 | |
97 | 109 | _kill_pipe(pipe) |
98 | 110 | |
| 111 | return None |
| 112 | |
99 | 113 | |
100 | 114 | def _start_window_manager(): |
101 | 115 | cmd = ['metacity'] |
… |
… |
def main(): |
132 | 146 | help='Do not run emulator in fullscreen mode') |
133 | 147 | (options, args) = parser.parse_args() |
134 | 148 | |
| 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 | |
135 | 153 | _setup_env() |
136 | 154 | |
137 | 155 | 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 |
138 | 160 | |
139 | 161 | if options.scaling: |
140 | 162 | os.environ['SUGAR_SCALING'] = options.scaling |