Gnome Shell 收藏夾:如何確定正在執行的軟體
我正在使用 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,但我希望看到我的應用程序突出顯示,並讓 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,他是對的,因為
--class
firefox有一個允許更改它的標誌。這是一個例子:
$ firefox & $ xprop WM_CLASS WM_CLASS(STRING) = "Navigator", "Firefox"
使用那個標誌我得到
$ firefox --class "Trello" & $ xprop WM_CLASS WM_CLASS(STRING) = "Navigator", "Trello"
它只需要匹配桌面文件 ID。現在圖示已正確分組。
另外,請注意,epiphany 支持創建桌面應用程序,使用預設瀏覽器正確處理連結,因此就我最初的目的而言,它甚至比 firefox 更好。