Isto NÃO é para indicadores de aplicação , mas indicadores do sistema .
Imagem de: link
O objetivo é mostrar indicador-sysmonitor nas telas do Greeter / Lock / Ubiquity. Há uma solução em torno de:
Como fazer indicador-sysmonitor como um indicador padrão na tela de login
Eu já tenho um trabalhando em linguagem C, veja minha outra pergunta:
Como desenvolver um System Indicator for Unity?
No entanto, indicator-sysmonitor
já está desenvolvido no Python como muitos outros indicadores de aplicativos. Eu não gosto da idéia de que os desenvolvedores obrigados a portar seus projetos para C ou escrever um proxy Python-C, se quiserem mostrar o indicador em telas de greeter / lock / ubiquity. Em vez disso, fazer o indicador-sysmonitor criar um indicador de sistema diretamente do python seria a melhor solução (sem soluções alternativas, e será uma solução genérica para todos os projetos em python que atualmente usam o appindicator).
Estou lutando para migrar para o Python. Aqui está o meu código atual que não funciona. Ele cria o objeto DBus para Menu & amp; Ações. Está listado no plug-in de indicadores do XFCE. Mas não apareceu no painel.
/usr/lib/indicator-test/indicator-test-service
#!/usr/bin/python2
import os
import sys
import gi
from gi.repository import Gio, GLib
APPLICATION_ID = 'local.sneetsher.indicator.test'
DBUS_MENU_PATH = '/local/sneetsher/indicator/test/desktop'
DBUS_ACTION_PATH = '/local/sneetsher/indicator/test'
def callback():
print ok
def quit_callback(notification, loop):
global connection
global exported_action_group_id
global exported_menu_model_id
connection.unexport_action_group (exported_action_group_id)
connection.unexport_menu_model (exported_menu_model_id)
loop.quit()
def cancel (notification, action, data):
if action == "cancel":
print "Cancel"
else:
print "That should not have happened (cancel)!"
def bus_acquired(bus, name):
# menu
submenu = Gio.Menu()
submenu.append("Show", "show")
item = Gio.MenuItem.new(None, "_header")
item.set_attribute([("x-canonical-type","s","com.canonical.indicator.root")])
item.set_submenu(submenu)
menu = Gio.Menu()
menu.append_item (item)
actions = Gio.SimpleActionGroup.new()
action1 = Gio.SimpleAction.new("_header", None)
actions.insert(action1)
action2 = Gio.SimpleAction.new('show', None)
actions.insert(action2)
action2.connect("activate",callback)
global connection
connection = bus
global exported_action_group_id
exported_action_group_id = connection.export_action_group(DBUS_ACTION_PATH, actions)
global exported_menu_model_id
exported_menu_model_id = connection.export_menu_model(DBUS_MENU_PATH, menu)
def setup ():
#bus connection
Gio.bus_own_name(Gio.BusType.SESSION, APPLICATION_ID, 0, bus_acquired, None, None)
if __name__ == '__main__':
connection = None
exported_menu_model_id = 0
exported_action_group_id = 0
password = ""
loop = GLib.MainLoop()
setup ()
loop.run()
local.sneetsher.indicator.test
[Indicator Service]
Name=indicator-test
ObjectPath=/local/sneetsher/indicator/test
[desktop]
ObjectPath=/local/sneetsher/indicator/test/desktop
[desktop_greeter]
ObjectPath=/local/sneetsher/indicator/test/desktop
[desktop_lockscreen]
ObjectPath=/local/sneetsher/indicator/test/desktop
local.sneetsher.indicator.test.service
[D-BUS Service]
Name=local.sneetsher.indicator.test
Exec=/usr/lib/indicator-test/indicator-test-service
90_unity-greeter.gschema.override
[com.canonical.unity-greeter]
indicators=['ug-accessibility', 'com.canonical.indicator.keyboard', 'com.canonical.indicator.session', 'com.canonical.indicator.datetime', 'com.canonical.indicator.power', 'com.canonical.indicator.sound', 'local.sneetsher.indicator.test', 'application']
Eu espero o motivo, eu não criei a estrutura do menu ou seu meta (pseudo itens como _header
) como eles estão no código C original.
Alguém poderia fazer uma porta funcional de código indicador do sistema em C para Python?