桌面条目

出自 ArchWiki
(重定向自 Desktop launcher)

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

基础知识

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

三种可用类型是

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

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

用法

使用桌面启动器,例如 dex

$ dex /usr/share/applications/firefox.desktop
桌面环境 启动器
(软件包)
自动启动 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
Xfce exo-open3
(exo)
环境无关 gtk-launch4
(gtk3)
部分支持
dex
(dex)
xdg-open
(xdg-utils)
有缺陷
  1. 类型为 Application.desktop 文件必须设置可执行位才能由 dde-open 启动
  2. 如果未设置 KDE_SESSION_VERSION,则将使用 konqueror 中的 kfmclient。(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 文件中封装的所有图像,格式为 <图标名称>-<编号>.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/等),并且您有一些使用经验,您也可以考虑浏览它以查找图标。如果一切都失败了,则该项目可能根本还没有图标/徽标。

图标路径

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 是一个用于编辑桌面条目的图形程序,旨在功能丰富且对初学者友好。

它使用 GTK 与 libadwaita,并遵循 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 应用程序#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 是以分号分隔的桌面环境列表(例如 GNOME, GNOME;Xfce;KDE;
    • 添加行 NotShowIn=desktop_names 以仅在指定的桌面环境中隐藏条目。
    • 添加行 OnlyShowIn=desktop_names 以仅在指定的桌面环境中显示条目。

参见