快轉到主要內容

什麼是.desktop檔案?Linux桌面Desktop Entry用途解說

· 民國114年乙巳年
·
切換繁體/簡體
分類 Linux系統 Linux使用技巧
標籤 Freedesktop Specifications GNOME KDE Plasma
目錄

什麼是Desktop Entry呢?中文可以稱作「應用程式捷徑」,它是構成Linux桌面環境的基本元素之一,以.desktop作為附檔名結尾。

很多Windows用戶有這種經驗吧,程式安裝後會自動在桌面建立捷徑,點一下就能夠啟動程式。刪掉捷徑,卻不會刪掉程式本體。Linux也有類似的東西,那就是Desktop Entry。

基本上,只要你有使用Linux桌面,每天都會看到各式各樣的Desktop Entry圖示。

使用檔案管理器檢視Linux系統目錄的Desktop Entry

大部分的Linux桌面環境都遵守Freedesktop.org制定的Desktop Entry標準,使之能顯示在桌面上與使用者互動。

下文Ivon簡介Desktop Entry的用途,還有基本格式,搭配實例解說。

1. 為什麼需要Desktop Entry?
#

試想一下,你在桌面點一下啟動Firefox圖示,就會開啟Firefox瀏覽器。而實際上你是透過位於/usr/share/applications/firefox.desktop的檔案,間接啟動背後的二進位檔/usr/bin/firefox的。

為什麼我們不要直接執行程式的二進位檔就好了?通常Linux套件管理器安裝軟體的時候,會將二進位檔放到系統目錄,隨之安裝的還有Desktop Entry。接著桌面的應用程式列表/選單便會顯示該應用程式的圖示。

Desktop Entry並非應用程式本體,它比較像是一個啟動器,裡面定義了啟動應用程式的參數、桌面圖示、右鍵選單、多語言名稱的資訊。透過Desktop Entry,使用者能夠更直覺的啟動軟體,而不用頻繁使用指令。

如果把透過Desktop Entry啟動程式的過程繪製為圖片,那麼內容應該是長這樣的:

要是沒有Desktop Entry,使用者啟動程式可能就得這樣做:

我們不是原始人!

Desktop Entry的標準,也能改善桌面環境彼此之間的互通性,以下內容摘自Freedesktop.org官網:

KDE Plasma 和 GNOME 桌面環境都採用了類似的格式來處理「桌面項目」,即用於描述特定程式如何啟動、如何在選單中顯示等的配置文件。為了更廣泛的社群利益,各方應達成統一標準,這樣不僅可以簡化這兩個環境之間的互通性,還能讓任何實施該規範的額外環境更容易相容。

基本上GNOME和KDE Plasma都遵守Freedesktop.org提出的Deskop Entry標準,規定一個.desktop檔案裡面要有哪些項目。不過也有自家另外定義的標準,這端看應用程式開發者要不要支援了。

XFCE、Cinnamon、LXQT等其他桌面理應也遵守Desktop Entry標準。

2. Desktop Entry會用在什麼地方?
#

  1. 幾乎每個圖形化程式都會在套件安裝後自動建立Desktop Entry,讓使用者可以點選圖示啟動。

例如GNOME的應用程式列表,上面的圖示全都是Desktop Entry。

gnome.webp

還有KDE Plasma的應用程式列表,會依照Desktop Entry檔案定義的應用程式類別進行分類。

kde.webp

當然,使用者也可以自己新增Desktop Entry,啟動特定的二進位檔(binary)或者指令稿(script)。

  1. 允許使用者傳遞不同的參數,修改應用程式啟動後的行為。譬如,向Firefox傳遞-P "profile_name"參數,可以用不同的設定檔啟動Firefox。

  2. 將Desktop Entry放到桌面的話,即為新增桌面捷徑。雖然Desktop Entry有捷徑的功用,但它跟ln指令還是不一樣的東西。

  3. 修改開啟特定檔案格式的預設程式,參見XDG MIME Applications。不需要寫死應用程式的二進位檔路徑,而是透過xdg-open指令,執行Desktop Entry,用特定的應用程式開啟檔案。Desktop Entry也能夠定義該程式能用來開啟哪些格式的檔案。

  4. 讓程式開機自動啟動,參見XDG Autostart。Desktop Entry比較適合用來啟動圖形化程式,純文字執行的建議用Systemd。

3. Desktop Entry有效路徑
#

雖然Desktop Entry可以單獨存在,想放在哪個路徑都可以,但是若要顯示在桌面環境,就必須放到指定位置。

認識「有效路徑」的概念,放到這裡的Desktop Entry,才會被桌面環境讀取到,並顯示在應用程式列表。

就以Ubuntu系統來說,Desktop Entry可能的目錄有以下幾個,才能夠顯示在桌面的應用程式列表:

  • /usr/share/applications → 系統套件管理員安裝的程式
  • /usr/local/share/applications → 使用者自行安裝到系統目錄的程式
  • ~/.local/share/applications → 使用者安裝到自身家目錄的程式
  • /var/lib/flatpak/exports/share/applications → Flatpak套件
  • ~/.local/share/flatpak/exports/share/applications → Flatpak套件
  • /var/lib/snapd/desktop/applications → Snap套件

常用的是前三個。

4. Desktop Entry寫法,以自訂Firefox為例
#

Deskop Entry規定了應用程式的啟動方式。通常套件管理器安裝軟體的時候會一併建立Desktop Entry。例如執行apt install firefox,從.deb檔解出二進位檔放到/usr/bin/firefox,並將Desktop Entry放到/usr/share/applications/firefox.desktop。然後桌面的應用程式列表就會顯示Firefox。

正如我上面說的,使用者可以編輯現有的Desktop Entry,或者新創一個。老實說,編輯現有的Desktop Entry不是很建議的作法,因為很容易跟著系統更新而被套件管理器覆蓋掉。比較好的方法是複製一份,或者從頭寫一個Desktop Entry。

比如,我想要建立一個啟動Fifrefox後以personal設定檔啟動的Desktop Entry,那麼我就得先複製一個Desktop Entry,接著修改內容。

  1. 執行firefox -P指令,新增一個叫做personal的Firefox設定檔。

  2. 將Firefox的Desktop Entry複製到使用者目錄,建立一個firefox-custom.desktop檔案。我這裡複製到~/.local/share/applications/是要讓它能夠顯示在桌面的應用程式列表。你也可以把它複製到~/Desktop,只顯示在桌面。

cp /usr/share/applications/firefox.desktop \
~/.local/share/applications/firefox-custom.desktop
  1. 編輯firefox-custom.desktop裡面的內容。
vim ~/.local/share/applications/firefox-custom.desktop
  1. 如何修改Desktop Entry呢?實際上Freedesktop.org定義的可以用的選項很多,講幾個比較重要的。下表標示「必要」的項目表示Deskop Entry必須含有該鍵值。
用途必要
VersionDeskp Entry標準的版本,不是應用程式版本。雖然不是必要項目,但還是建議註明
Type決定這個是應用程式(Application)、網頁連結(Link)還是目錄(Directory)。本文只討論Application的用法
Name顯示的應用程式名稱。後面加上[語言代碼]用於支援多語言顯示,沒有的話就是顯示預設語言的名稱
GenericName通用應用程式名稱,GNOME不會顯示此資訊,但KDE Plasma會在應用程式名稱下方顯示。後面加上[語言代碼]用於支援多語言顯示,沒有的話就是顯示預設語言的名稱。
Keywords關鍵字,便於使用者搜尋。後面加上[語言代碼]用於支援多語言顯示
Exec要執行的程式指令,通常是寫出二進位檔或者指令稿的絕對路徑,因為你沒辦法保證每個發行版的$PATH都一樣
Path程式工作目錄
Terminal是否在終端機裡面執行程式
NoDisplay是否要從應用程式列表隱藏。
Comment註解。即滑鼠移到應用程式圖示上會短暫顯示的工具提示框。
Icon圖示路徑,遵守Icon Theme標準,預設應該是位於/usr/share/icons/,也可以直接寫路徑。
Actions可執行的操作,也就是使用者在桌面對應用程式圖示按右鍵會顯示的選單。先用Actions=宣告有哪些操作,再透過[Desktop Action 動作名稱]區塊的方式來定義操作背後執行的指令。
MimeType表示應用程式能開啟哪些檔案格式
Categories應用程式分類,GNOME不會顯示,KDE Plasma會自動分類到不同選單下面。
StartupWMClass啟動的視窗類別
StartupNotify啟動時是否顯示通知

#開頭的行數是註解。

[ ]包起來的是一個區塊。

所有的鍵值用Key=Value的方式表示。

如果要設定環境變數,使用env,譬如Exec=env MOZ_ENABLE_WAYLAND=1 firefox %u

  1. 檢視/usr/share/applications/firefox.desktop,Firefox的Desktop Entry就符合了上面所說的內容。
[Desktop Entry] # 這一個區塊是Desktop Entry的基本資訊
Version=1.0
Type=Application # 應用程式
Exec=firefox %u # 點選後會執行的指令
Terminal=false # 不要開啟終端機
Icon=firefox # 圖示
StartupWMClass=firefox # 啟動的視窗類別
Categories=GNOME;GTK;Network;WebBrowser; # 應用程式分類
MimeType=application/json;application/pdf;application/rdf+xml;application/rss+xml;application/x-xpinstall;application/xhtml+xml;application/xml;audio/flac;audio/ogg;audio/webm;image/avif;image/gif;image/jpeg;image/png;image/svg+xml;image/webp;text/html;text/xml;video/ogg;video/webm;x-scheme-handler/chrome;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/mailto; # Firefox可以用來開啟的檔案格式
StartupNotify=true # 啟動時顯示通知
Actions=new-window;new-private-window;open-profile-manager; # 右鍵操作,下面才寫出具體執行指令
Name=Firefox # 多語言應用程式名稱
Name[zh_CN]=Firefox
Name[zh_TW]=Firefox
Comment=Browse the World Wide Web # 滑鼠移到圖示上短暫顯示的工具提示框
Comment[zh_CN]=浏览万维网
Comment[zh_TW]=瀏覽全球資訊網
GenericName=Web Browser
GenericName[zh_CN]=Web 浏览器
GenericName[zh_TW]=網頁瀏覽器
Keywords=Internet;WWW;Browser;Web;Explorer; # 搜尋關鍵字
Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer;
Keywords[zh_TW]=網際網路;網路;瀏覽器;網頁;上網;Internet;WWW;Browser;Web;Explorer;

[Desktop Action new-window] # 按右鍵會顯示的操作
Exec=firefox --new-window %u
Name=New Window
Name[zh_CN]=新建窗口
Name[zh_TW]=開新視窗

[Desktop Action new-private-window] # 按右鍵會顯示的操作
Exec=firefox --private-window %u
Name=New Private Window
Name[zh_CN]=新建隐私窗口
Name[zh_TW]=開新隱私視窗

[Desktop Action open-profile-manager] # 按右鍵會顯示的操作
Exec=firefox --ProfileManager
Name=Open Profile Manager
Name[zh_CN]=打开配置文件管理器
Name[zh_TW]=開啟設定檔管理員
  1. 那要從何改起呢?觀察一下得知,只要修改Name=Exec=的內容,就夠做出一個自訂啟動器了。考慮到這只是一個簡單的捷徑,所以我將fireofx-custom.desktop其他的鍵值全部省略,精簡成如下內容。
[Desktop Entry]
Version=1.0
Type=Application
Name=Firefox 以Personal設定檔啟動
Categories=GNOME;GTK;Network;WebBrowser;
Exec=firefox -P "personal"
Icon=firefox
  1. 嘗試重新登入桌面,便會在應用程式列表看到兩個Firefox了。
    Screenshot_20250323_183301.webp

參考資料
#

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。