桌面条目

出自 ArchWiki
(重定向自 .desktop)

XDG 桌面条目规范定义了一个标准,用于应用程序集成到实现了 桌面环境的应用程序菜单中,这些桌面环境实现了 XDG 桌面菜单规范。

基础知识

每个桌面条目都必须有一个 Type 和一个 Name 键,并且可以选择性地定义其在应用程序菜单中的外观。

三种可用的类型是

应用程序
定义了如何启动应用程序以及它支持的 MIME 类型(由 XDG MIME 应用程序使用)。通过 XDG 自动启动,应用程序条目可以通过将它们放置在特定目录中来自动启动。应用程序条目使用 .desktop 文件扩展名。参见 #应用程序条目
链接
定义了到 URL 的快捷方式。链接条目使用 .desktop 文件扩展名。
目录
定义了应用程序菜单中子菜单的外观。目录条目使用 .directory 文件扩展名。

以下章节将大致解释这些是如何创建和验证的。

用法

使用桌面启动器,例如 dex

$ dex /usr/share/applications/firefox.desktop
桌面环境 启动器
(软件包)
自动启动 应用程序 链接
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
Xfce exo-open3
(exo)
环境无关 gtk-launch4
(gtk3)
部分支持
dex
(dex)
xdg-open
(xdg-utils)
有缺陷
  1. 类型为 Application.desktop 文件必须设置可执行位才能被 dde-open 启动
  2. 如果 KDE_SESSION_VERSION 未设置,则将使用来自 konquerorkfmclient。(KDE Plasma 应该在任何情况下都设置此变量。)
  3. gio(来自 glib2)也将被尝试
  4. 仅当应用程序位于 /usr/share/applications 中时

应用程序条目

应用程序的桌面条目,或 .desktop 文件,通常是元信息资源和应用程序快捷方式的组合。这些文件通常位于 /usr/share/applications//usr/local/share/applications/ 中,用于系统范围安装的应用程序,或 ~/.local/share/applications/ 中,用于用户特定的应用程序。用户条目优先于系统条目。

文件示例

以下是其结构的示例,带有附加注释。该示例仅旨在提供快速印象,并不展示如何利用所有可能的条目键。完整的键列表可以在 freedesktop 规范中找到。

[Desktop Entry]

# The type as listed above
Type=Application

# The version of the desktop entry specification to which this file complies
Version=1.0

# The name of the application
Name=jMemorize

# A comment which can/will be used as a tooltip
Comment=Flash card based learning tool

# The path to the folder in which the executable is run
Path=/opt/jmemorise

# The executable of the application, possibly with arguments.
Exec=jmemorize

# The name of the icon that will be used to display this entry
Icon=jmemorize

# Describes whether this application needs to be run in a terminal or not
Terminal=false

# Describes the categories in which this entry should be shown
Categories=Education;Languages;Java;
注意:TypeName 是必需的。

键定义

所有已识别的条目都可以在 freedesktop 站点上找到。例如,Type 键定义了三种类型的桌面条目:Application(类型 1)、Link(类型 2)和 Directory(类型 3)。

  • Version 键不代表应用程序的版本,而是代表此文件符合的桌面条目规范的版本。
  • NameGenericNameComment 通常包含冗余值,以组合形式出现,例如
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(verbose)参数以显示可能的桌面条目错误。

图标

另请参见 图标主题规范

常用图像格式

以下是常用图标图像格式的简要概述。

freedesktop.org 标准指定的图标图像格式支持。
扩展名 全名和/或描述 图形类型 容器格式 是否支持
.png 便携式网络图形 栅格
.svg(z) 可缩放矢量图形 矢量 是(可选)
.xpm X 像素图 栅格 是(已弃用)
.gif 图形交换格式 栅格
.ico MS Windows 图标格式 栅格
.icns Apple 图标图像 栅格

转换图标

此文章或章节候选与ImageMagick#用法合并。

注意: 属于那里。(在 Talk:Desktop entries 中讨论)

如果您偶然发现一个图标格式不受 freedesktop.org 标准支持(如 gifico),您可以使用 convert 工具(它是 imagemagick 软件包的一部分)将其转换为受支持/推荐的格式,例如

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

如果您从容器格式(如 ico)转换,您将获得 ico 文件中封装的所有图像,形式为 <icon name>-<number>.png。如果您想知道图像的大小,或者像 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 有一个 artwork/logo 页面,可以在其中找到额外的图标。如果一个项目是多平台的,则即使 linux/unix 软件包没有附带图标,Windows 软件包也可能提供一个。如果项目使用 版本控制系统(如 CVS/SVN/etc.),并且您对此有一些经验,您也可以考虑浏览它以查找图标。如果一切都失败了,该项目可能只是还没有图标/logo。

图标路径

freedesktop.org 标准 指定了程序应该按什么顺序和目录查找图标

  1. $HOME/.icons(为了向后兼容)
  2. $XDG_DATA_DIRS/icons
  3. /usr/share/pixmaps

工具

此文章或章节需要语言、wiki 语法或风格改进。参见 Help:Style 以供参考。

原因: 使用 Template:App 条目列表而不是简短的章节。(在 Talk:Desktop entries 中讨论)

Arronax

Arronax 是一个图形程序,用于创建和修改应用程序和位置的桌面条目。安装 arronaxAUR 软件包以使用它。

Alacarte

alacarte 是一个用于 GNOME 的图形菜单编辑器,使用 freedesktop.org 菜单规范。它还支持覆盖桌面条目。

jdDesktopEntryEdit

jddesktopentryeditAUR 是一个使用 Qt 编辑桌面条目的图形程序。

MenuLibre

menulibreAUR 是一个使用 GTK 的图形菜单编辑器,它在干净、易于使用的界面中提供了现代功能。

LibreMenuEditor

libre-menu-editorAUR 是一个用于编辑桌面条目的图形程序,旨在功能丰富且对初学者友好。

它使用带有 libadwaita 的 GTK,并遵循 GNOME 的界面指南,但旨在在任何符合 freedesktop.org 标准的桌面环境上工作。

gendesk

gendesk 最初是一个 Arch Linux 特定的工具,用于通过直接从 PKGBUILD 文件中获取所需信息来生成 .desktop 文件。现在它是一个通用工具,可以接受命令行参数。

如果可用,图标可以从 openiconlibrary 自动下载。(图标的来源是可配置的)。

如何使用

  • 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' 设置 exec 字段。

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 文件(例如从 /usr/share/applications/)复制到 $XDG_DATA_HOME/applications/(例如 ~/.local/share/applications/)。这可以防止在 系统升级期间更新软件包时,您的更改被覆盖。本地用户特定的 .desktop 文件应该自动优先于系统范围的文件。现在您可以根据需要修改本地用户特定的 .desktop 文件。

注意: 如果您已将此应用程序配置为自动启动,则可能已经在 $XDG_CONFIG_HOME/autostart 中存在系统桌面条目的副本,根据 XDG 自动启动。如果您只想在自动启动时修改行为,请继续编辑此文件。否则,如果您想在所有情况下都修改行为,则应
  • 将桌面文件从 $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 文件

  • 所有 桌面环境,选择以下一项(或两项)
    • 添加行 NoDisplay=true 用于您不希望在菜单中显示的应用程序。
    • 添加行 Hidden=true 用于您认为已删除且不希望在菜单中显示的应用程序。
  • 指定的 桌面环境,选择以下之一,其中 desktop_names 是以分号分隔的桌面环境列表(例如 GNOMEGNOME;Xfce;KDE;
    • 添加行 NotShowIn=desktop_names 以仅在指定的桌面环境中隐藏条目。
    • 添加行 OnlyShowIn=desktop_names 以仅在指定的桌面环境中显示条目。

参见