From 9df1c653d56141a4fb4e965eb51a5320c3eeb0c0 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Tue, 23 May 2006 02:40:49 +0000 Subject: Make it easy to run two instances. See README --- diff --git a/README b/README index f916c44..0407c8f 100644 --- a/README +++ b/README @@ -26,46 +26,12 @@ To run the python sources from your source tree run $ sugar/sugar -You can also run the components separately: +Running multiple instances on the same machine +============================================== - $ source ./setup-run-from-source.sh # needs bash - -in the top-level directory. Icons and other resources are still loaded -from the installed location though. - -To run the shell - - $ cd shell/src - $ ./shell.py - -You can run activities like this - - $ cd browser - $ ./browser.py - -(Just remember to have the shell running) - - -Running two instances on the same machine -========================================= - -1) Install Xephyr -2) Add another user to your machine, lets call that user 'sugar' -2) Run Xepyhr as your normal user: - - $ Xephyr -ac -host-cursor -screen 800x600 :1 - -3) In a new shell: - - $ su sugar - - $ dbus-daemon --session --print-address - -4) In another new shell - - $ su sugar - - $ export DISPLAY=:1 - $ export DBUS_SESSION_BUS_ADDRESS= - $ metacity & - -5) In the previous shell, run sugar +You can use the --test command line options. +For example: +sugar/sugar --test my_nick_name1 +sugar/sugar --test my_nick_name2 +... diff --git a/setup-run-from-source.sh b/setup-run-from-source.sh deleted file mode 100755 index bcb0084..0000000 --- a/setup-run-from-source.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -export PYTHONPATH=`pwd` diff --git a/setup-run-from-source.tcsh b/setup-run-from-source.tcsh deleted file mode 100755 index a59c1a9..0000000 --- a/setup-run-from-source.tcsh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/tcsh - -setenv PYTHONPATH `pwd` diff --git a/spawn-test-env.py b/spawn-test-env.py deleted file mode 100755 index 39e879f..0000000 --- a/spawn-test-env.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/python -t - -import sys, os -import gtk, gobject -import pwd -import types - -def change_user(user): - try: - pwrec = pwd.getpwnam(user) - except KeyError: - raise Exception("Username '%s' does not exist." % user) - uid = pwrec[2] - os.setuid(uid) - return (pwrec[6], pwrec[5]) - -def shell_watch_cb(pid, condition, user_data=None): - gtk.main_quit() - -def main(): - if len(sys.argv) < 2: - print "Usage: %s " % sys.argv[0] - user = sys.argv[1] - - # Start Xephyr - DISPLAY = ":10" - args = "/usr/bin/Xephyr -ac -host-cursor -screen 800x600 %s" % DISPLAY - args = args.split() - (xephyr_pid, ign1, ign2, ign3) = gobject.spawn_async(args, flags=gobject.SPAWN_STDERR_TO_DEV_NULL | gobject.SPAWN_STDOUT_TO_DEV_NULL) - print "Xepyhr pid is %d" % xephyr_pid - - (shell, home) = change_user(user) - - 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() - print "dbus-daemon pid is %d, session bus address is %s" % (dbus_pid, addr) - dbus_file.close() - - os.environ["DISPLAY"] = DISPLAY - os.environ["DBUS_SESSION_BUS_ADDRESS"] = addr - os.environ["HOME"] = home - - args = "/usr/bin/metacity" - (metacity_pid, ign1, ign2, ign3) = gobject.spawn_async([args], flags=gobject.SPAWN_STDERR_TO_DEV_NULL | gobject.SPAWN_STDOUT_TO_DEV_NULL) - - print "\n" - (shell_pid, ign1, ign2, ign3) = gobject.spawn_async([shell], flags=gobject.SPAWN_LEAVE_DESCRIPTORS_OPEN | gobject.SPAWN_CHILD_INHERITS_STDIN | gobject.SPAWN_DO_NOT_REAP_CHILD) - gobject.child_watch_add(shell_pid, shell_watch_cb) - try: - gtk.main() - except KeyboardInterrupt: - pass - - try: - os.kill(dbus_pid, 9) - except OSError: - pass - try: - os.kill(metacity_pid, 9) - except OSError: - pass - -if __name__ == "__main__": - main() diff --git a/sugar/sugar b/sugar/sugar index 6c9cc6e..c1c4252 100755 --- a/sugar/sugar +++ b/sugar/sugar @@ -3,7 +3,9 @@ import sys import os -curdir = os.path.dirname(__file__) +import pygtk +pygtk.require('2.0') +import gobject def append_to_python_path(path): if os.environ.has_key('PYTHONPATH'): @@ -11,6 +13,40 @@ def append_to_python_path(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() + print "dbus-daemon pid is %d, session bus address is %s" % (dbus_pid, addr) + 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 + +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 + +curdir = os.path.dirname(__file__) if curdir == '.': basedir = os.path.dirname(os.getcwd()) else: @@ -37,3 +73,6 @@ if console: from sugar.session import session session.start(console) + +if dbus_daemon_pid: + stop_dbus(dbus_daemon_pid) -- cgit v0.9.1