102 lines
2.5 KiB
Python
Executable File
102 lines
2.5 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import sys
|
|
import os
|
|
import pwd
|
|
import random
|
|
|
|
import gobject
|
|
|
|
# FIXME How to pick a good display number
|
|
XEPHYR_DISPLAY = 100
|
|
|
|
def add_to_python_path(path):
|
|
sys.path.insert(0, path)
|
|
if os.environ.has_key('PYTHONPATH'):
|
|
old_path = os.environ['PYTHONPATH']
|
|
os.environ['PYTHONPATH'] = path + ':' + old_path
|
|
else:
|
|
os.environ['PYTHONPATH'] = path
|
|
|
|
def start_dbus():
|
|
curdir = os.path.dirname(__file__)
|
|
args = "/bin/dbus-daemon --session --print-address".split()
|
|
(dbus_pid, ign1, dbus_stdout, ign3) = gobject.spawn_async(args, flags=gobject.SPAWN_STDERR_TO_DEV_NULL, standard_output=True)
|
|
dbus_file = os.fdopen(dbus_stdout)
|
|
addr = dbus_file.readline()
|
|
addr = addr.strip()
|
|
dbus_file.close()
|
|
|
|
os.environ["DBUS_SESSION_BUS_ADDRESS"] = addr
|
|
|
|
return dbus_pid
|
|
|
|
def stop_dbus(dbus_pid):
|
|
try:
|
|
print 'Closing dbus-daemon, pid %d' % (dbus_pid)
|
|
os.kill(dbus_pid, 9)
|
|
except OSError:
|
|
pass
|
|
|
|
def start_xephyr():
|
|
command = 'Xephyr :%d -ac -screen 640x480' % (XEPHYR_DISPLAY)
|
|
xephyr_pid = os.spawnvp(os.P_NOWAIT, 'Xephyr', command.split())
|
|
|
|
def stop_xephyr():
|
|
os.kill(xephyr_pid)
|
|
|
|
def start_matchbox():
|
|
command = 'matchbox-window-manager -use_titlebar no'
|
|
xephyr_pid = os.spawnvp(os.P_NOWAIT, 'matchbox-window-manager', command.split())
|
|
|
|
def stop_matchbox():
|
|
os.kill(xephyr_pid)
|
|
|
|
start_xephyr()
|
|
os.environ['DISPLAY'] = ":%d" % (XEPHYR_DISPLAY)
|
|
start_matchbox()
|
|
|
|
i = 0
|
|
dbus_daemon_pid = None
|
|
for arg in sys.argv:
|
|
if arg == '--test-user':
|
|
user = sys.argv[i + 1]
|
|
user_dir = os.path.expanduser('~/.sugar-' + user)
|
|
os.environ['SUGAR_NICK_NAME'] = user
|
|
os.environ['SUGAR_USER_DIR'] = user_dir
|
|
dbus_daemon_pid = start_dbus()
|
|
started_dbus = True
|
|
i += 1
|
|
|
|
if not os.environ.has_key("SUGAR_NICK_NAME"):
|
|
nick = pwd.getpwuid(os.getuid())[0]
|
|
if not nick or not len(nick):
|
|
nick = "Guest %d" % random.randint(1, 10000)
|
|
os.environ['SUGAR_NICK_NAME'] = nick
|
|
os.environ['SUGAR_USER_DIR'] = os.path.expanduser('~/.sugar')
|
|
|
|
curdir = os.path.abspath(os.path.dirname(__file__))
|
|
basedir = os.path.dirname(curdir)
|
|
|
|
if os.path.isfile(os.path.join(basedir, 'sugar/__uninstalled__.py')):
|
|
print 'Running sugar from ' + basedir + ' ...'
|
|
add_to_python_path(basedir)
|
|
add_to_python_path(os.path.join(basedir, 'shell'))
|
|
else:
|
|
import sugar.env
|
|
add_to_python_path(os.path.join(sugar.env.get_data_dir(), 'shell'))
|
|
print 'Running the installed sugar...'
|
|
|
|
print 'Redirecting output to the console, press Ctrl+Down to open it.'
|
|
|
|
from session.session import Session
|
|
|
|
session = Session()
|
|
session.start()
|
|
|
|
if dbus_daemon_pid:
|
|
stop_dbus(dbus_daemon_pid)
|
|
|
|
stop_matchbox()
|
|
stop_xephyr()
|