Contents

Linux中的桌面入口文件指南

1. 概述

桌面条目文件是创建和排序图形用户界面 (GUI) 快捷方式的标准方式。大多数主要的 Linux 桌面环境都支持它们。此外,GNOMEKDEXfce 都遵循事实上的标准XDG 桌面入口规范。

在本指南中,我们将讨论什么是桌面条目文件、它们为何有用以及它们的工作原理。我们将交替使用表达式 desktop entry 文件、.desktop 文件 和 entry 文件。

指南中的代码已经在 Debian 10.10 (Buster) 上使用 GNU Bash 5.0.3 和 Xfce 4.16 进行了测试。它是 POSIX 兼容的,应该可以在任何这样的环境中工作。

2. 说明

桌面条目文件仅包含文本。尽管通常称为*.desktop文件,但它们不需要扩展名。但是,为了便于分类,它们还可以具有.desktop.directory扩展名。条目文件的标准命名约定是反向 DNS。例如,可接受的名称可以是org.example.AppName.desktop*。

要正常运行,桌面入口文件必须是可执行的 。用户可以在 Linux 环境中通过*chmod *设置此权限。

条目文件可以描述三种元素类型

  • 应用程序快捷方式(.desktop扩展名)
  • 资源链接(.desktop扩展名)
  • 子菜单(.directory扩展名)

这些元素用作快速视觉访问点。每一个通常都表现为桌面或系统菜单上的一个 GUI 条目。条目所在的位置取决于桌面条目文件的位置。

3. 位置

与普通文件一样,用户可以在创建文件的位置执行*.desktop*文件。然而,它们的力量之一在于它们与 GUI 的联系。

目录条目文件最好放在桌面上或$XDG_DATA_DIRS/applications*中*。如果未设置XDG_DATA_DIRS 环境变量 ,则默认值为:

  • /usr/共享(全局)
  • ~/.local/share(用户特定)

如果我们在桌面上放置一个.desktop*文件*,我们就是在创建一个快捷方式图标。同样,在*$XDG_DATA_DIRS/applications中放置一个.desktop文件会为该快捷方式添加一个 GUI 菜单图标。此外,我们使用.directory*文件来创建系统 GUI 子菜单。

这些元素中的每一个都可以通过属性(例如名称和图标)进行自定义。属性值以特定格式存在于文件本身中。

4. 格式

桌面条目文件由区分大小写的UTF-8 编码行组成,分为三类:

  • 评论
  • 组标题
  • 键值对

注释是空行或以*#*字符开头的行:

# This is a comment

组标题行表示组的开始,格式如下:

[Group Name]

我们将组名称括在方括号中。它不能包含控制字符或其他方括号。*唯一需要的组标题是[Desktop Entry]*。**这应该是桌面条目文件中的第一个非注释行。组名称在桌面条目文件中必须是唯一的。

我们将键值对行格式化为

Key=Value

每个组的密钥名称是唯一的,可以由字母数字字符和破折号组成。键定义桌面条目文件或其关联的 GUI 元素的属性。

标准支持键的完整列表在规范中。例如,这里有一些常用的:

  • Version——使用的桌面输入规范的版本
  • Comment——用作 GUI 条目或图标的工具提示
  • TryExec – 确认Exec中的程序存在的可执行文件的路径
  • Path——当前工作目录
  • Actions——应用程序动作,不同于默认的,用特殊的组头定义

桌面条目文件的复杂性可能会有所不同。正因为如此,存在诸如*desktop-file-utils 之类的标准化工具。他们可以根据规范方便地验证和安装.desktop*文件。

为了说明该机制,我们将通过一个简单的示例。

5. 用法

假设我们想要 GNOME 的*gedit 应用程序的桌面快捷方式。具体来说,我们希望gedit*从一个已经打开的给定文件 ( /home/user/file )开始。

5.1. 文件创建

为此,让我们创建一个简单的文本文件:

[Desktop Entry]
Type=Application
Name=Personal File
Exec=gedit /home/user/file
Icon=gedit

我们将此文件命名为com.blogdemo.starter.GeditPersonal.desktop并将其放在桌面上。**结果,出现了一个名为“个人文件”的新桌面图标和gedit图标。**最后,我们使com.blogdemo.starter.GeditPersonal.desktop可执行:

$ chmod +x /home/user/Desktop/com.blogdemo.starter.GeditPersonal.desktop

现在用户可以点击桌面图标使用gedit打开*/home/user/file*。让我们探讨一下我们是如何实现这一目标的。

5.2. 解释

最初,我们从组标题Desktop Entry开始。即使没有扩展名,它也允许桌面条目文件 ( magic ) 检测。此外,*[Desktop Entry]*通常包含桌面条目文件的主要部分。在组标题下,我们列出了我们的键值对。

首先,我们通过所需的Type key来定义桌面入口文件的类别。它可以具有值 ( 1 )Application、( 2 )Link或 ( 3 )Directory。例如,我们通过Link类型定义 URL 的快捷方式。另一方面,Directory类型定义了系统 GUI 子菜单。

此外,像我们这样的应用程序桌面入口文件通常有一个Exec键。Exec值包含通过快捷方式执行的命令行

由于应用程序可以接受参数,因此桌面条目也应该有一种机制来这样做。简而言之,这是通过Exec值中的说明符完成的,例如:

  • %f单个文件名
  • %u个单一网址
  • %k桌面文件位置的 URI 或本地文件名

例如,下面的格式允许我们将一个文件直接传递给桌面入口文件:

Exec=cat %f

我们通过拖放或命令行来完成此操作。我们提供的参数将遵循cat (连接)命令。我们可以类似地使用*%F*、%u和 %U说明符。

相比之下,%k说明符为我们提供了一种在Exec命令行中使用桌面文件本身位置的方法。

最后,一个可选的Icon键定义了图标。Icon值可以是几种支持的图像格式之一或可执行文件的路径。图标主题规范 标准中讨论了更复杂的情况。

我们通过所需的 Name 键提供一个描述性名称。此名称直观地替换了桌面条目文件的默认文件名。

此外,Name值的一个重要特征是本地化。

6. 本地化

我们可以本地化桌面条目文件中的一些值。这使我们能够在某些语言环境中显示某些翻译。

本地化格式遵循以下模式:

Key[lang_COUNTRY.ENCODING@MODIFIER]=Value

以下是最简单形式的本地化Name替代示例

Name=Personal File
Name[bg]=Личен Файл

翻译取决于LC_MESSAGES 环境变量。在此示例中,如果它包含bg(保加利亚语),则名称将为“Личен файл”。

使用修饰符,我们可以实现更精确的控制。这是另一个指定国家/地区、编码和修饰符的示例:

Name=Financial Sheets
Name[bg_BG.UTF-8@Iztok]=Финансови Отчети

此语言环境将按以下顺序匹配LC_MESSAGES

  • lang_COUNTRY@MODIFIER
  • lang_COUNTRY
  • lang@MODIFIER
  • lang
  • 默认值

ENCODING不参与匹配。