如何找出哪个应用程序与指标图标相关联?

在Ubuntu 10.04中执行此操作非常简单。 这个问题是针对Ubuntu 12.04的。

由于某种原因,使用带有实施细节的dbus的组合由于某种原因而缺失,因此另一个自我组成了答案 ( 这里解释了一些微不足道但有些费力的过程)。

关于gdbus这种响应是有用的,但这个答案非常有用 – (静态系统开销现已减少到可接受的~10%)。

一些相关的参考文献
(src: 回答 指标与系统托盘有什么区别? :
以下是指标的文档:

应用指标| Ubuntu App Developer
libindicate参考手册
libappindicator参考手册

  • DesktopExperienceTeam / ApplicationIndicators – Ubuntu Wiki

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所有进程。

如何找到指标的正确匹配过程?

如何识别子指标应用程序? 这些是与指标下拉菜单的组件相关联的aps。 (这是一个单独的问题,很自然地跟进了进展。它包括在这里,因为很明显没有任何条款可以轻松追踪违规或子指标aps。)

(对SM的检查指出了更快的电池耗尽和缩短的运行时间的一个相当重要的因素 – 12.04的环境静态CPU率现在远远超过20%,之前在10.04,它远低于10%,在5%之间7%! – 巨大的过度cpu开销来自Xorg和compiz – 在启动系统后,只运行SM并选择所有进程,在%CPU上进行排序 – 在资源和进程之间切换执行开销问题 – 运行另一个ap像gedit“文本编辑器”简要地给它CPU优先级 – 回到S&M几个aps。按顺序位于列表的顶部:gnome-system-monitor按预期,然后:Xorg,compiz,unity-panel-service,hud -service,与dbus-daemon和kworker / x:y混合了一些预期的守护进程和后台任务,如nm-applet – 不仅Xorg和compiz需要过多的CPU时间,而且他们的随行人员也必须出现!进一步加剧问题 – 我们的计算绑定任务不再是 rk在现场有效 – 减少了电池寿命,缩短了自定义时间等的CPU时间 – 所有这一切都源于对电池ap正在发生的事情的检查。 指标 – 这不是轻浮,修辞或闲置的冥想,但会对12.04的可靠部署产生影响,以减少其在生产环境中的开销的负面影响)

(我的电池指示器有问题 – 它有时会有%和其他时间hh:mm – 有必要知道ap。&v。以获得更多关于控制它的信息。同上:其他指标aps存在问题。 :NM与iwlist / iwconfig冲突,BT ap。与RF开关,电池ap。w /无暂停/睡眠因电池运行时间不佳,……列表继续)

细节来自:
如何找到应用指标ID?

建议看:
文件:///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 

这解决了电池ap。 识别,并且推测nm是用于rf图标的NetworkManager,但是信封,蓝牙和扬声器指示器aps。 仍然是一个谜。 (此外,排序不相关。)

请注意,过去只需右键单击即可获得“ About选项以查找ap。 &v。信息。

浏览和关于:

文件:///usr/share/indicator-application/ordering-override.keyfile

检查:
文件:/// USR /股/指标
文件:/// USR /股/指示器/消息/应用/

也许?/想必? 寻求的信息可能会被埋没
文件:/// USR /股/指标

评论中提到:
指标和系统托盘有什么区别?
引用该来源……

不幸的是,桌面指标尚未得到很好的记录:我找不到任何规范文档……

嗯……实际的文件
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 

你会得到一些不太有用的东西,因为它是伪装的JSON格式。 如果您编写脚本,则可以将其拉入解析器并使用它。 如果你只想做一次,那么请仔细阅读文字。 您正在寻找这样的字段:1.XXX这是指标的:1.XXX地址。

获得指标的地址后,您可以询问DBus该指标的PID值。 您要求PID :1.123如下所示:

 gdbus call --session --dest org.freedesktop.DBus --object-path / --method org.freedesktop.DBus.GetConnectionUnixProcessID :1.123 

现在有了PID后,您可以询问/proc获取有关该过程的信息。 例如,如果您想知道用于启动进程编号1的命令,您可以执行以下操作:

 cat /proc/1/cmndline 

祝好运!

第一次迭代

 qdbus --literal com.canonical.AppMenu.Registrar \ /com/canonical/Unity/Panel/Service \ com.canonical.Unity.Panel.Service.Sync \ | sed -e 's/[^{]*{\(.*\)}\]/\1/' | sed -e 's/\[[^"]*/[/g' \ | sed -e 's/\[\(\(\("[^"]*"\|[^,"]*\), \)\{4\}\)[^]]*,\([^,]*\)\]/[\4, \1]/g' \ | sed -e 's/\[\([^,]*\, \)\("[^"]*",\)/[ \1\2 /g' \ | sed -e 's/\[ *\(....,.\{24\}\) */[\1/g' | sed -e 's/\], \[/]\n[/g' | sort -n -k2 

生产:

 [ -1, "libprintersmenu.so", "", "", "", ] [ 0, "libappmenu.so", "0x9581b90", "", "_File", ] [ 1, "libappmenu.so", "0x9582ad0", "", "_Edit", ] [ 2, "libappmenu.so", "0x9583cf0", "", "_View", ] [ 3, "libappmenu.so", "0x9585828", "", "_Search", ] [ 4, "libappmenu.so", "0x9586da8", "", "_Tools", ] [ 5, "libappmenu.so", "0x96575a0", "", "_Documents", ] [ 6, "libappmenu.so", "0x96596e0", "", "_Help", ] [ 200, "libmessaging.so", "0x9238c7c", "indicator-messages", "", ] [ 250, "libpower.so", "0x9346c54", "indicator-power", "", ] [ 300, "libapplication.so", "0x86a6368", "bluetooth-manager", "", ] [ 450, "libapplication.so", "0x930f650", "nm-applet", "", ] [ 500, "libsoundmenu.so", "0x9346cac", "indicator-sound", "", ] [ 550, "libdatetime.so", "0x931581c", "indicator-datetime", " 4:59:07 PM", ] [ 600, "libsession.so", "0x92ed45c", "indicator-session-devices", "", ] 

第二次迭代

(带图标确认关联)

 qdbus --literal com.canonical.AppMenu.Registrar \ /com/canonical/Unity/Panel/Service \ com.canonical.Unity.Panel.Service.Sync \ | sed -e 's/[^{]*{\(.*\)}\]/\1/' | sed -e 's/\[[^"]*/[/g' \ | sed -e 's/\[\(\(\("[^"]*"\|[^,"]*\), \)\{4\}\)\([^,]*, \)\{3\}\("[^"]*"\)[^]]*,\([^,]*\)\]/[\6, \1 <\5>]/g' \ | sed -e 's/<"">\]/]/g' | sed -e 's/<"\([^"]*">\]\)/hapi.png

这是hapi.html(没有单元格黑色背景):

  -1"libprintersmenu.so"""""""  /* oops */ 
0"libappmenu.so""0x8b12b38""""_File"
1"libappmenu.so""0x8a1cd30""""_Edit"
2"libappmenu.so""0x8b01b28""""_View"
3"libappmenu.so""0x8b35700""""_Search"
4"libappmenu.so""0x8b11350""""_Terminal"
5"libappmenu.so""0x8b142f0""""Ta_bs"
6"libappmenu.so""0x8b37528""""_Help"
200"libmessaging.so" "0x85c8c7c""indicator-messages" ""
250"libpower.so" "0x86da454""indicator-power" ""
300"libapplication.so""0x86a6368""bluetooth-manager" ""
450"libapplication.so""0x869f258""nm-applet" ""
500"libsoundmenu.so" "0x86da4ac""indicator-sound" ""
550"libdatetime.so" "0x86a581c""indicator-datetime" " 5:25:55 PM"
600"libsession.so" "0x867cc5c""indicator-session-devices"""

确认:[crud]是根据data:image/png;base64,[crud]图标图像数据data:image/png;base64,[crud]

 https://askubuntu.com/questions/185991/how-does-one-find-out-which-application-is-associated-with-an-indicator-icon/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAWCAYAAADafVyIAAAABHNCSVQICAgIfAhkiAAAAudJREFUSIntkF1ok1cYx38njTW1rSkOZGjFK52fbKCCzsgWkIF4sV0IAxljIIiyi+mFCOLdwJuJn5tuQ7AVh1VX2Vjpqq6aZc5araZ5bWOak7dvl5W1YtOPtE1i3o+zC410Npoh1St/V+c8zzn/3zkPvOZVYEjtdyOunVRKuZ7uTSq8CP39900Unxmx9u1TkQdAT1z7skdqnwP4fKvfj3a0Depd4ZSut3knnnvmD/rD4XIjrgUNqQUK9dPjmQ0Kjuh6u+/atRt/trTerHW5RKWTc20pKlBKudIefkCxDnhPqXMlAIYMb++Wdz8A+O5E7RFQysra+wDzZG3d947j5EzT3FxU0KN3HBAu8WF+HwhEBIBp2rtQTn0iemfO4aPHfurru3+7tHTa2kT0zpxgMCiTyWSHx+N5W0o5fZKgO6b9ZkhNGVJTKPVFIfGVwB91QoiKtGV/AqT+SvReAlypdHY9YI2OjXcKIdy58eElhX7gLxQ6kWis6xxAOpNZCWA6uRDAWDq9CMAyzV6AgcGBec8d0bOIROISQCBmA1SWlQ8CWLZVCSBEyQiAbVtVLyQ4dGjfTIBMNpMC8FbN8gJksw9HATye0hkAIyOj2UmCZDIZKSZQtrXh0dnBKEBlxYxlAAPJ4e5HAs+bAGOZ8b78HXd+sWqNfyvwBsCvDfXbFr21YOPTglL39L22bWUaG5ouAFSUl3/kOE6usakxCFBW5lnuOI5VU1P35LHuCfdb8otNH3+aaGr4saq6eu7aiYLW1ps/9yQSyeMnakKGDK8GsaL3n77rp06dNXS9zYvlXjk0NHyvubl5qNg0xNKFC323Wq7ebbsRiADicX0+MBtARkPt3THN3rN752YAGQntMKSmzp+p+apYeJ4SYA3wbqHmxcYLp7/9+uBBwPt3Z+eseDT0IHbvdsrv9y/9v4JiLAbmAehd7fWG1NTxbw7s579jnxo6Qi2dVy//cgWonvLwx/iAd15W+HP5F1PVVGkwY49EAAAAAElFTkSuQmCC 

不幸的是

 gdbus call --session --dest com.canonical.indicator.application \ --object-path /com/canonical/indicator/application/service \ --method com.canonical.indicator.application.service.GetApplications 

没有详尽列举所有指标图标或其子指标。 MI(消息传递指示器)菜单与多个子指示器通信aps接口。 没有列出。 还缺少功率,音量和时钟指示信息。

qdbus使用qdbus更简单, d-feet提供了一个GUI来做同样的事情,以及轻松列出属性值。

使用qdbus如下:

 qdbus --literal | sort 

三次单击以在输出中选择w / nl中的com.canonical.indicator.application

 ... :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 ... 

使用bash history uparrow repeat命令编写下一个命令(删除| sort只留下qdbus --literal )并按下鼠标中键完成命令:

 qdbus --literal com.canonical.indicator.application 

三击最后一行

 / /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 

按重复历史向上箭头,空格键和鼠标中键组成:

 qdbus --literal com.canonical.indicator.application /com/canonical/indicator/application/service 

双击以在输出中选择所需的方法,然后按向上箭头,空格键和鼠标中键创建命令,然后按Enter键运行它。 (为了清楚起见,在此示例中添加了\ line continuation):

 qdbus --literal com.canonical.indicator.application \ /com/canonical/indicator/application/service \ com.canonical.indicator.application.service.GetApplications 

输出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"] } ] 

其他指标作为另一个com.canonical.indicator. ...引用com.canonical.indicator. ... com.canonical.indicator. ...接口(在开始时列出),但这可能是必须的,但子菜单指示器仍然无法识别:

 qdbus --literal com.canonical.AppMenu.Registrar \ /com/canonical/Unity/Panel/Service \ com.canonical.Unity.Panel.Service.Sync 

虽然有很多不好的东西(图标图像位可能),修剪和漂亮的输出是:

 [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]}] 

注意:终止号码600,550,500,450,300,250,200从右到左相关,将aps与其指示符图标相匹配。