Ich bin wieder auf dieses Problem zurückgekommen (immer noch auf Natty); Also dachte ich, ich würde meine Ergebnisse veröffentlichen.
Zuerst habe ich nachgeschlagen, ob Sie Gnome-Applets über die Befehlszeile ausführen können, und in einem separaten Fenster - es stellte sich heraus, dass dies eine Technik zum Debuggen von Python-Applets war.
Dies ist das Skript:
import sys
import gtk
import pygtk
pygtk.require('2.0')
# sudo apt-get install python-gnomeapplet
import gnomeapplet
import CORBA # must have import gnomeapplet before!
import bonobo
import bonobo.ui
import bonobo.activation
bcontrol = bonobo.activation.activate_from_id('OAFIID:Invest_Applet', 0, False)
win = bonobo.ui.Window("foo", "FOOOOO")
buiwid = bonobo.ui.widget_new_control_from_objref(bcontrol, win.get_ui_container().corba_objref())
win.set_contents(buiwid)
win.show_all()
win.connect("destroy", lambda x: sys.exit(0))
bonobo.ui.main()
... und das erweiterte Skript (mit Debug-Ausgabe und einer Menge chaotischer Kommentare) befindet sich in gtk_bonobo_applet_widget.py .
Dies ist genau das , was ich wollte, und zuerst dachte ich, dass es für alle Applets gelten würde - zumindest in Natty (und unter ihnen stickynotes
); aber leider nein :
Jetzt ist Natty ein bisschen spezifisch, weil es das letzte Gnome 2 Ubuntu ist - es enthält jedoch auch (das erste) Unity. So wie:
- Einige Applets basieren auf (oder legen eine)
bonobo
/ CORBA
Schnittstelle offen (in Python über gnomeapplet
). Diese, wie invest-applet
oder brightness-applet
, können die oben genannte Technik verwenden, um in ihrem eigenen Fenster angehoben zu werden - und können über libbonobo2-bin
Werkzeuge (wie activation-client
) abgefragt werden.
- andere Applets wie
stickynotes
z. B. wurden in Richtung GSettings / DBUS-Basis (Schnittstelle) migriert.
In der Tat stickynotes
migriert von bonobo
bis dbus
kurz vor Natty herauskam (in der Revision Port auf neue libpanel-Applet-API ); Dies wird durch das Ersetzen des PANEL_APPLET_BONOBO_FACTORY
Makros durch deutlich PANEL_APPLET_OUT_PROCESS_FACTORY
. Wenn man die letzte Version von stickynotes
basierend auf überprüft und erstellt, sollte man wahrscheinlich bonobo
auch in der Lage sein, das Applet in einem separaten Fenster zu instanziieren und von dort aus auszuführen, auch ohne gnome-panel
.
Ich hätte sonst geglaubt, dass alle Applets (oder besser gesagt Applet-Entwicklungs-Frameworks) die Fähigkeit haben sollten, in einem separaten Fenster wie diesem ausgeführt zu werden - wenn nicht aus einem anderen Grund, um das Debuggen von Applets während der Entwicklung zu erleichtern. Und da einige Applets über Befehlszeilenschalter verfügen, die in einem separaten Fenster ausgeführt werden können (sowohl die oben stehende "Anfängeranleitung" als auch invest-applet
solche Schalter), hoffte ich, dass sie möglicherweise auch stickynotes
solche Befehlszeilenargumente enthalten. Ich habe jedoch die Quelldateien durchsucht - und leider kann ich keine Erwähnung von Befehlszeilenoptionen finden.
Aber dann fragte ich mich - warum diese Migration? Nun, es liegt daran bonobo
, dass es schon eine Weile veraltet ist (oder eher ist):
AppletsDbusMigration - GNOME Live! : (2009)
Gnome Panel hat die libbonobo-Abhängigkeit kürzlich gelöscht (siehe Fehler # 572131 ).
gnome-devel-list mailing list - Was ersetzt bonobo? (2009)
Dbus ist kein direkter Ersatz für Bonobo. Es gibt keinen genauen Ersatz für Bonobo als solches.
...
Der Hauptanwendungsfall von Bonobo, bei dem eine Anwendung in eine andere eingebettet wird (z. B. Minenräumer in gnumerischer Sprache oder (etwas nützlicher) ein Diagramm in gnumerischer Sprache), wird jedoch nur selten verwendet.
Mailingliste für Gnome-Komponenten 'Re: Was wird Bonobo ersetzen?' (2005)
> Über DBUS ist es schwer zu sagen, dass es eines Tages ersetzt wird.
> Das erste Problem ist, dass es sich nicht um ein Komponentensystem handelt, sondern nur um eine API zur Nachrichtenübermittlung.
Vertrauen Sie mir, es gibt definitiv Pläne, einen IDL-Compiler zu implementieren, um RPC im CORBA-Stil zusätzlich zu D-BUS-Nachrichten zu imitieren. Es wird früher oder später passieren.
Nun, shucks - ich selbst denke, das "Einbetten einer Anwendung in eine andere" war in diesem Fall sehr nützlich - um (zumindest einige) Applets in Unity auszuführen, wobei die Unterstützung für sie entfernt wurde. :)
Natürlich war es mehr oder weniger ein " Glückliche "Anordnung von Desktop-Paketen in Natty, die dies ermöglichten (vorausgesetzt, es ist immer noch Gnome 2 und verfügt immer noch über die bonobo
Bibliotheken) - offensichtlich wurden spätere Versionen, die auf Gnome 3 basieren, bonobo
vollständig entfernt - und das obige Python-Skript-Instanziierungs-In -a-Fenster-Technik wird dort definitiv nicht funktionieren:/
Die letzte Frage lautet: Könnten wir in ähnlicher Weise ein Python-Skript verwenden, jedoch mit Bindungen für dbus
, um etwas Ähnliches wie das oben beschriebene bonobo
Skript zu erreichen?
Am nächsten daran bin ich mit dem Skript gtk_dbus_applet_widget.py. Dieses Skript löst jedoch kein Applet in einem Fenster aus - und kann der Leiste nicht einmal ein Applet hinzufügen! Das einzige, was es tun kann, ist, mit dem Applet "factory" über zu sprechen dbus
und es anzuweisen, ein Applet zu erstellen. Aber dieses Applet bleibt einfach als Daten irgendwo im Dateisystem ( und es bleibt über Neustarts hinweg bestehen! ) und wird nie als Gnome-Widget instanziiert ... Und angesichts der obigen Kommentare bezweifle ich, dass so etwas derzeit ist (na ja, bei Natty unter am wenigsten möglich mit dbus
.
Fazit: Ich denke, dies gnome-panel
erschöpft zusammen mit der Technik die Möglichkeiten, Applets unter Unity in Natty leichtfertig auszuführen.