桌面项

来自 ArchWiki
(重定向自 Desktop entry

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

基础知识

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

三种可用的类型是

Application
定义如何启动应用程序以及它支持的 MIME 类型(由 XDG MIME Applications 使用)。使用 XDG Autostart,应用程序条目可以通过放置在特定目录中来自动启动。应用程序条目使用 .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 未设置,则将使用来自 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#Usage 合并的候选对象。

注意: 属于那里。(在 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/等,并且你有一些使用经验,你也可以考虑浏览它以查找图标。如果一切都失败了,该项目可能根本还没有图标/徽标。

图标路径

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='Program 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 Autostart$XDG_CONFIG_HOME/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 文件中

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

参见