[Sugar-devel] [PATCH sugar] Drop sugar-emulator

Simon Schampijer simon at schampijer.de
Tue Jan 8 03:36:20 EST 2013


Hi Daniel,

the new module is this one [1] I presume. We currently have the emulator 
packaged for Fedora qit a Desktop file so there is an easy way to launch 
Sugar from within another Desktop. I guess this would then be a separate 
package based on sugar-runner.

Regards,
    Simon

[1] http://git.sugarlabs.org/sugar-runner
[2] http://koji.fedoraproject.org/koji/rpminfo?rpmID=3585350



On 12/16/2012 12:24 AM, Daniel Narvaez wrote:
> From: Daniel Narvaez <dwnarvaez at gmail.com>
>
> Replaced by the sugar-runner module.
>
> Rationale:
>
> * sugar-runner is similar in concept to sugar-emulator but it
> provides a better user experience. It runs also from a text
> console (into a standard X server). It works around Xephyr
> issues like international keyboards and multiple outputs.
> It tries to work out of the box everywhere, for example
> by offering to tweak Xwrapper.config where necessary.
> * sugar-runner is better tested with recent sugar code and
> recent distributions. It also integrates with sugar-build.
> * A separate module make sense here because most users will
> never run this code. It's largely a collection of hacks
> which are not necessary when running as a normal desktop
> environment.
>
> Why now:
>
> * We are starting to use GSettings, which requires to setup
> the xdg directories to avoid conflicts with GNOME. Thus we
> would require to make changes to sugar-emulator to setup
> these properly. Maintaining two separate implementation of
> basically the same thing is a waste of resources.
> * We are at the beginning of the cycle, the best time for
> potentially disruptive changes.
> ---
>   README                         |    1 -
>   bin/Makefile.am                |    1 -
>   bin/sugar-emulator             |   14 ---
>   configure.ac                   |    1 -
>   data/Makefile.am               |    3 -
>   data/sugar-emulator.desktop.in |   10 ---
>   src/jarabe/model/session.py    |   15 +---
>   src/jarabe/model/sound.py      |   10 +--
>   src/jarabe/util/Makefile.am    |    1 -
>   src/jarabe/util/emulator.py    |  194 ----------------------------------------
>   src/jarabe/view/keyhandler.py  |    5 --
>   11 files changed, 5 insertions(+), 250 deletions(-)
>   delete mode 100755 bin/sugar-emulator
>   delete mode 100644 data/sugar-emulator.desktop.in
>   delete mode 100644 src/jarabe/util/emulator.py
>
> diff --git a/README b/README
> index 1f89810..cfc196e 100644
> --- a/README
> +++ b/README
> @@ -38,7 +38,6 @@ Alt+r  Rotate the screen
>   Alt+o  Toggle overlay visibility
>   Alt+=  Open the developer console
>   Alt+0  Open the developer console
> -Alt+q  Quit the emulator
>
>   Ctrl+s Activate sketch mode in chat
>
> diff --git a/bin/Makefile.am b/bin/Makefile.am
> index cb671da..bd38323 100644
> --- a/bin/Makefile.am
> +++ b/bin/Makefile.am
> @@ -1,6 +1,5 @@
>   python_scripts =		\
>   	sugar-control-panel	\
> -	sugar-emulator		\
>   	sugar-install-bundle	\
>   	sugar-launch
>
> diff --git a/bin/sugar-emulator b/bin/sugar-emulator
> deleted file mode 100755
> index 308aac7..0000000
> --- a/bin/sugar-emulator
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -#!/bin/sh
> -
> -if [ "$(id -u)" -eq 0 -o "$(id -ru)" -eq 0 ] ; then
> -	echo Refusing to run as root.
> -	exit 3
> -fi
> -
> -# Source debug definitions
> -if [ -f ~/.sugar/debug ]; then
> -        . ~/.sugar/debug
> -fi
> -
> -# Start emulator
> -python -c "import sys; from jarabe.util import emulator; sys.argv[0]='$0'; emulator.main()" "$@"
> diff --git a/configure.ac b/configure.ac
> index 137e53a..9eae29e 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -48,7 +48,6 @@ bin/Makefile
>   bin/sugar
>   data/icons/Makefile
>   data/Makefile
> -data/sugar-emulator.desktop
>   extensions/cpsection/aboutcomputer/Makefile
>   extensions/cpsection/aboutme/Makefile
>   extensions/cpsection/datetime/Makefile
> diff --git a/data/Makefile.am b/data/Makefile.am
> index 6a62d23..39bdb35 100644
> --- a/data/Makefile.am
> +++ b/data/Makefile.am
> @@ -23,9 +23,6 @@ GTKRC_FILES =		\
>   xsessionsdir = $(datadir)/xsessions
>   xsessions_DATA = sugar.desktop
>
> -applicationsdir = $(datadir)/applications
> -applications_DATA = sugar-emulator.desktop
> -
>   mime_xml_in_files = sugar.xml.in
>   mime_xml_files = $(mime_xml_in_files:.xml.in=.xml)
>   @INTLTOOL_XML_RULE@
> diff --git a/data/sugar-emulator.desktop.in b/data/sugar-emulator.desktop.in
> deleted file mode 100644
> index 6247bd7..0000000
> --- a/data/sugar-emulator.desktop.in
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -[Desktop Entry]
> -Encoding=UTF-8
> -Name=Sugar
> -GenericName=Sugar Emulator
> -Comment=The emulator for the Sugar Desktop Environment
> -Exec=@prefix@/bin/sugar-emulator
> -Terminal=false
> -Type=Application
> -Icon=sugar-xo
> -Categories=Education;Teaching;
> diff --git a/src/jarabe/model/session.py b/src/jarabe/model/session.py
> index a5cd4a4..a708633 100644
> --- a/src/jarabe/model/session.py
> +++ b/src/jarabe/model/session.py
> @@ -54,9 +54,7 @@ class SessionManager(session.SessionManager):
>           self.initiate_shutdown()
>
>       def shutdown_completed(self):
> -        if env.is_emulator():
> -            self._close_emulator()
> -        elif self._logout_mode != self.MODE_LOGOUT:
> +        if self._logout_mode != self.MODE_LOGOUT:
>               bus = dbus.SystemBus()
>               if have_systemd():
>                   try:
> @@ -93,17 +91,6 @@ class SessionManager(session.SessionManager):
>           session.SessionManager.shutdown_completed(self)
>           Gtk.main_quit()
>
> -    def _close_emulator(self):
> -        Gtk.main_quit()
> -
> -        if 'SUGAR_EMULATOR_PID' in os.environ:
> -            pid = int(os.environ['SUGAR_EMULATOR_PID'])
> -            os.kill(pid, signal.SIGTERM)
> -
> -        # Need to call this ASAP so the atexit handlers get called before we
> -        # get killed by the X (dis)connection
> -        sys.exit()
> -
>
>   def get_session_manager():
>       global _session_manager
> diff --git a/src/jarabe/model/sound.py b/src/jarabe/model/sound.py
> index 851228d..02ad04d 100644
> --- a/src/jarabe/model/sound.py
> +++ b/src/jarabe/model/sound.py
> @@ -54,12 +54,10 @@ def set_muted(new_state):
>
>
>   def save():
> -    if env.is_emulator() is False:
> -        client = GConf.Client.get_default()
> -        client.set_int('/desktop/sugar/sound/volume', get_volume())
> +    client = GConf.Client.get_default()
> +    client.set_int('/desktop/sugar/sound/volume', get_volume())
>
>
>   def restore():
> -    if env.is_emulator() is False:
> -        client = GConf.Client.get_default()
> -        set_volume(client.get_int('/desktop/sugar/sound/volume'))
> +    client = GConf.Client.get_default()
> +    set_volume(client.get_int('/desktop/sugar/sound/volume'))
> diff --git a/src/jarabe/util/Makefile.am b/src/jarabe/util/Makefile.am
> index 3054b5a..17b9253 100644
> --- a/src/jarabe/util/Makefile.am
> +++ b/src/jarabe/util/Makefile.am
> @@ -4,5 +4,4 @@ SUBDIRS = 		\
>   sugardir = $(pythondir)/jarabe/util
>   sugar_PYTHON =          \
>   	__init__.py         \
> -	emulator.py	    \
>   	normalize.py
> diff --git a/src/jarabe/util/emulator.py b/src/jarabe/util/emulator.py
> deleted file mode 100644
> index 72b0d26..0000000
> --- a/src/jarabe/util/emulator.py
> +++ /dev/null
> @@ -1,194 +0,0 @@
> -# Copyright (C) 2006-2008, Red Hat, Inc.
> -#
> -# This program is free software; you can redistribute it and/or modify
> -# it under the terms of the GNU General Public License as published by
> -# the Free Software Foundation; either version 2 of the License, or
> -# (at your option) any later version.
> -#
> -# This program is distributed in the hope that it will be useful,
> -# but WITHOUT ANY WARRANTY; without even the implied warranty of
> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -# GNU General Public License for more details.
> -#
> -# You should have received a copy of the GNU General Public License
> -# along with this program; if not, write to the Free Software
> -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> -
> -import os
> -import signal
> -import subprocess
> -import sys
> -import time
> -from optparse import OptionParser
> -from gettext import gettext as _
> -
> -from gi.repository import Gtk
> -from gi.repository import Gdk
> -from gi.repository import GObject
> -
> -from sugar3 import env
> -
> -
> -ERROR_NO_DISPLAY = 30
> -ERROR_NO_SERVER = 31
> -default_dimensions = (800, 600)
> -
> -
> -def _run_xephyr(display, dpi, dimensions, fullscreen):
> -    cmd = ['Xephyr']
> -    cmd.append(':%d' % display)
> -    cmd.append('-ac')
> -    cmd += ['-title', _('Sugar in a window')]
> -
> -    screen_size = (Gdk.Screen.width(), Gdk.Screen.height())
> -
> -    if (not dimensions) and (fullscreen is None) and \
> -       (screen_size <= default_dimensions):
> -        # no forced settings, screen too small => fit screen
> -        fullscreen = True
> -    elif not dimensions:
> -        # screen is big enough or user has en/disabled fullscreen manually
> -        # => use default size (will get ignored for fullscreen)
> -        dimensions = '%dx%d' % default_dimensions
> -
> -    if not dpi:
> -        dpi = Gtk.Settings.get_default().get_property('gtk-xft-dpi') / 1024
> -
> -    if fullscreen:
> -        cmd.append('-fullscreen')
> -
> -    if dimensions:
> -        cmd.append('-screen')
> -        cmd.append(dimensions)
> -
> -    if dpi:
> -        cmd.append('-dpi')
> -        cmd.append('%d' % dpi)
> -
> -    cmd.append('-noreset')
> -
> -    try:
> -        pipe = subprocess.Popen(cmd)
> -
> -    except OSError, exc:
> -        sys.stderr.write('Error executing server: %s\n' % (exc, ))
> -        return None
> -
> -    return pipe
> -
> -
> -def _check_server(display):
> -    result = subprocess.call(['xdpyinfo', '-display', ':%d' % display],
> -                             stdout=open(os.devnull, 'w'),
> -                             stderr=open(os.devnull, 'w'))
> -    return result == 0
> -
> -
> -def _kill_pipe(pipe):
> -    """Terminate and wait for child process."""
> -    try:
> -        os.kill(pipe.pid, signal.SIGTERM)
> -    except OSError:
> -        pass
> -
> -    pipe.wait()
> -
> -
> -def _start_xephyr(dpi, dimensions, fullscreen):
> -    for display in range(30, 40):
> -        if not _check_server(display):
> -            pipe = _run_xephyr(display, dpi, dimensions, fullscreen)
> -            if pipe is None:
> -                return None, None
> -
> -            for i_ in range(10):
> -                if _check_server(display):
> -                    return pipe, display
> -
> -                time.sleep(0.1)
> -
> -            _kill_pipe(pipe)
> -
> -    return None, None
> -
> -
> -def _start_window_manager():
> -    cmd = ['metacity']
> -
> -    cmd.extend(['--no-force-fullscreen'])
> -
> -    GObject.spawn_async(cmd, flags=GObject.SPAWN_SEARCH_PATH)
> -
> -
> -def _setup_env(display, scaling, emulator_pid):
> -    # We need to remove the environment related to gnome-keyring-daemon,
> -    # so a new instance of gnome-keyring-daemon can be started and
> -    # registered properly.
> -    for variable in ['GPG_AGENT_INFO', 'SSH_AUTH_SOCK',
> -                     'GNOME_KEYRING_CONTROL', 'GNOME_KEYRING_PID']:
> -        if variable in os.environ:
> -            del os.environ[variable]
> -
> -    os.environ['SUGAR_EMULATOR'] = 'yes'
> -    os.environ['GABBLE_LOGFILE'] = os.path.join(
> -            env.get_profile_path(), 'logs', 'telepathy-gabble.log')
> -    os.environ['SALUT_LOGFILE'] = os.path.join(
> -            env.get_profile_path(), 'logs', 'telepathy-salut.log')
> -    os.environ['MC_LOGFILE'] = os.path.join(
> -            env.get_profile_path(), 'logs', 'mission-control.log')
> -    os.environ['STREAM_ENGINE_LOGFILE'] = os.path.join(
> -            env.get_profile_path(), 'logs', 'telepathy-stream-engine.log')
> -    os.environ['DISPLAY'] = ':%d' % (display)
> -    os.environ['SUGAR_EMULATOR_PID'] = emulator_pid
> -    os.environ['MC_ACCOUNT_DIR'] = os.path.join(
> -            env.get_profile_path(), 'accounts')
> -
> -    if scaling:
> -        os.environ['SUGAR_SCALING'] = scaling
> -
> -
> -def main():
> -    """Script-level operations"""
> -
> -    parser = OptionParser()
> -    parser.add_option('-d', '--dpi', dest='dpi', type='int',
> -                      help='Emulator dpi')
> -    parser.add_option('-s', '--scaling', dest='scaling',
> -                      help='Sugar scaling in %')
> -    parser.add_option('-i', '--dimensions', dest='dimensions',
> -                      help='Emulator dimensions (ex. 1200x900)')
> -    parser.add_option('-f', '--fullscreen', dest='fullscreen',
> -                      action='store_true', default=None,
> -                      help='Run emulator in fullscreen mode')
> -    parser.add_option('-F', '--no-fullscreen', dest='fullscreen',
> -                      action='store_false',
> -                      help='Do not run emulator in fullscreen mode')
> -    (options, args) = parser.parse_args()
> -
> -    if not os.environ.get('DISPLAY'):
> -        sys.stderr.write('DISPLAY not set, cannot connect to host X server.\n')
> -        return ERROR_NO_DISPLAY
> -
> -    server, display = _start_xephyr(options.dpi, options.dimensions,
> -                                    options.fullscreen)
> -    if server is None:
> -        sys.stderr.write('Failed to start server. Please check output above'
> -            ' for any error message.\n')
> -        return ERROR_NO_SERVER
> -
> -    _setup_env(display, options.scaling, str(server.pid))
> -
> -    command = ['dbus-launch', '--exit-with-session']
> -
> -    if not args:
> -        command.append('sugar')
> -    else:
> -        _start_window_manager()
> -
> -        if args[0].endswith('.py'):
> -            command.append('python')
> -
> -        command.append(args[0])
> -
> -    subprocess.call(command)
> -    _kill_pipe(server)
> diff --git a/src/jarabe/view/keyhandler.py b/src/jarabe/view/keyhandler.py
> index cb47d17..d96a88c 100644
> --- a/src/jarabe/view/keyhandler.py
> +++ b/src/jarabe/view/keyhandler.py
> @@ -57,9 +57,7 @@ _actions_table = {
>       '<alt><shift>Tab': 'previous_window',
>       '<alt>Escape': 'close_window',
>       'XF86WebCam': 'open_search',
> -# the following are intended for emulator users
>       '<alt><shift>f': 'frame',
> -    '<alt><shift>q': 'quit_emulator',
>       'XF86Search': 'open_search',
>       '<alt><shift>o': 'open_search'
>   }
> @@ -156,9 +154,6 @@ class KeyHandler(object):
>       def handle_frame(self, event_time):
>           self._frame.notify_key_press()
>
> -    def handle_quit_emulator(self, event_time):
> -        session.get_session_manager().shutdown()
> -
>       def handle_open_search(self, event_time):
>           journalactivity.get_journal().show_journal()
>
>



More information about the Sugar-devel mailing list