桌面项 - 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
- 配置文件
- 包开发
- 使用“模板:风格”标记的页面或章节

隐藏分类：​

- 使用“模板:合并”标记的页面或章节

桌面项
添加话题