快轉到主要內容

什麼是.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標準,也可以直接寫路徑。
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

參考資料
#

相關文章

如何修改Linux開啟檔案的預設程式 (XDG MIME Applications)
分類   Linux系統 Linux使用技巧
標籤   Freedesktop Specifications GNOME KDE Plasma
Linux如何設定開機自動執行應用程式,XDG Autostart與Systemd Service用法
分類   Linux系統 Linux使用技巧
標籤   Freedesktop Specifications GNOME KDE Plasma Systemd
Ubuntu如何連接Apple AirPods Pro藍牙耳機並查看電量
分類   Linux系統 Linux使用技巧
標籤   AirPods GNOME Ubuntu KDE Plasma PipeWire

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

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