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

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

有没有一种简单的方法可以做到这一点,还是会涉及重新编译自定义构建?

我在网上找不到太多相关内容。

一些参考:
– jimi312 / Titlebar菜单/来源 – Bitbucket:
– 使用PyQt使用DBus进行编程
– Unity / QA / StateIntrospection – Ubuntu Wiki:特别是示例代码

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

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

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

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

输出来自

 qdbus --session com.canonical.indicator.session 

暗示菜单界面的存在如下:

/
/组织
/组织/阿亚坦
/组织/阿亚坦/指示器
/组织/阿亚坦/指示器/服务
/ COM
/ COM /规范
/ COM /规范/指示器
/ COM /规范/指示器/用户
/ COM /经典/指示器/用户/菜单
/ COM /规范/指示器/会话
/ COM /经典/指示器/会话/服务
/ COM /经典/指示器/会话/菜单

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

 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 indicatorsession 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参数)或比qdbus使用D-Feet来调用方法。

基本上qdbusqdbus在function上是相同的,并使用相同的参数,除了:

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

答案
如何找出哪个应用程序与指标图标相关联?
在上面提到的post中描述了如何使用qdbus作为组成脚本的权宜技术。

manpage man qdbus (或man qdbusman qdbus有更好的阐述,但考虑D-Feet