Gnome3

Gnome Shell 收藏夾:如何確定正在執行的軟體

  • October 6, 2016

我正在使用 firefox 將一些 web 應用程序作為“獨立”執行:我使用 firefox 創建一個新的配置文件,專門針對該應用程序,設置第一頁,進行登錄並根據具體需要自定義 UI。

然後,我可以通過執行以下操作快速啟動該 Web 應用程序的實例:

firefox --no-remote -P My_app_profile the_app_url

為了讓它變得更好,我創建了一個my_web_app.desktop文件並將其放入 中~/.local/share/application,並使其成為收藏夾,這樣我就可以從 gnome shell 側欄快速執行它。

問題是,執行應用程序後,我看到firefox正在執行,而不是我的應用程序。例如,我為 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 原始碼,看看這是怎麼發生的。我發現在Dash每個條目都與一些shell-app相關聯,顯然我想確保我的應用程序的 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$XDG_DATA_DIRS.

我將 trello.deskop 文件移動到該路徑中的目錄並重新啟動 shell,但應用程序仍然顯示為firefox.desktop,因此顯然 ID 仍然相同,實際上應用程序仍然與其他 firefox 視窗分組。

有什麼建議嗎?

所以,顯然我的第二次編輯是不正確的:它 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 更好。

引用自:https://unix.stackexchange.com/questions/313151