Contexte:
-
Ceci n'est PAS destiné aux indicateurs d'application mais aux indicateurs système .
Image de: lien
-
L'objectif est d'afficher indicator-sysmonitor dans les écrans Greeter / Lock / Ubiquity. Il y a un travail autour de:
Comment faire indicator-sysmonitor comme indicateur par défaut sur l'écran de connexion
C Code original: (fonctionne bien)
-
J'en ai déjà un en langage C, voir mon autre question:
Comment développer un indicateur système pour l'unité?
Cependant,
indicator-sysmonitor
est déjà développé en Python comme beaucoup d'autres indicateurs d'application. Je n'aime pas l'idée que les développeurs obligés de porter leurs projets sur C ou d'écrire un proxy Python-C s'ils veulent afficher l'indicateur dans les écrans greeter / lock / ubiquity. Faire de indicator-sysmonitor un indicateur système directement à partir de python serait la meilleure solution (aucune solution de contournement et ce serait une solution générique pour tous les projets python qui utilisent actuellement appindicator).
Code Python: (Mon essai a échoué pour porter le code c en python)
-
J'ai du mal à le porter dans Python. Voici mon code actuel qui ne fonctionne pas. Il crée un objet DBus pour Menu et amp; Actes. Il est répertorié dans le plug-in d'indicateurs XFCE. Mais pas montré sur le panneau.
/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']
Question:
J'attends la raison pour laquelle, je n'ai pas créé la structure du menu ou ses méta (pseudo éléments comme _header
) tels qu'ils sont dans le code C d'origine.
Quelqu'un pourrait-il définir un port de cet indicateur de système en C en Python?