编辑1

编辑1

我使用 Firefox 作为“独立”运行一些 Web 应用程序:我使用 Firefox 创建一个特定于该应用程序的新配置文件,设置首页,进行登录并根据特定需求自定义 UI。

然后,我可以通过执行以下操作快速启动该 Web 应用程序的实例:

firefox --no-remote -P My_app_profile the_app_url

为了使它更好,我创建了一个my_web_app.desktop文件并将其放置在 中~/.local/share/application,并将其设为收藏夹,这样我就可以从 gnome shell 侧栏快速运行它。

问题是,运行应用程序后,我看到火狐浏览器正在运行,而不是我的应用程序。例如,我为 Trello 创建了一个快捷方式,但启动它后,我看到了以下内容:

Firefox 突出显示,trello 未突出显示

现在,这是有道理的,因为这是firefox 正在运行,但我希望看到我的应用程序突出显示,并且可以自由使用 firefox 图标,就像没有其他实例正在运行一样。

我认为 gnome 可能会根据可执行文件名称突出显示图标,但到 firefox 的简单符号链接不会触发名称更改(即link /usr/bin/firefox /usr/bin/my_app_firefox仍然算作 firefox)。

您知道如何解决这个问题吗?我使用的是 gnome shell 3.18.2。

编辑1

以下是 trello.desktop 文件作为示例。我不是选项方面的专家,所以可能我犯了一些严重错误......但如果我这样做了,它看起来不会导致不良行为。

[Desktop Entry]
Version=1.0
Name=Trello (FF)
GenericName=Trello Dashboards
Comment=Trello in FireFox
Exec=firefox --no-remote -P App_Trello http://trello.com
Icon=trello
Terminal=false
Type=Application
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
StartupNotify=true
Categories=Network;WebBrowser;
Keywords=web;browser;internet;
X-Desktop-File-Install-Version=0.22

编辑2

所以,我想检查一下gnome-shell 源代码看看这是如何发生的。我发现在短跑每个条目都与某些相关联shell应用程序,显然我想确保我的应用程序的 ID 是唯一的。

使用观察镜(Alt+F2 lg),我可以看到我当前正在运行的应用程序被命名为“firefox.desktop”:

appSys = Shell.AppSystem.get_default()
ll = appSys.get_running()
ll[0].get_id() // firefox.desktop (0 is the ID of the firefox app in my case)

如果我启动 trello.desktop 应用程序,该get_running()方法会返回相同数量的条目,因此我的应用程序不会生成新条目,并且我关于拥有唯一 ID 的假设似乎得到了证实。

所以,我达到了GAppInfo 源代码检查 ID 是什么,它会将我发送回xdg菜单规格。而且,从那里,我设法寻找这:

要确定桌面文件的 ID,请使其完整路径相对于安装桌面文件的 $XDG_DATA_DIRS 组件,删除“applications/”前缀,并将“/”变为“-”。

我的 .desktop 文件位于$HOME/.local/share/applications,而不是我的.desktop 文件$XDG_DATA_DIRS

我将 trello.deskop 文件移动到该路径中的目录中并重新启动 shell,但应用程序仍然显示为firefox.desktop,因此显然 ID 仍然相同,事实上应用程序仍然与其他 Firefox 窗口分组。

有什么建议吗?

答案1

所以,显然我的第二次编辑不正确:GNOME Shell 确定应用程序分组的方式不是我描述的方式。

在 IRC gnome-shell 频道上询问后,用户 halfline 向我提供了将应用程序分组为 Dash 图标的策略:

窗口的 _GTK_APPLICATION_ID 属性与桌面文件 id 匹配或 WM_CLASS 与桌面文件 id 匹配或 _NET_WM_PID 与启动的桌面文件匹配或桌面文件中的 StartupWMClass 与窗口上的 WM_CLASS 匹配

他还建议可以更改 firefox WM_CLASS,他是对的,因为--classfirefox 有一个标志允许更改它。

这是一个例子:

$ firefox &
$ xprop WM_CLASS
WM_CLASS(STRING) = "Navigator", "Firefox"

使用那个标志我得到

$ firefox --class "Trello" &
$ xprop WM_CLASS
WM_CLASS(STRING) = "Navigator", "Trello"

它只需与桌面文件 ID 匹配即可。现在图标已正确分组。

另外,请注意,epiphany 支持创建桌面应用程序,使用默认浏览器正确处理链接,因此就我最初的目的而言,它甚至比 Firefox 更好。

相关内容