Voltei a esse problema novamente (ainda no Natty); então pensei em postar meus resultados.
Primeiro, eu comecei a pesquisar se você pode executar os applets do Gnome a partir da linha de comando, e em uma janela separada - essa é uma técnica para depurar applets do Python;
- Primeiro eu me deparei com isso: Guia do novato de Zaur Nasibov para criar um Applet GNOME com Python (Parte I)
- Então eu entrei no patch
invest-applet
(que está no Python), então ele funciona novamente no Natty; patch pode ser encontrado em Bug # 775387 “Invest-applet falha ao iniciar após a atualização para o Natty. .. ”: Bugs: pacote“ gnome-applets ”: Ubuntu - Por fim, desenvolvi um script Python que instancia um objeto
invest-applet
quando chamado na linha de comando e o coloca em sua própria janela - e isso funciona em Unity:
Este é o script:
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()
... e o script estendido (com saída de depuração e vários comentários confusos) está em gtk_bonobo_applet_widget. py .
Isto é exatamente o que eu queria e, a princípio, eu pensei que seria aplicável a todos os applets - pelo menos em Natty (e entre eles stickynotes
); mas ai, não :
Agora, Natty é um pouco específico, porque é o último Gnome 2 Ubuntu - no entanto, também possui (o primeiro) Unity. Como tal:
- alguns applets são baseados em (ou expor) uma interface
bonobo
/CORBA
(em Python, viagnomeapplet
); aqueles, comoinvest-applet
oubrightness-applet
, podem usar a técnica acima para serem gerados em sua própria janela - e podem ser consultados através delibbonobo2-bin
tools (comoactivation-client
) - outros applets, como
stickynotes
, migraram para a base GSettings / DBUS (interface)
Na verdade, stickynotes
migrou de bonobo
para dbus
pouco antes de Natty sair (na revisão Porta para a nova API do applet libpanel ); o que é óbvio pela substituição da macro PANEL_APPLET_BONOBO_FACTORY
por PANEL_APPLET_OUT_PROCESS_FACTORY
. Indiscutivelmente, se alguém fizer check out da última revisão de stickynotes
com base em bonobo
e compilá-la - também deverá ser possível usar a técnica acima para instanciar o applet em uma janela separada e executá-lo a partir daí, mesmo sem% código%.
Eu teria acreditado, que os todos applets (ou melhor, o applet de desenvolvimento de frameworks) deveriam ter a capacidade de rodar em uma janela separada como essa - se não por qualquer outra razão, então para facilitar depuração de applets durante o desenvolvimento. E dado que alguns applets têm opções de linha de comando para execução em uma janela separada (tanto o "guia do iniciante" acima, e também gnome-panel
, apresentam tais opções) - Eu esperava que invest-applet
também apresentasse tais argumentos de linha de comando; no entanto, eu fiz grep através de seus arquivos de origem - e, infelizmente, não consigo encontrar qualquer menção de opções de linha de comando.
Mas então, eu me perguntei - por que essa migração? Bem, é porque stickynotes
é (ou melhor, foi) obsoleto por um tempo agora:
AppletsDbusMigration - GNOME Live! : (2009)
O Gnome Panel descartou a dependência da libbonobo recentemente (veja bug # 572131 ).
lista de discussão do gnome-devel-list - O que irá substituir o bonobo? ( 2009)
O Dbus não é um substituto direto para o bonobo. Não há substituição exata do bonobo como tal.
...
No entanto, o principal usecase do bonobo, que é embutir um aplicativo em outro (digamos, varredor de mina em gnumeric, ou (um pouco mais útil) um diagrama de dia em gnumeric) simplesmente não é usado tanto assim.
lista de discussão do gnome-components 'Re: O que irá substituir o bonobo?' (2005)
& gt; Sobre o DBUS, é difícil dizer que ele será substituído algum dia.
& gt; O primeiro problema é que não é um sistema de componentes, apenas uma API de transmissão de mensagens.
Confie em mim, há definitivamente planos para implementar um compilador IDL de algum tipo de imitação de RPC estilo CORBA no topo das mensagens D-BUS. Será acontecer mais cedo ou mais tarde.
Bem, shucks - Eu mesmo acho que o "embutir um aplicativo em outro" foi muito útil neste caso - rodar (pelo menos alguns) applets no Unity, com suporte para eles removidos bonobo
Claro, foi um arranjo mais ou menos "sortudo" de pacotes de desktop no Natty que permitiu isso (já que ainda é o Gnome 2 e ainda tem as bibliotecas :)
) - obviamente, versões posteriores que são baseadas no Gnome 3 têm bonobo
removido completamente - e a técnica de instanciação em janela de script em Python acima definitivamente não funcionará lá bonobo
A questão final é - poderíamos usar de forma semelhante um script Python, mas com ligações para :/
, para alcançar algo semelhante ao script acima baseado em dbus
?
Mais próximo eu cheguei a isso, é com o script gtk_dbus_applet_widget.py , no entanto, esse script não crie um applet em uma janela - e não é possível adicionar um applet à barra! A única coisa que pode fazer é conversar com o applet "factory" via bonobo
e instruí-lo para criar um applet; mas este applet permanece simplesmente como dados em algum lugar do sistema de arquivos ( e persiste através de reinicializações! ), e nunca é instanciado como um widget do Gnome ... E dado os comentários acima , Duvido que algo assim seja atualmente (bem, pelo menos em Natty) possível com dbus
.
Em conclusão - eu acho que isso, junto com a técnica dbus
, esgota as possibilidades de executar miniaplicativos frivolamente sob Unidade em Natty.