編輯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 更好。

相關內容