如何为 Unity 开发系统指标?

use*_*.dz 39 indicator python unity c application-development

这不是如何创建 Unity 指标的副本. 我正在寻找系统指示器而不是应用程序指示器。

背景:

从这两个问题来看:

我了解到有两种类型的指标:

  • 系统:音响,键盘,应用程序,...(尝试:ps ax | grep indicator
  • 应用程序:nm-applet、sysmonitor、...以及哪些应用程序指标可用?

所有应用程序指标都由指标应用程序(系统应用程序)处理/显示。系统指标由 Unity 面板直接显示。

这两个问题都是关于从登录和锁定屏幕添加/删除指标。第一个是直接设置(在处理系统指标时)。第二个是一个艰难的设置(在处理应用程序指标时),需要修改锁屏面板服务(unity包)的源和登录屏幕的 unity-greeter 源。

对于sysmonitor,对我来说这是解决方法。最好的解决方案是实施系统指标而不是应用指标。

话题:

  • 是否有统一的系统指标 API(最好:Python 然后 C/C++)?请参考官方文档。

  • 大多数系统指标是使用 Vala 编程语言编写的。有人可以使用 Python 或 C 为系统指标编写小演示吗?

更新:

我发现了几个可以推动的链接:

  • 应用程序指标项目页面中,他们列出了用于应用程序指标的AppIndicator-0.3 API(CPython)的链接。

    他们还列出了 Indicate-0.7 API(CPython)。这是什么?嗯,它是桌面应用程序之间的 DBus 消息传递通道。

  • 另一方面,在系统指标项目页面中,他们提到:

    系统指标 API

    • 使用 libindicate 的消息菜单。
    • 使用 libunity 的声音菜单。
    • 使用 Evolution-Data-Server 的日期/时间指示器

    他们似乎列出了数据 API,而不是像 Evolution-Data-Server 那样的指标开发 API。但不确定libindicate 和libunity。有没有人使用过这两个库?

    尝试apt-cache rdepends libunity9 libindicator7 libindicator3-7查看哪个指标正在中继这些库。

Update2:这是为了让感兴趣的用户保持更新。

从我收集到现在,这里是可能的解决方案的顺序:

  1. libindicator3-7 (高,很多指标都依赖它)

    我在源代码中找到了一些测试示例,我尝试过的一些虚拟指标可以安装在/usr/lib/indicators3/7/.lib中,它们是共享的 lib .so。我可以让它们显示在登录和常规会话中,但不能显示在锁定屏幕中。

    然而,有一些测试指标服务,看起来像 Unity 系统的服务。我还没有尝试过。

  2. libindicator7

    来自与 libindicator3-7 相同的来源,来自 rdepends:

    mate-indicator-applet
    lxpanel-indicator-applet-plugin
    
    Run Code Online (Sandbox Code Playgroud)

    它似乎用于为面板中的指标制作容器。

  3. libunity9 (低的)

    还没有研究

use*_*.dz 13

系统指示灯服务

嗯,它真的比我预期的要简单。没有针对它的特定 API。因为它只是一个GSimpleActionGroup & 并带有通过DBus导出的相应GMenu ,然后使用放入的同名声明文件告诉 Unity 它们的存在/usr/share/unity/indicators/。不需要任何其他库。

这是一个非常小的C 语言示例:

  1. tests/indicator-test-service.clibindicator源获取副本

    apt-get source libindicator
    cp libindicator-*/tests/indicator-test-service.c .
    cp libindicator-*/tests/com.canonical.indicator.test* .
    
    Run Code Online (Sandbox Code Playgroud)
    • indicator-test-service.c没有变化

      apt-get source libindicator
      cp libindicator-*/tests/indicator-test-service.c .
      cp libindicator-*/tests/com.canonical.indicator.test* .
      
      Run Code Online (Sandbox Code Playgroud)
    • com.canonical.indicator.test修改添加锁和迎宾模式

      [Indicator Service]
      Name=indicator-test
      ObjectPath=/com/canonical/indicator/test
      
      [desktop]
      ObjectPath=/com/canonical/indicator/test/desktop
      
      [desktop_greeter]
      ObjectPath=/com/canonical/indicator/test/desktop
      
      [desktop_lockscreen]
      ObjectPath=/com/canonical/indicator/test/desktop
      
      Run Code Online (Sandbox Code Playgroud)
    • com.canonical.indicator.test.service.in从文件名中删除后缀并更改可执行路径

      [D-BUS Service]
      Name=com.canonical.indicator.test
      Exec=/usr/lib/x86_64-linux-gnu/indicator-test/indicator-test-service
      
      Run Code Online (Sandbox Code Playgroud)
  2. 编译它

    gcc -o indicator-test-service indicator-test-service.c `pkg-config --cflags --libs gtk+-3.0`
    
    Run Code Online (Sandbox Code Playgroud)
  3. 手动安装

    sudo su
    mkdir /usr/lib/x86_64-linux-gnu/indicator-test/
    cp indicator-test-service /usr/lib/x86_64-linux-gnu/indicator-test/
    cp com.canonical.indicator.test /usr/share/unity/indicators/
    cp com.canonical.indicator.test.service /usr/share/dbus-1/services/
    
    Run Code Online (Sandbox Code Playgroud)
  4. Greeter 的配置,覆盖默认指标列表

    • 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', 'com.canonical.indicator.test', 'application']
      
      Run Code Online (Sandbox Code Playgroud)
    • 安装

      cp 90_unity-greeter.gschema.override /usr/share/glib-2.0/schemas/
      glib-compile-schemas /usr/share/glib-2.0/schemas/
      
      Run Code Online (Sandbox Code Playgroud)
  5. 测试

    sudo service lightdm restart
    
    Run Code Online (Sandbox Code Playgroud)

笔记

  • DBus 服务很麻烦,如果您希望用户能够随时关闭应用程序。最好使用自动启动,就像默认指标一样。

  • 我在这里上传了准备好的文件:

    https://github.com/sneetsher/mysystemindicator_minimum

    和修改后的副本在这里:

    https://github.com/sneetsher/mysystemindicator

    我为不同的模式尝试过不同的菜单。它可以快速安装和测试。

  • 这看起来太简单了,可以轻松移植到支持 GIO Gnome 库(包括 DBus)的任何其他语言。由于我正在寻找python,我可能会在以后添加它。

参考:


系统指示器插件

这不是上面那个完全独立的指示器,它只是一个共享库插件,类似于libappmenu.so& libprintersmenu.so(应用程序菜单和打印机指示器)。它只能在常规用户会话和欢迎中显示(不在锁定屏幕上)。

我不能让它在我现在的机器上工作,但我以前做过。这里的步骤,可能是我遗漏了什么。

  1. 使用上面的相同来源 libindicator

    test/libdummy-indicator-*.c 是示例(简单且可见,显示在面板上的那些)

  2. 编译

    ./autogen.sh
    make
    
    Run Code Online (Sandbox Code Playgroud)
  3. 安装

    sudo cp tests/.libs/libdummy-indicator-visible.so /usr/lib/indicators3/7/libdummy.so
    
    Run Code Online (Sandbox Code Playgroud)
  4. 配置为在欢迎屏幕中显示

    • 90_unity-greeter.gschema.override使用没有lib前缀和.so扩展名的相同名称。

      [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', 'application', 'dummy']
      
      Run Code Online (Sandbox Code Playgroud)
    • 安装

      cp 90_unity-greeter.gschema.override /usr/share/glib-2.0/schemas/
      glib-compile-schemas /usr/share/glib-2.0/schemas/
      
      Run Code Online (Sandbox Code Playgroud)

  • 我想知道这是否可以在 Python 中完成。C 看起来有点吓人。 (2认同)