桌面項 - Arch Linux 中文维基

跳至內容

# 桌面項

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Desktop entries，最近一次同步於 2025-7-26，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

XDG 桌面配置項規範定義了一個標準，用於在實現了XDG 桌面菜單規範的桌面環境裡將應用程式集成到應用程式菜單中。（譯註：下文中「XDG 桌面配置項」簡稱為「桌面項」）

## 基礎

每個桌面項必須具有一個 `Type` 關鍵字和一個 `Name` 關鍵字。可以定義桌面項在應用程式菜單中的外觀（非必須）。

桌面項可用的有效類型有三種：

Application
  定義如何啟動應用程式以及它支持的 MIME 類型（由 XDG MIME Applications 使用）。 使用 XDG Autostart 應用程式項可以通過將它們放在特定目錄中以實現自動啟動。應用程式項使用 .desktop 擴展名。 請參閱 #應用程式項。

Link
  定義 `URL` 的快捷方式。連結項使用`.desktop` 擴展名。

Directory
  定義應用程式菜單中子菜單的外觀。目錄項使用 .directory 擴展名。

以下部分將大致解釋這些是如何創建和驗證的。

## 用法

使用像 dex包 這樣的桌面啟動器。

    $ dex /usr/share/applications/firefox.desktop

桌面環境 | 啟動器 （軟體包） | Autostart | Application | Link
--- | --- | --- | --- | ---
Cinnamon | gio (glib2包) | 否 | 是 | 否
GNOME
GNOME Flashback
MATE
Deepin | dde-open1 (deepin-api包) | 是 | 部分 |
Enlightenment | enlightenment_open (enlightenment包) |  |  |
KDE Plasma | kde-open2 (kde-cli-tools包) | 是 | 是 | 是
LXDE | pcmanfm (pcmanfm包) |  |  |
LXQt | pcmanfm-qt (pcmanfm-qt包) |  |  |
Xfce | exo-open3 (exo包) |  |  |
環境無關 | gtk-launch4 (gtk3包) | 否 | 部分 | 否
dex (dex包) | 是 | 是 | 否
xdg-open (xdg-utils包) | 否 | 存在 bug | 否

1. dde-open 用於啟動 Application 類型的桌面項時要求具有可執行權限（`chmod +x`）。
2. KDE Plasma 桌面通常設置 `KDE_SESSION_VERSION` 環境變量用於識別會話環境。如果未設置，系統會回退使用 konqueror包 套件中的 kfmclient 。
3. gio(源於 glib2包) 是 GNOME 相關的通用 I/O 工具，可以用來打開文件或應用。它會被用作另一個備用方法。
4. 前提是應用程式的 .desktop 文件位於 `/usr/share/applications` 目錄中

## 應用程式項

應用程式的桌面項或 desktop 文件通常是元信息資源和應用程式快捷方式的組合。對於系統範圍內安裝的應用程式，這些文件通常位於 `/usr/share/applications/` 或 `/usr/local/share/applications/` 。而 `~/.local/share/applications/` 用於用戶特定的應用程式。後者（用戶條目）優先於前者（系統條目）。

### 文件示例

下面是一個帶有附加注釋的結構示例。 這個例子只是為了給人一個快速的印象，並沒有展示如何使用所有可能的關鍵字。完整的關鍵字清單可在 freedesktop 規範中找到。

    [Desktop Entry]

    # type关键字如上所述
    Type=Application

    # 本文件所遵循的桌面项规范版本
    Version=1.0

    # 应用程序的名称
    Name=jMemorize

    # 显示为工具提示的注释
    Comment=Flash card based learning tool

    # 可执行文件所在的目录
    Path=/opt/jmemorise

    # 可执行文件，可以带参
    Exec=jmemorize

    # 图标名称
    Icon=jmemorize

    # 应用程序是否需要运行在终端中
    Terminal=false

    # 本桌面项将显示在哪些分类中
    Categories=Education;Languages;Java;

注意：只有`Type`和`Name`是必須的。

### 關鍵字賦值

所有可用的關鍵字都可以在 freedesktop 網站上找到。

例如， `Type` 關鍵字定義了三種類型的桌面項：應用程式（type 1）、連結（type 2）和目錄（type 3）。

- `Version` 關鍵字不代表應用程式的版本，而是代表該文件符合的桌面項規範的版本。

- `Name`、`GenericName` 和 `Comment` 通常包含它們組合形式的冗餘值，例如：

    Name=Pidgin Internet Messenger
    GenericName=Internet Messenger

或者

    Name=NoteCase notes manager
    Comment=Notes Manager

應該避免這種情況，因為它只會讓用戶感到困惑。`Name`關鍵字應僅包含名稱，或者可能是縮寫/首字母縮略詞（如果可用）。

- `GenericName` 應該說明您通常如何描述該應用程式提供的功能（即 Firefox 是「Web 瀏覽器」）。
- `Comment` 旨在包含任何有用的附加信息。

### 驗證

隨著時間的推移，某些關鍵字已被棄用，您可能需要使用 desktop-file-validate(1) 來驗證您的桌面項，它是 desktop-file-utils包 軟體包的一部分。要驗證，請運行：

    $ desktop-file-validate <your desktop file>

這將為您提供非常詳細且有用的警告和錯誤消息。

### 安裝

使用 desktop-file-install(1) 將桌面文件安裝到目標目錄。例如：

    $ desktop-file-install --dir=$HOME/.local/share/applications ~/app.desktop

這對於通過編輯選項自定義已有的桌面項（例如來自 `/usr/share/applications` 的文件）也很有用。

### 刷新桌面項資料庫

通常，桌面環境會自動識別對桌面啟動項的更改。 如果沒有自動生效，而你希望強制更新定義在 `~/.local/share/applications` 中的桌面啟動項，請運行以下命令：

    $ update-desktop-database ~/.local/share/applications

提示：添加 `-v`（詳細）參數以顯示可能的桌面輸入錯誤。

## 圖標

參閱圖標主題規範。

### 通用圖標格式

以下是圖標常用圖像格式的概述。

支持 freedesktop.org 標準指定的圖標圖像格式
擴展名 | 全稱和/或說明 | 圖像類型 | 是否容器型 | 是否支持
--- | --- | --- | --- | ---
.png | 可攜式網絡圖形 | 位圖 | 否 | 是
.svg(z) | 可縮放矢量圖形 | 矢量圖 | 否 | 是（可選）
.xpm | X PixMap | 位圖 | 否 | 是（不推薦）
.gif | 圖像互換格式 | 位圖 | 否 | 否
.ico | Windows圖標格式 | 位圖 | 是 | 否
.icns | Apple圖標格式 | 位圖 | 是 | 否

### 圖標格式轉換

本文或本章節可能需要合併到ImageMagick#Usage。

附註： 應歸屬該文。（在 Talk:桌面項 中討論）

如果您偶然發現 freedesktop.org 標準不支持的圖標格式（例如 `gif` 或 `ico`），您可以使用「magick」工具 （這是 imagemagick包 包的一部分）將其轉換為支持/推薦的格式，例如：

    $ magick <icon name>.gif <icon name>.png

如果您從 `ico` 之類的容器格式轉換，您將獲得以 `<icon name>-<number>` 形式封裝在 `ico` 文件中的所有圖像。如果你想知道圖像的大小，或者像 `ico` 這樣的容器文件中的圖像數量，你可以使用 identify 工具（它也是 imagemagick包 的一部分）：

    $ identify /usr/share/vlc/vlc48x48.ico

    /usr/share/vlc/vlc48x48.ico[0] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb
    /usr/share/vlc/vlc48x48.ico[1] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb
    /usr/share/vlc/vlc48x48.ico[2] ICO 128x128 128x128+0+0 8-bit DirectClass 84.3kb
    /usr/share/vlc/vlc48x48.ico[3] ICO 48x48 48x48+0+0 8-bit DirectClass 84.3kb
    /usr/share/vlc/vlc48x48.ico[4] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb
    /usr/share/vlc/vlc48x48.ico[5] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb

如您所見，示例 ico 文件，雖然它的名稱可能暗示一個大小為 48x48 的圖像，但包含不少於 6 個不同的大小，其中一個甚至大於 48x48，即 128x128。

或者，您可以使用 icotool（來自 icoutils包）從 ico 容器中提取 png 圖像：

    $ icotool -x <icon name>.ico

要從 .icns 容器中提取圖像，可以使用 icns2png（由 libicns包 提供）：

    $ icns2png -x <icon name>.icns

### 獲取圖標

附帶「.desktop」文件的軟體包肯定包含一個或一組圖標。有時開發人員雖然沒有創建「.desktop」文件，但可能會附帶圖標。所以一個好的開始是在源包中尋找圖標。

您可以首先使用 find 過濾擴展名，然後使用 grep 進一步過濾某些常用關聯詞，如包名、「icon」、「logo」等，源碼包中可能有很多圖片。

    $ find /path/to/source/package -regex ".*\.\(svg\|png\|xpm\|gif\|ico\)$"

如果應用程式的開發人員沒有在他們的源包中包含圖標，那麼下一步就是在他們的網站上進行搜索。

一些項目，例如 tvbrowserAUR 有一個藝術品/徽標頁面，可以在其中找到其他圖標。如果一個項目是多平台的，可能會出現這樣的情況，即使 linux/unix 包沒有附帶圖標，Windows 包也可能提供圖標。如果項目使用版本控制系統，如 CVS/SVN/等。並且您對它有一些經驗，您也可以考慮瀏覽它以獲取圖標。

如果一切都失敗了，該項目可能還沒有圖標/徽標。

### 圖標文件路徑

freedesktop.org 標準規定了程序應以何種順序和目錄查找圖標：

1. `$HOME/.icons`（為了向後兼容）
2. `$XDG_DATA_DIRS/icons`
3. `/usr/share/pixmaps`

## 工具

本文或本章節的語言、語法或風格需要改進。參考：幫助:風格

原因：Use a list of Template:App entries instead of short sections.（在Talk:桌面項討論）

### Arronax

Arronax 是一個圖形化程序，用於創建和修改應用程式或位置的桌面啟動項。要使用它，請安裝 arronaxAUR 軟體包。

### Alacarte

alacarte包 是一個用於 GNOME 的圖形化菜單編輯器，遵循 freedesktop.org 的菜單規範。它也支持重寫（覆蓋）桌面啟動項。

### jdDesktopEntryEdit

jddesktopentryeditAUR 是一個用於編輯 Qt 桌面啟動項的圖形化程序。

### MenuLibre

menulibreAUR 是一個使用 GTK 的圖形化菜單編輯器，提供現代化功能，並具有簡潔易用的界面。

### LibreMenuEditor

libre-menu-editorAUR 是一個用於編輯桌面啟動項的圖形程序，旨在功能豐富的同時也易於上手。

它基於 GTK 和 libadwaita 開發，遵循 GNOME 的界面設計規範，但設計上可在任何符合 freedesktop.org 標準的桌面環境中使用。

### gendesk

gendesk包 最初是一個 Arch Linux 特定的工具，用於通過直接從 PKGBUILD 文件中獲取所需信息來生成 .desktop 文件。 現在它是一個接受命令行參數的通用工具。

可以從這個網站自動下載圖標（如果網站可用的話）。（圖標的來源是可配置的）。

#### 用法

- 把 `gendesk` 添加到 makedepends

- 啟動 `prepare()` 功能：

    gendesk --pkgname "$pkgname" --pkgdesc "$pkgdesc"

- 或者，如果已經提供了一個圖標（例如，$pkgname.png），可以指定 `-n` 參數限定不下載圖標或使用默認圖標。例如：

    gendesk -n --pkgname "$pkgname" --pkgdesc "$pkgdesc"

- `$srcdir/$pkgname.desktop` 將被創建並安裝在 `package()` 函數中：

    install -Dm644 "$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop"

- 圖標可以這樣安裝：

    install -Dm644 "$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png"

- 用 `--name='程序名稱'` 這個參數指定程序在菜單中的名稱。

- 用 `--exec='/opt/some_app/elf --some-arg --other-arg'` 這種形式設置可執行文件欄位。

- 更多信息請參閱 gendesk 項目。

### lsdesktopf

lsdesktopfAUR可列出可用的「.desktop」文件或搜索它們的內容。

    $ lsdesktopf
    $ lsdesktopf --list
    $ lsdesktopf --list gtk zh_TW,zh_CN,en_GB

它還可以執行 MIME 類型相關的搜索。參閱XDG MIME Applications#lsdesktopf。

### fbrokendesktop

fbrokendesktopAUR Bash 腳本用於檢測指向不存在路徑的無效`Exec`值。沒有任何參數，它使用 `DskPath` 數組中的預設目錄。它僅顯示完整路徑和文件名丟失的無效「.desktop」。

例如：

    $ fbrokendesktop
    $ fbrokendesktop /usr
    $ fbrokendesktop /usr/share/xsessions/icewm.desktop

## 提示與技巧

### 編輯 .desktop 文件

對於系統範圍的 .desktop 文件（例如，從軟體包安裝的文件），首先將相關的 .desktop 文件從 `/usr/share/applications/` 複製到`$XDG_DATA_HOME/applications/`（例如 `~/.local/share/applications/`）。 這可以防止在系統升級期間更新軟體包時覆蓋您的更改。 本地用戶特定的「.desktop」文件應自動優先於系統範圍的文件。 現在您可以根據需要修改本地用戶特定的「.desktop」文件。

注意：如果您已將此應用程式配置為自動啟動，則 `$XDG_CONFIG_HOME/autostart` 中可能已經存在系統桌面條目的副本，如 XDG Autostart。 如果您只想在自動啟動時修改行為，請繼續編輯此文件。 否則，如果您想在所有情況下修改行為，您應該：

- 將桌面文件從 `$XDG_CONFIG_HOME/autostart/` 移動到 `$XDG_DATA_HOME/applications`。

- 使用 `ls -l`，確保此桌面條目是您可以編輯的常規文件，而不是指向系統位置的連結。如果是連結，請按照上述說明將其替換為原件的副本。

- 建立一個指向用戶應用程式目錄的符號連結（為方便起見，默認 XDG 目錄被替換）：

​​​

     ln -s ~/.local/share/applications/desktop_entry ~/.config/autostart/

​​​

現在，您的應用程式啟動器中的文件將與自動啟動的文件保持一致。

#### 編輯環境變量

要設置環境變量，在 .desktop 文件中，編輯 `Exec=` 行以首先使用 env(1) 命令設置變量。例如，將原始行注釋掉：

    ~/.local/share/applications/abiword.desktop

    ...
    # Exec=abiword %U
    Exec=env LANG=he_IL.UTF-8 abiword %U
    ...

如果存在 `DBusActivatable=true` ，也應將其刪除（或設置為 `false` ），否則會導致 `Exec` 行被忽略。[1]

#### 編輯命令行參數

要更改或添加命令行參數，請編輯 `Exec=` 行以附加所需的選項。 例如，將原始行注釋掉：

    ~/.local/share/applications/steam.desktop

    ...
    # Exec=/usr/bin/steam-runtime %U
    Exec=/usr/bin/steam-runtime -no-browser %U
    ...

如果存在 DBusActivatable=true ，也應將其刪除（或設置為 false ），否則會導致 Exec 行被忽略。[2]

#### 隱藏桌面項

可以通過多種方式控制桌面條目的可見性。有關詳細信息，請參閱桌面條目規範。 將以下行之一添加到您的 .desktop 文件中：

- All 桌面環境，選擇以下一項（或兩項）：

- - 為您不希望在菜單中顯示的應用程式添加行 `NoDisplay=true`。

- - 為您認為已刪除且不希望在菜單中顯示的應用程式添加行 `Hidden=true`。

- Specified 桌面環境，選擇以下之一，其中 `desktop_names` 是以分號分隔的桌面環境列表（例如 `GNOME`、`GNOME ;Xfce;KDE;`）：

- - 添加行 `NotShowIn=desktop_names` 以「隱藏」僅在指定桌面環境中的條目。

- - 將行 `OnlyShowIn=desktop_names` 添加到僅在指定桌面環境中的「顯示」條目中。

## 參閱

- Wikipedia:.desktop
- Information for developers

分類：​

- Freedesktop.org
- 配置文件
- 包開發
- 使用「模板:風格」標記的頁面或章節

隱藏分類：​

- 使用「模板:合併」標記的頁面或章節

桌面項
新增話題