快到桌上来 – Linux 桌面快捷方式和菜单配置


随着 Linux 的不断发展壮大,除了其在原有的命令行阵地依旧保持既有特色外,桌面 Linux 发展也相当迅猛。在 Linux 系统安装程序后,在桌面环境或菜单中添加该程序的快捷方式,无疑也是高效简洁的程序起动方式。

现代各个 Linux 桌面发行版均考虑了这一问题,在文件系统的特定目录内(如 /usr/share/applications/)中统一放置程序的快速启动方式的文件。这些文件以 .desktop 结尾,采用一系列专门的规范(如 Desktop Entry Specification)规定了文件的编写格式,其中涵盖了程序快捷启动方式的相关信息。当期望新安装的某个应用程序除了可以在命令行启动外,还想采用桌面或菜单创建快捷方式启动,则在专门的文件夹(如 /usr/share/applications/)中编辑相应的 .desktop 快捷可执行文件即可。

与其他多用户操作系统一样,Linux 既可进行全局性配置,也可进行某个特定用户的定制化配置,Linux 的桌面快捷启动文件也具备这一特点,使用不同的目录位置表示不同的配置方式。

目录位置 说明
/usr/share/applications/ 全局配置路径(发行版默认路径)
/usr/local/share/applications/ 第三方应用配置路径
~/.local/share/applications/ 特定用户本地化配置路径

desktop 文件编写规范

desktop 文件本质上可视为一个配置文件,采用的常见的 “key – value” 配置方式。其具体的规范如下:

[Desktop Entry]
Version = 1.0
Encoding = UTF-8
Name = Eclipse
GenericName = Eclipse
Comment = An IDE for Java and C/C++
Exec = /usr/local/eclipse/eclipse
Icon = /usr/local/eclipse/icon.xpm
Terminal = false
Type = Application
Categories = GNOME;Application;Development;
Name[zh_CN] = Eclipse
Comment[zh_CN] = 一款开发Java和C/C++的集成环境
GenericName[zh_CN] = Eclipse

各主要字段的含义:

  • [Desktop Entry] — 最顶层字段

    一个桌面快捷方式文件的标识,必不可少。

  • Version [可选]

    指明了当前 Desktop Entry 文件所遵循的 Desktop Entry 文件标准版本。

  • Encoding [1.0 版本不推荐使用]

    指定了当前 Desktop Entry 文件中特定字符串所使用的编码方式。尽管Desktop Entry 文件标准 1.0 不再推荐使用该关键字,但由于历史原因该关键字仍然广泛出现在现有的 Desktop Entry 文件中。

  • Name [必选] — 程序名

    指定了相关应用程序的名称。

  • GenericName [可选]

    指定了相关应用程序的通用名称。

  • Comment [可选]

    对当前 Desktop Entry 的简单描述。

  • Type [必选] — 重要字段!

    定义了 Desktop Entry 文件的类型。

    常见的 “Type” 数值是 “Application” 和 “Link”。

    • Type = Application:标识当前 Desktop Entry 文件指向了一个应用程序
    • Type = Link:标识当前 Desktop Entry 文件指向了一个 URL (Uniform Resource Locator)
  • Exec [可选]

    前置条件:取决于 Type 字段。在 Type = Application 时,Exec 字段才有意义。

    Exec 字段定义了启动指定应用程序所要执行的命令。

    本例中,”Exec” 字段的数值是字符串 /usr/local/eclipse/eclipse。在 shell 中输入该字符串并按回车键同样可以启动指定应用程序。

    此外,Exec 字段可以通过命令中携带的参数,说明程序的打开方式。常用参数有:

    参数 说明
    %f 单个文件名,即使选择了多个文件。如果已选择的文件不在本地文件系统中(比如说在 HTTP 或者 FTP 上),这个文件将被作为一个临时文件复制到本地,%f 将指向本地临时文件
    %F 文件列表。用于程序可以同时打开多个本地文件。每个文件以分割段的方式传递给执行程序。
    %u 单个URL。本地文件以文件URL或文件路径的方式传递。
    %U URL列表。每个URL以分割段的方式传递给执行程序。本地文件以文件URL或文件路径的方式传递。

    尤其是,Exec 字段最后的包含 %U 或 %f 参数时,决定了这个程序是否能显示在文件管理器的 open with 清单中。

  • URL [可选]

    前置条件:取决于 Type字段。在 Type = Link 时,URL 字段才有意义。

    URL 字段的取值定义了该 Desktop Entry 文件指向的 URL。

  • Icon [可选] — 程序图标

    定义当前 Desktop Entry 文件在应用程序浏览器或是在文件浏览器中所显示的图标。

    大多数程序将快捷启动程序的图标放在系统默认放置路径 /usr/share/pixmaps 中。

    • 如果 Icon 字段的取值是以绝对路径的格式给出,那么其取值所指定位置的图标文件将被使用;
    • 反之,Linux 系统按照 “Icon Theme Specification” 规范要求,在系统默认的图标目录下,定位所需要使用的图标文件。
  • Terminal [可选] — 程序执行时是否显示终端窗口

    前置条件:取决于 Type 字段。在 Type = Application 时,Terminal 字段才有意义。

    Terminal 字段的取值指出了相关应用程序(即 “Exec” 字段指出的命令)是否需要在终端窗口中运行。

    该字段的取值是布尔值。

  • 菜单相关

    • Categories [可选] — 程序属于菜单中的哪个大类

      前置条件:取决于 Type 字段。在 Type = Application 时,Categories 字段才有意义。

      本字段指出了相关应用程序在菜单中显示的类别。更直观的表述,该选项指明了应用程序在菜单显示的哪一个大类中出现。

      比如,本例中将 eclipse 分类在 “应用程序->编程” 子菜单中。具体菜单分类由规范 “Desktop Specification Menu” 具体定义。

    • NoDisplay [可选] — 程序的快捷启动是否在菜单中出现

      NoDisplay 选项的含义是: “该应用程序存在,但是,该应用程序不在菜单中显示”。

      这是一个非常有意思的选项,同时也是一个非常有用的选项。有些情况下,我们期望使用一些 “隐式” 的应用程序,这类程序在菜单选项中没有明确的入口,非常“低调”;与此同时,这些程序又与特定的 MIME 类型关联,因此,该 MIME 类型的文件在文件管理器或其应用中可以被”隐式”应用程序打开。该选项为创建此类的 “隐身” 的应用程序提供了途径。

      有些很多功能强大的应用程序,会提供各种参数,以便在不同场景使用。在特定场景下,使用带有特定参数配合的应用程序,这种情况如果都出现在菜单中,会使用户感到非常的混乱,如此,只有一个通用场景下应用程序出现在菜单中,作为常规 “门面”,而使用 “隐式” 应用程序作为 “门面” 的 “影子”,可以很好的满足各类多样性场景的需求。

      “隐式” 应用程序真正做到了 “润物细无声”,在 linux 桌面应用中,很多大型的应用软件使用这个选项,虽有多个快捷启动方式,但只安排一个用户可见的 “门面”。如,在 crossover 中安装 office,就会创建大量的 “隐式” desktop 应用。

  • MimeType [可选] — 打开文件相关

    说明该程序支持的 MIME 文件类型。

    一个应用程序可以支持多个 MIME 类型,每个类型之间用双引号隔开。

    MimeType=application/postscript;application/pdf;
    
  • OnlyShowIn 和 NotShowIn [可选]

    分别定义了当前 Desktop Entry 是否在特定 Linux 桌面系统(如Linux GNOME 或 Linux KDE)下显示(由”OnlyShowIn”定义),或不显示(由”NotShowIn”定义)。


实际使用时,将按上述规范编写好的 .desktop 文件拷贝至桌面或锁定至任务栏即可。

一个精简的 desktop 文件模板如下所示:

[Desktop Entry]
Encoding = UTF-8
Name = your_app_name
Type = Application
Exec = /usr/local/eclipse/eclipse 或 sh  /home/gogetter/myscripts/vm-xpsp3.sh
Icon = /usr/local/eclipse/icon.xpm
Terminal = false


在 Exec 中指定执行程序/脚本路径,路径应使用完整路径,不能使用 ~ 等简化形式。
在 Exec 中使用了脚本,脚本中调用的命令要使用完整路径。

波浪线(~)是一个 Bash 运行时检查的变量,在 Bash 中运行时,Bash 会将其替换为 $HOME 环境变量,进行形成完整的路径。但桌面程序的执行,往往不在 Bash 环境中,如果使用 ~,不会将其替换为 $HOME 中的值,如此会造成程序或脚本无法找到的情况。故而,desktop 文件中,宜使用完整路径。

desktop 文件管理工具

.desktop 文件是一个文本文件,应用中,按照 Desktop Entry Specification 规范进行编辑,将文件拷贝至特定文件夹即可。为提升 desktop 文件的管理效率,Linux 也提供配套的工具包 — desktop-file-utils

deskotp-file-utils 中包含了几个重要的工具,方便 .desktop 文件的管理,

作用 命令
编辑 desktop 文件 desktop-file-edit
验证 desktop 文件 desktop-file-validate
安装 desktop 文件 desktop-file-install
更新 desktop 文件数据库 update-desktop-database

其中,验证工具 desktop-file-validate 可以自动检查 .desktop 文件中的语法错误,可以作为 .desktop 文件的调试器,被较多使用。

Reference

  1. https://zhuanlan.zhihu.com/p/49837675
  2. https://www.polarxiong.com/archives/Bash%E6%98%AF%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%E6%B3%A2%E6%B5%AA%E7%BA%BF%E7%9A%84.html
  3. https://blog.csdn.net/astrotycoon/article/details/78109809
  4. https://www.cyberciti.biz/howto/how-to-install-and-edit-desktop-files-on-linux-desktop-entries/

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注