diff options
author | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-09-10 00:35:53 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@localhost.localdomain> | 2006-09-10 00:35:53 (GMT) |
commit | 47cc58b1e648a586252046eb79339357cd38f939 (patch) | |
tree | 90ab614b2dc05472686b4dbe593d580735a4e16f /sugar/session | |
parent | f4f70d22f1d29d24b7234e9a6fb3203deec5adfa (diff) |
Make part of the session public so that it can used by tests
Diffstat (limited to 'sugar/session')
-rw-r--r-- | sugar/session/DbusProcess.py | 20 | ||||
-rw-r--r-- | sugar/session/Emulator.py | 70 | ||||
-rw-r--r-- | sugar/session/Makefile.am | 7 | ||||
-rw-r--r-- | sugar/session/MatchboxProcess.py | 17 | ||||
-rw-r--r-- | sugar/session/Process.py | 19 | ||||
-rw-r--r-- | sugar/session/__init__.py | 0 |
6 files changed, 133 insertions, 0 deletions
diff --git a/sugar/session/DbusProcess.py b/sugar/session/DbusProcess.py new file mode 100644 index 0000000..2f19459 --- /dev/null +++ b/sugar/session/DbusProcess.py @@ -0,0 +1,20 @@ +import os + +from sugar.session.Process import Process +from sugar import env + +class DbusProcess(Process): + def __init__(self): + config = env.get_dbus_config() + cmd = "dbus-daemon --print-address --config-file %s" % config + Process.__init__(self, cmd) + + def get_name(self): + return 'Dbus' + + def start(self): + Process.start(self, True) + dbus_file = os.fdopen(self._stdout) + addr = dbus_file.readline().strip() + dbus_file.close() + os.environ["DBUS_SESSION_BUS_ADDRESS"] = addr diff --git a/sugar/session/Emulator.py b/sugar/session/Emulator.py new file mode 100644 index 0000000..5451025 --- /dev/null +++ b/sugar/session/Emulator.py @@ -0,0 +1,70 @@ +import os +import socket +import sys + +from sugar.session.Process import Process +import sugar.env + +def get_display_number(): + """Find a free display number trying to connect to 6000+ ports""" + retries = 20 + display_number = 1 + display_is_free = False + + while not display_is_free and retries > 0: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + s.connect(('127.0.0.1', 6000 + display_number)) + s.close() + + display_number += 1 + retries -= 1 + except: + display_is_free = True + + if display_is_free: + return display_number + else: + logging.error('Cannot find a free display.') + sys.exit(0) + +class XephyrProcess(Process): + def __init__(self): + self._display = get_display_number() + cmd = 'Xephyr :%d -ac -screen 800x600' % (self._display) + Process.__init__(self, cmd) + + def get_name(self): + return 'Xephyr' + + def start(self): + Process.start(self) + os.environ['DISPLAY'] = ":%d" % (self._display) + +class XnestProcess(Process): + def __init__(self): + self._display = get_display_number() + cmd = 'Xnest :%d -ac -geometry 800x600' % (self._display) + Process.__init__(self, cmd) + + def get_name(self): + return 'Xnest' + + def start(self): + Process.start(self) + os.environ['DISPLAY'] = ":%d" % (self._display) + +class Emulator: + """The OLPC emulator""" + def start(self): + try: + process = XephyrProcess() + process.start() + except: + try: + process = XnestProcess() + process.start() + except: + print 'Cannot run the emulator. You need to install \ + Xephyr or Xnest.' + sys.exit(0) diff --git a/sugar/session/Makefile.am b/sugar/session/Makefile.am new file mode 100644 index 0000000..326f2ab --- /dev/null +++ b/sugar/session/Makefile.am @@ -0,0 +1,7 @@ +sugardir = $(pythondir)/sugar/session +sugar_PYTHON = \ + __init__.py \ + DbusProcess.py \ + Emulator.py \ + MatchboxProcess.py \ + Process.py diff --git a/sugar/session/MatchboxProcess.py b/sugar/session/MatchboxProcess.py new file mode 100644 index 0000000..b63a4b7 --- /dev/null +++ b/sugar/session/MatchboxProcess.py @@ -0,0 +1,17 @@ +import os + +from sugar.session.Process import Process +from sugar import env + +class MatchboxProcess(Process): + def __init__(self): + kbd_config = os.path.join(env.get_data_dir(), 'kbdconfig') + options = '-kbdconfig %s ' % kbd_config + + options += '-theme olpc ' + + command = 'matchbox-window-manager %s ' % options + Process.__init__(self, command) + + def get_name(self): + return 'Matchbox' diff --git a/sugar/session/Process.py b/sugar/session/Process.py new file mode 100644 index 0000000..09d93a7 --- /dev/null +++ b/sugar/session/Process.py @@ -0,0 +1,19 @@ +import logging + +import gobject + +class Process: + """Object representing one of the session processes""" + + def __init__(self, command): + self._command = command + + def get_name(self): + return self._command + + def start(self, standard_output=False): + args = self._command.split() + flags = gobject.SPAWN_SEARCH_PATH + result = gobject.spawn_async(args, flags=flags, + standard_output=standard_output) + self._stdout = result[2] diff --git a/sugar/session/__init__.py b/sugar/session/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/sugar/session/__init__.py |