Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/session
diff options
context:
space:
mode:
authorMarco 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)
commit47cc58b1e648a586252046eb79339357cd38f939 (patch)
tree90ab614b2dc05472686b4dbe593d580735a4e16f /sugar/session
parentf4f70d22f1d29d24b7234e9a6fb3203deec5adfa (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.py20
-rw-r--r--sugar/session/Emulator.py70
-rw-r--r--sugar/session/Makefile.am7
-rw-r--r--sugar/session/MatchboxProcess.py17
-rw-r--r--sugar/session/Process.py19
-rw-r--r--sugar/session/__init__.py0
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