[Sugar-devel] One instance activity

Tomeu Vizoso tomeu at sugarlabs.org
Tue Dec 16 08:29:17 EST 2008


Hi Pablo,

2008/12/16 Pablo Posada <pablo.posada at tcs.com>:
>
> Thank you all for your answers.
>
> What i am actually facing is a problem with a sugarizing. I need to run the
> script, copy-to-Journal.py from a C program.

If what you want is to exec copy-to-journal.py from gnumeric, then
using one of the functions listed in the link below may be best:

http://library.gnome.org/devel/glib/2.18/glib-Spawning-Processes.html

> 1 - With "exec dbus-launch CActivity $args" in the sugarActivity file, i can
> run multiple instances but i cant run the script. It crashes throwing a
> python error. In olpc wiki says that the scripts only works running with
> olpc user. I dont know if the dbus-launch changes something in the way the
> scripts are called.
>
> Error: org.freedesktop.DBus.Python.AttributeError: Traceback (most recent
> call last):
>   File "/usr/lib/python2.5/site-packages/dbus/service.py", line 692, in
> _message_cb
>     retval = candidate_method(self, *args, **keywords)
>   File "/usr/lib/python2.5/site-packages/olpc/datastore/datastore.py", line
> 215, in create
>     mp.create_async(props, filelike, can_move=transfer_ownership,
> AttributeError: 'NoneType' object has no attribute 'create_async'

What is happening here is that dbus-launch creates a new session bus
and tries to activate a new instance of the datastore, which fails to
open the index because the existing datastore instance is locking it.
Why are you calling dbus-launch?

> 2 - But changing it to "exec CActivity $args" the scripts run perfect, but
> the second instance of the activity throws an "error when trying to load or
> save configuration... "
>   Configuration server couldn't be contacted: D-BUS error: Method
> "LookupExtended"
>        with signature "ssb" on interface "org.gnome.GConf.Database" doesn't
> exist

Not sure why you get this error, even less only on the second
instance, but you can check if that method exists with the given
signature by getting the introspection data in the way explained in
the link below:

http://unmaintainable.wordpress.com/2006/12/19/using-dbus-introspection/

HTH,

Tomeu

> ***********
> SugarActivity file: sugarPlanilla
> ***********
> #!/bin/sh
> args=""
> while [ -n "$2" ] ; do
>      case "$1" in
>          -b | --bundle-id)     export SUGAR_BUNDLE_ID="$2" ;;
>          -a | --activity-id)   export SUGAR_ACTIVITY_ID="$2" ;;
>          -o | --object-id)     export SUGAR_OBJECT_ID="$2" ; echo "o $2";
> args="$args -o $2" ;;
>          -u | --uri)           export SUGAR_URI="$2" ;;
>          *) echo unknown argument $1 $2 ;;
>      esac
>      shift;shift
> done
> echo $args
> export LD_PRELOAD="$SUGAR_BUNDLE_PATH/lib/libsugarize.so"
> export NET_WM_NAME="Planilla"
> exec gnumeric $args
>
> and the Activity.info runs the sugarActivity file.
> exec = sugarPlanilla
>
> Thanks,
> Pablo Posada
> ____________________________________________
>
> Bert Freudenberg <bert at freudenbergs.de>
>
> 12/10/2008 11:17 AM CET
>
> To
> david at lang.hm
> cc
> Pablo Posada <pablo.posada at tcs.com>, OLPC Development
> <devel at lists.laptop.org>, Sugar Devel <sugar-devel at lists.sugarlabs.org>
> bcc
> Subject
> Re: [Sugar-devel] One instance activity
>
>
> On 10.12.2008, at 11:56, david at lang.hm wrote:
>
>> On Wed, 10 Dec 2008, Bert Freudenberg wrote:
>>
>>> On 10.12.2008, at 03:57, david at lang.hm wrote:
>>>
>>>> On Tue, 9 Dec 2008, Bert Freudenberg wrote:
>>>>> On 09.12.2008, at 18:55, Eben Eliason wrote:
>>>>>> Are you sure?  Browse makes use of shared code, but still
>>>>>> presents the
>>>>>> user with the appearance of multiple instances.
>>>>> Right.
>>>>> The way to do it would be to create a unique D-Bus service in your
>>>>> activity. When the second instance tries to create that service it
>>>>> will notice that it already exists. It could then notify its first
>>>>> instance via said D-Bus service.
>>>> you don't need to use D-Bus for this, it can be done by X without
>>>> any other communication channels.
>>>> I don't know the details for how to do this, but I've seen mozilla/
>>>> firefox do this for a few years. to see this start firefox on one
>>>> machine, connect to another machine and point the display back to
>>>> the first one. then try and start firefox on that second machine.
>>>> the end result will be a new window opening up, but running on the
>>>> first machine (if you have trouble seeing the difference, make the
>>>> two machines have different bookmarks, or give one network access
>>>> that the other doesn't have)
>>>> please don't develop new mechanisms to do things that already exist.
>>>
>>>
>>> It's not a new mechanism. The usage of a named D-Bus service to
>>> ensure unique program instances is documented and not my invention
>>> (though I cannot remember where I saw it first).
>>>
>>> I should have written "One way to do this would be ...", I give you
>>> that.
>>>
>>> But you cannot know which way would be preferable for a given
>>> activity. And since it is private to the activity and does not
>>> affect other activities, no harm is done either way.
>>>
>>> E.g., twiddling X properties is hard in various high-level
>>> languages, in particular when using higher-level UI toolkits. Sugar
>>> currently requires two custom X properties and this is causing
>>> activity authors considerable pain. Even Sugar itself had to resort
>>> to C code, adding a custom native library to manipulate these
>>> properties, it was not easy in pure Python. This is in stark
>>> contrast to the nicely general and easy-to-use Python D-Bus
>>> bindings, which are similarly available in other high-level
>>> languages.
>>>
>>> So please consider that not all people like having to go down into
>>> the machine room to make new plumbing with a C compiler. Having
>>> done too much of that myself I can relate to them.
>>
>> my initial reaction to this is that this sounds like a gap in the
>> python libraries that would be very useful to fill. getting someone
>> to write a python library to better access the X properties would
>> help many areas.
>>
>> any idea why nobody has written one yet? Python is much better than
>> many languages at letting you write a library in C and then use it
>> cleanly, so if doing this in python is as hard as you are
>> indicating, why hasn't it been addressed?
>
>
> I don't know. And this is diverging from the subject at hand.
>
> Even if it was simple to set and read an X property then implementing
> single-instance apps via X properties still would be considerable more
> complex than using D-Bus. You would have to learn a whole lot about
> how X works first, and then design that mechanism on top of it. Having
> done a fair bit of X programming myself (the Squeak VM talks to Xlib
> directly, no toolkit) I would not exactly rate this as trivial. X can
> be abused to do IPC, sure, but it still is abuse. D-Bus is made to do
> that.
>
> - Bert -
>
>
> ForwardSourceID:NT00005F1E
>
> =====-----=====-----=====
> Notice: The information contained in this e-mail
> message and/or attachments to it may contain
> confidential or privileged information. If you are
> not the intended recipient, any dissemination, use,
> review, distribution, printing or copying of the
> information contained in this e-mail message
> and/or attachments to it are strictly prohibited. If
> you have received this communication in error,
> please notify us by reply e-mail or telephone and
> immediately and permanently delete the message
> and any attachments. Thank you
>
>
>
> _______________________________________________
> Devel mailing list
> Devel at lists.laptop.org
> http://lists.laptop.org/listinfo/devel
>
>



More information about the Devel mailing list