如何向指标会话菜单添加项目?

如何向指标会话菜单添加项目?

是否可以添加或编辑会话指示器菜单项?

有没有简单的方法可以做到这一点,或者是否需要重新编译自定义版本?

我在网上找不到太多与此相关的信息。

答案1

一些参考:
-jimi312 / 标题栏菜单 / 来源 — Bitbucket:
-使用 PyQt 进行 DBus 编程
-Unity/QA/StateIntrospection - Ubuntu 维基百科:特别是示例代码

目前,被动查询可以提取如下帖子中所示的信息:
如何找出哪个应用程序与指示图标相关联?

我也在探索这个问题的答案,因为它与 DBus 有关,尽可能使用高级接口以避免低级编程。最终目标是创建一个实用程序,最低限度地识别指示器的主机应用程序及其组件菜单的子应用程序。最大限度,它将允许修改菜单,例如session-indicator包括顶级菜单的菜单,即统一面板本身的图标指示器。

最好知道 DBus 环境中存在哪些(如果有的话)修饰方法可以修改 DBus,这样就可以根据需要修改indicator panel及其组件(例如)。Session Indicator

以下命令揭示了操作session indicator总线信息的接口方法,但遗憾的是这里没有描述这些方法中使用的参数 - 上面的参考提供了描述一般指示器接口的文档的链接 - 但session indicator仍然需要具体细节。

输出

qdbus --session  com.canonical.indicator.session

暗示菜单界面的存在项目以下:

/
/org
/org/ayatana
/org/ayatana/indicator
/org/ayatana/indicator/service
/com
/com/canonical
/com/canonical/indicator
/com/canonical/indicator/users
/com/canonical/indicator/用户/菜单
/com/canonical/indicator/session
/com/canonical/indicator/session/service
/com/canonical/indicator/session/menu

可以使用以下方法检查接口:

gdbus introspect --session --dest com.canonical.indicator.session \
                 --object-path /com/canonical/indicator/users/menu --recurse

gdbus introspect --session --dest com.canonical.indicator.session \
                 --object-path /com/canonical/indicator/session/menu --recurse

请注意 的内部引用interface com.canonical.dbusmenu

对于真正的全面转储使用:

gdbus introspect --session --dest com.canonical.indicator.session --object-path / --recurse

几个子应用程序绑定到session indicator下拉菜单,但不清楚这些接口方法是否仅将数据传输到相关的子菜单应用程序,或者是否实际上存在与会话指示器应用程序本身的通信渠道,以便其菜单可以“方法化”。

还,

qdbus --literal --session  com.canonical.AppMenu.Registrar           \
                          /com/canonical/AppMenu/Registrar           \
                           com.canonical.AppMenu.Registrar.GetMenus  \
| sed -e 's/], \[/],\n[/g' | sort -k 4 -V

提供界面菜单关联列表(有menus针对窗口的,也有针对指示器的,比如session indicator,下面列表中的哪个还有待确定)

[Argument: (uso) 25167301, ":1.22", [ObjectPath: /com/canonical/menu/18005C5]],
[Argument: (uso) 25165828, ":1.22", [ObjectPath: /com/canonical/menu/1800004]],
[Argument: (uso) 48234500, ":1.81", [ObjectPath: /com/canonical/menu/2E00004]],
[Argument: (uso) 55244411, ":1.114", [ObjectPath: /com/canonical/menu/34AF67B]],
[Argument: (uso) 55370996, ":1.114", [ObjectPath: /com/canonical/menu/34CE4F4]],
         ...
[Argument: (uso) 65083174, ":1.275", [ObjectPath: /com/canonical/menu/3E11726]],
[Argument: (uso) 65085474, ":1.275", [ObjectPath: /com/canonical/menu/3E12022]],

检查

qdbus --session  com.canonical.AppMenu.Registrar /com/canonical/AppMenu/Registrar 

这些方法可能有用:

method void org.freedesktop.DBus.Properties.Set(QString interface_name, QString property_name, QDBusVariant value
method void com.canonical.AppMenu.Registrar.RegisterWindow(uint windowId, QDBusObjectPath menuObjectPath)
method void com.canonical.AppMenu.Registrar.UnregisterWindow(uint windowId)

注意参数被标识为menuObjectPath。这些方法名称以限定{un}RegisterWindow,因此这些方法可能与指示器菜单无关。

一旦确定了正确的方法及其参数,使用起来就更容易了qdbus(但是不能使用 QVariant 参数)或者D-Feet调用gdbus这些方法。

基本上qdbusgdbus功能相同,并使用相同的参数,但以下情况除外:

  • qdbus不识别单独的组件,--dest, --object-path, --method, ...而是要求按精确顺序给出相应的属性
  • gdbus方法调用处理更多参数类型
  • qdbus并不像gdbus特别是 w/那样详尽--recurse
  • qdbus可以通过双击或三击从其输出中提取其命令参数序列,并使用鼠标中键将其连接到命令的末尾

答案
如何找出哪个应用程序与指示图标相关联?
在上面提到的帖子中描述了如何使用qdbus作为一种权宜之计来编写脚本。

手册页man gdbus(或gdbus:) 比 有更好的阐述,man qdbus但请考虑D-Feet

相关内容