在 Ubuntu 10.04 中这样做很简单。该问题特定于 Ubuntu 12.04。
由于某种原因,缺少使用 dbus 和后续实现细节的组合,因此另一个自我编写了答案(此处解释了微不足道但有些费力的过程)。
这种反应对于gdbus是有用的,但这个答案是超级有用- (静态系统开销现在已经减少到可接受〜10%)。
一些中肯的参考
(SRC:回答到是什么指标和系统托盘之间的区别?:
这里是指标的文档:
应用指标| Ubuntu App Developer
libindicate 参考手册
libappindicator 参考手册
还
ref:如何识别制作指示器图标的应用程序?(此链接不恰当地重定向到https://askubuntu.com/questions/184589/how-can-menu-bars-that-require-a-right-click-be-activated-like-ubuntu-versions)
书签:如何找出哪个应用程序与 Ubuntu 12.04 中的指示器图标相关联?
是一个严重的问题,原因和问题如下所述,并且已经进行了大量投资,并且对于补救目的是必要的。
审查参考文献。找到精心策划的解决方案......
(可能需要一个指标ap。指标)
这与右键单击无关(是吗?)。
Ubuntu 12.04 中的指示器图标如何与负责它在顶部面板上显示的程序相匹配?
正在运行的应用程序列表可以包括所有使用System Monitor.
如何为指标找到正确的匹配过程?
如何识别子指标应用?这些是与指标下拉菜单的组件相关联的应用程序。(这是一个单独的问题,很自然地会跟进进展。它被包含在此处,因为很明显,没有设置可以轻松追踪违规的 sub 或指标 aps。)
与一些预期的守护进程和后台任务(如 nm-applet)混合在一起——不仅 Xorg 和 compiz 需要过多的 CPU 时间,而且他们的随行人员也必须出现!进一步加剧了这个问题——我们的计算绑定任务在现场不再有效地工作——电池寿命缩短,定制 ap.s 的 CPU 时间减少等——所有这些都源于对电池 ap 正在发生的事情的检查。指标 - 这过去和现在都不是轻率的、修辞的或闲散的沉思,但会对 12.04 的可信部署产生影响,以减少其在生产环境中的开销的负面影响)减少自定义 ap.s 等的 CPU 时间 - 所有这些都是从检查电池 ap 发生的事情中沉淀出来的。指标 - 这过去和现在都不是轻率的、修辞的或闲散的沉思,但会对 12.04 的可信部署产生影响,以减少其在生产环境中的开销的负面影响)减少自定义 ap.s 等的 CPU 时间 - 所有这些都是从检查电池 ap 发生的事情中沉淀出来的。指标 - 这过去和现在都不是轻率的、修辞的或闲散的沉思,但会对 12.04 的可信部署产生影响,以减少其在生产环境中的开销的负面影响)
(我的电池指示器有问题 - 它有时有 % 和其他时间 hh:mm - 有必要了解 ap. & v. 以获取有关控制相同的更多信息。同上:其他指示器 aps 存在问题。 : NM 与 iwlist/iwconfig 冲突、BT ap. 与 RF 开关、电池 ap. 没有暂停/睡眠以延长电池运行时间,......列表还在继续)
详细信息来自:
如何找到应用程序指示符 ID?
建议查看:
file:///usr/share/indicator-application/ordering-override.keyfile
[Ordering Index Overrides]
nm-applet=1
gnome-power-manager=2
ibus=3
gst-keyboard-xkb=4
gsd-keyboard-xkb=5
Run Code Online (Sandbox Code Playgroud)
这解决了电池ap。识别,大概 nm 是 rf 图标的 NetworkManager,但包络、蓝牙和扬声器指示器 aps。仍然是个谜。(此外,排序不相关。)
请注意,过去很简单,只需右键单击即可获得About查找 ap的选项。&诉信息。
四处浏览:
file:///usr/share/indicator-application/ordering-override.keyfile
检查:
file:///usr/share/indicators
file:///usr/share/indicators/messages/applications/
...
也许?/大概?寻求的信息可能隐藏在
file:///usr/share/indicators 中
评论中给出了一个参考:
指标和系统托盘有什么区别?
从那个来源引用...
不幸的是,桌面指标还没有得到很好的记录:我找不到任何规范文档......
嗯……实际文档
https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Summary
没有多大帮助,但它的存在信息提供了相当多的洞察力……
应用程序指标服务有一个内部 API,允许获取所有指标的列表,其中包括它们的 DBus 地址。您可以使用此命令行来执行此操作:
gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications
Run Code Online (Sandbox Code Playgroud)
您将返回一些不太有用的内容,因为它是伪 JSON 格式。如果您编写脚本,则可以将其放入解析器中并使用它。如果您想只做一次,请通读文本。您正在寻找如下所示的字段::1.XXX 即指标的 DBus 地址。
一旦您获得了指标的地址,您就可以询问 DBus 该指标的 PID 是什么。您请求的 PID:1.123如下所示:
gdbus call --session --dest org.freedesktop.DBus --object-path / --method org.freedesktop.DBus.GetConnectionUnixProcessID :1.123
Run Code Online (Sandbox Code Playgroud)
获得 PID 后,您可以询问/proc有关该过程的信息。例如,如果您想知道用于启动进程号的命令,1您可以执行以下操作:
cat /proc/1/cmndline
Run Code Online (Sandbox Code Playgroud)
祝你好运!
小智 2
很遗憾 -
gdbus call --session --dest com.canonical.indicator.application \
--object-path /com/canonical/indicator/application/service \
--method com.canonical.indicator.application.service.GetApplications
Run Code Online (Sandbox Code Playgroud)
并未详尽列举所有指标图标或其子指标。MI(消息指示器)菜单与多个子指示器通信应用程序连接。未列出。还缺少电源、音量和时钟指示器信息。
qdbus使用起来更简单,并d-feet提供一个 GUI 来执行相同的操作,并且可以轻松列出属性值。
使用qdbus方法如下:
qdbus --literal | sort
Run Code Online (Sandbox Code Playgroud)
三击以选择com.canonical.indicator.application输出中的 w/ nl
...
:1.97
:1.98
ca.desrt.dconf
com.canonical.AppMenu.Registrar
com.canonical.hud
com.canonical.indicator.application
com.canonical.indicator.datetime
com.canonical.indicator.messages
com.canonical.indicator.printers
com.canonical.indicator.session
com.canonical.indicator.sound
com.canonical.Unity
...
Run Code Online (Sandbox Code Playgroud)
使用向上箭头bash history重复命令编写下一个命令(删除| sort 仅留下qdbus --literal),然后按鼠标中键完成命令:
qdbus --literal com.canonical.indicator.application
Run Code Online (Sandbox Code Playgroud)
三次单击最后一行
/
/org
/org/ayatana
/org/ayatana/indicator
/org/ayatana/indicator/service
/com
/com/canonical
/com/canonical/indicator
/com/canonical/indicator/application
/com/canonical/indicator/application/service
Run Code Online (Sandbox Code Playgroud)
按重复历史向上箭头、空格键和鼠标中键来撰写:
qdbus --literal com.canonical.indicator.application /com/canonical/indicator/application/service
Run Code Online (Sandbox Code Playgroud)
双击在输出中选择所需的方法,然后按向上箭头、空格键和鼠标中键创建命令,然后按 Enter 运行它。(为了清楚起见,在此示例中添加了续行符):
qdbus --literal com.canonical.indicator.application \
/com/canonical/indicator/application/service \
com.canonical.indicator.application.service.GetApplications
Run Code Online (Sandbox Code Playgroud)
这仅输出BT 和 NM 指示符信息(此处打印得很漂亮以供说明)
[Argument: a(sisossssss)
{[Argument: (sisossssss)
"bluetooth-active",
0,
":1.155",
[ObjectPath: /org/ayatana/NotificationItem/bluetooth_manager/Menu],
"",
"",
"",
"Bluetooth: On",
"bluetooth-manager",
"Bluetooth"],
[Argument: (sisossssss)
"nm-signal-75",
1,
":1.21",
[ObjectPath: /org/ayatana/NotificationItem/nm_applet/Menu],
"",
"",
"",
"Wireless network connection 'office WiFi 1' active: office WiFi (77%)",
"nm-applet",
"Network"]
}
]
Run Code Online (Sandbox Code Playgroud)
其他指示器被引用为其他com.canonical.indicator. ...接口(在开头列出),但这可能是必须使用的,但子菜单指示器 aps 仍然未识别:
qdbus --literal com.canonical.AppMenu.Registrar \
/com/canonical/Unity/Panel/Service \
com.canonical.Unity.Panel.Service.Sync
Run Code Online (Sandbox Code Playgroud)
虽然有很多脏东西(可能是图标图像位),但修剪和漂亮的输出是:
[Argument: a(ssssbbusbbi) {
[Argument: (ssssbbusbbi) "libappmenu.so", "0x9733fe0", "", "_File", true, true, 0, "", false, false, 0],
[Argument: (ssssbbusbbi) "libappmenu.so", "0x97352e0", "", "_Edit", true, true, 0, "", false, false, 1],
[Argument: (ssssbbusbbi) "libappmenu.so", "0x9737868", "", "_View", true, true, 0, "", false, false, 2],
[Argument: (ssssbbusbbi) "libappmenu.so", "0x9738920", "", "_Search", true, true, 0, "", false, false, 3],
[Argument: (ssssbbusbbi) "libappmenu.so", "0x9739e10", "", "_Terminal", true, true, 0, "", false, false, 4],
[Argument: (ssssbbusbbi) "libappmenu.so", "0x973c070", "", "Ta_bs", true, false, 0, "", false, false, 5],
[Argument: (ssssbbusbbi) "libappmenu.so", "0x973d6a0", "", "_Help", true, true, 0, "", false, false, 6],
[Argument: (ssssbbusbbi) "libapplication.so", "0x90cdcd0", "bluetooth-manager", "", false, false, 1, "<... crud ...>", true, true, 300],
[Argument: (ssssbbusbbi) "libapplication.so", "0x8e861a8", "nm-applet", "", false, false, 1, "<... crud ...>", true, true, 450],
[Argument: (ssssbbusbbi) "libprintersmenu.so", "", "", "", false, false, 0, "", false, false, -1],
[Argument: (ssssbbusbbi) "libmessaging.so", "0x8dabc7c", "indicator-messages", "", false, false, 1, "<... crud ...>", true, true, 200],
[Argument: (ssssbbusbbi) "libpower.so", "0x8f0405c", "indicator-power", "", true, false, 6,
". GThemedIcon battery-charged battery-full-charged-symbolic battery-full-charged gpm-battery-charged gpm-battery-100-charging ", true, true, 250],
[Argument: (ssssbbusbbi) "libsoundmenu.so", "0x8f040b4", "indicator-sound", "", false, false, 1, "<... crud ...>", true, true, 500],
[Argument: (ssssbbusbbi) "libdatetime.so", "0x8e8881c", "indicator-datetime", " 1:16:10 AM", true, true, 0, "", false, false, 550],
[Argument: (ssssbbusbbi) "libsession.so", "0x8e6045c", "indicator-session-devices", "", false, false, 1, "<... crud ...>", true, true, 600]}]
Run Code Online (Sandbox Code Playgroud)
注意:终止号码 600、550、500、450、300、250、200 从右到左关联,将 ap 与其指示器图标相匹配。