Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-07-16 12:22:10 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-07-16 12:22:10 (GMT)
commit5ec089b82956aae93bb1ba06ffab7f30cbfce382 (patch)
tree8532e56ebd61cc66d8c5e4d39b208d2bf76ea246 /shell
parented303285a8873e9c91186fee372d101a87dbd99e (diff)
Add support for Xnest
Diffstat (limited to 'shell')
-rw-r--r--shell/Emulator.py78
-rw-r--r--shell/Makefile.am1
2 files changed, 50 insertions, 29 deletions
diff --git a/shell/Emulator.py b/shell/Emulator.py
index 21308a4..5e41b56 100644
--- a/shell/Emulator.py
+++ b/shell/Emulator.py
@@ -1,47 +1,59 @@
import logging
import os
import socket
+import sys
from Process import Process
+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))
+ logging.info('Display %d is already in use. Trying next.' % (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 = self.get_display_number()
+ self._display = get_display_number()
cmd = 'Xephyr :%d -ac -screen 640x480' % (self._display)
Process.__init__(self, cmd)
-
- def get_display_number(self):
- """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))
- logging.info('Display %d is already in use. Trying next.' % (display_number))
- s.close()
+ def get_name(self):
+ return 'Xephyr'
- display_number += 1
- retries -= 1
- except:
- display_is_free = True
+ def start(self):
+ Process.start(self)
+ os.environ['DISPLAY'] = ":%d" % (self._display)
- if display_is_free:
- return display_number
-
- return -1
+class XnestProcess(Process):
+ def __init__(self):
+ self._display = get_display_number()
+ cmd = 'Xnest :%d -geometry 640x480' % (self._display)
+ Process.__init__(self, cmd)
def get_name(self):
- return 'Xephyr'
+ return 'Xnest'
def start(self):
- if self._display < 0:
- logging.error('Cannot find a free display.')
- else:
- Process.start(self)
- os.environ['DISPLAY'] = ":%d" % (self._display)
+ Process.start(self)
+ os.environ['DISPLAY'] = ":%d" % (self._display)
class Emulator:
"""The OLPC emulator"""
@@ -50,5 +62,13 @@ class Emulator:
pass
def start(self):
- process = XephyrProcess()
- process.start()
+ try:
+ process = XephyrProcess()
+ process.start()
+ except:
+ try:
+ process = XnestProcess()
+ process.start()
+ except:
+ logging.error('Cannot run the emulator. You need to install Xephyr or Xnest.')
+ sys.exit(0)
diff --git a/shell/Makefile.am b/shell/Makefile.am
index 3ba4870..99cc075 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -3,6 +3,7 @@ bin_SCRIPTS = sugar sugar-activity
sugardir = $(pkgdatadir)/shell
sugar_PYTHON = \
__init__.py \
+ ActivitiesModel.py \
ActivityRegistry.py \
ConsoleLogger.py \
Emulator.py \