История:
-
Это НЕ для индикаторов приложений , но системных индикаторов .
Изображение из: Ссылка
-
Цель состоит в том, чтобы показать индикатор-sysmonitor в экранах Greeter / Lock / Ubiquity. В работе есть:
Как сделать индикатор-sysmonitor в качестве индикатора по умолчанию на экране входа в систему
C Оригинальный код: (работает нормально)
-
Я уже получил работу на языке C, см. мой другой вопрос:
Как разработать системный индикатор для единства? р>
Однако,
indicator-sysmonitor
уже разработано на Python так же, как и многие другие индикаторы приложения. Мне не нравится идея, что разработчики обязаны переносить свои проекты на C или писать прокси-сервер Python-C, если они хотят показать индикатор в экранах greeter / lock / ubiquity. Вместо этого, создание индикатора-sysmonitor создает системный индикатор непосредственно из python, было бы лучшим решением (без обходных решений, и это будет общее решение для всех проектов python, которые в настоящее время используют appindicator).
Код Python: (Мое неудачное пробу для того, чтобы передать код c на python)
-
Я пытаюсь перенести его на Python. Вот мой текущий код, который не работает. Он создает объект DBus для обоих меню & amp; Действия. Он указан в плагине индикаторов XFCE. Но не показано на панели.
/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']
Вопрос:
Я ожидаю, почему я не создал структуру меню или его мета (псевдо-элементы, такие как _header
), как они есть в исходном коде C.
Может ли кто-нибудь создать рабочий порт этого кода системного индикатора в C на Python?