问题描述
我遇到了几个程序的问题,这些程序具有统一的启动器,但在启动后创建了一个单独的图标。启动器是否可以跟踪它生成的窗口以更好地组织?或者这是 Unity 本身的错误?
这可能无关紧要,但此特定程序是单声道程序,生成的图标被列为面板。
最佳答案
发生了什么
像这样的问题与 Unity 的应用程序匹配框架有关。为了简化技术细节,程序窗口和应用程序对 Ubuntu 来说是两个独立的东西。 Ubuntu 需要 ‘guess’ 哪个应用程序拥有特定窗口。有时这种猜测会失败,并且启动器中会出现一个问号。
失败可能是由于:
-
BAMF(上面提到的应用程序匹配框架)中的一个错误。
-
有问题的 application description(又名 ‘.desktop’ 文件)。
-
根本没有任何应用程序说明。启动窗口的可执行文件本身不具有此元数据。
问题 (KeePass2) 中显示的应用程序存在第 1 类问题 has been reported to the appropriate bug tracker 。
问题示例
以下示例是技术性的,面向希望自己的应用程序在 Ubuntu 启动器中正确显示的程序员。
问题 3 – 没有应用程序描述
为了使应用程序与 Unity 集成——也就是说,可以在 Dash 中搜索并放置在启动器中——它需要有一个桌面条目。此类条目放置在 /usr/share/applications/
、 /usr/local/share/applications/
和 $HOME/.local/share/applications/
中(后两个用于第三方软件,分别为 system-wide 和 user-only)。它们以 .desktop
扩展名结尾,并遵循以下基本格式:
[Desktop Entry]
Type=Application
Name=My Application's Name
Icon=/file/path/of/my/icon
Exec=/file/path/of/my/executable
此项通过调用 Exec
可执行文件来启动程序。每当该程序显示一个窗口或对话框时,Unity 都会注意到它的可执行文件 “belongs” 此应用程序描述,并在启动器中使用给定的 Name
和 Icon
。
这是一个准系统示例。 formal specification 涵盖了许多高级功能。
问题 2 – 错误的应用程序描述
让我们假设 my_app.desktop
存在于有效的应用程序目录中,但是:
-
/file/path/of/my/icon
在文件系统中不存在。 -
/file/path/of/my/icon
不是图像。 -
该条目使用了一些不正确的语法或无效的标签。
在上述任何一种情况下,Ubuntu 将无法在启动器中正确列出应用程序窗口。
问题 1 – BAMF 中的错误
从 Ubuntu 11.10 开始,BAMF 有许多错误会阻止正确的应用程序匹配。常见(临时)陷阱包括:
-
Exec
路径是 symbolic link 而不是常规文件 -
可执行文件是启动主可执行文件的脚本。
在这些情况下,程序员别无选择,只能使用一种解决方法,例如删除符号链接抽象,或直接链接到可执行文件。桌面条目规范本身不需要这些。