linux桌面入口文件(.desktop)规范

本文深入解析了KDE和GNOME使用的桌面入口文件格式,包括文件命名规则、基本格式、键值类型及桌面文件的标准化规范。阐述了.desktop和.directory文件的区别,以及如何通过桌面文件ID标识应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

KDE和GNOME桌面环境都采用了类似的“桌面入口”格式,或描述特定程序如何启动的配置文件,它在菜单中的显示方式等。统一标准对更大的社区有利。所有各方都同意这样做,即两个环境之间的互操作,以及实现规范的任何其他环境变得更加简单。

文件命令

桌面入口文件应具有.desktop 扩展名,但文件Type Directory应具有 .directory扩展名。

对于应用程序,.desktop扩展名之前的桌面文件名称 部分应该是有效的 D-Bus知名名称。这意味着它是由点分隔的非空元素序列,不能数字开头,并且每个元素仅包含来自集合的字符[A-Za-z0-9_-]:ASCII字母,数字,短划线和下划线。

桌面入口的名称应遵循“反向DNS”约定:它应以应用程序作者控制的反向DNS域名开头,小写。域名后面应该跟应用程序的名称,通常用大驼峰编写。例如,命令为:org.example.FooViewer.desktop。

允许使用包含破折号的已知名称,但不建议这样做,因为在反向DNS名称的某些相关用途中不允许使用破折号,例如D-Bus对象路径和接口名称以及Flatpak应用程序ID。如果作者的域名包含破折号,建议将其替换为下划线:这不会导致歧义,因为DNS域名中不允许使用下划线。

如果作者的域名包含以数字开头的标签(在D-Bus知名名称中不允许),建议在桌面条目名称的该元素前加下划线。例如,7-zip.org可能会发布一个名为的应用程序 org._7_zip.Archiver。

桌面文件ID

表示应用程序的每个桌面入口由其桌面文件ID标识,该文件ID基于其文件名。

要确定桌面文件的ID,请创建相对于安装桌面文件的$XDG_DATA_DIRS组件的完整路径,删除“applications /”前缀,然后将“/”变为“ - ”。

例如,/usr/share/applications/foo/bar.desktop的桌面文件ID为foo-bar.desktop。

例如,$XDG_DATA_DIRS包含默认路径的/usr/local/share:/usr/share,然后 /usr/local/share/applications/org.foo.bar.desktop与 /usr/share/applications/org.foo.bar.desktop具有相同的桌面文件ID org.foo.bar.desktop,但只有第一个将被使用。

如果同时foo-bar.desktop和foo/bar.desktop存在,这是未阐明的。

如果桌面文件未安装在$ XDG_DATA_DIRS的applications文件夹中,则它们没有ID。

文件的基本格式

.desktop文件以UTF-8编码。每一行由换行符分隔。
基本目录是:$XDG_DATA_DIRS/desktop-directories/

注释

#开头的行为注释

第一个组必须为[Desktop Entry],后面的Key=Value都是这个组,直到遇到下一个组

Key=Value

  • =两边不能有空格
  • Key只能用[A-Za-z0-9]
  • 不同组的Key可以同名

可能的值类型

公认的Value类型有 string,localestring,boolean 和 numeric
localestring 为用户可显示的字符串,用UTF-8编码

键的本地化值

Name=Foo
Name[sr_YU]=...
Name[sr@Latn]=...
Name[sr]=...

优先级从左到右:lang_COUNTRY@MODIFIER, lang_COUNTRY, lang@MODIFIER, lang, default value

正式的桌面文件Key

  • 当Type=Application时Terminal才有效
  • 当Type=Link时URL才有效
Key描述Value 类型是否必须?生效的类型
TypeApplication (type1), Link (type2), Direcory (type3)stringYes
Version版本,例如1.1stringNo1-3
Name应用程序的特定名称,例如“Mozilla”。localestringYes1-3
GenericName应用程序的通用名称,例如“Web浏览器”。localestringNo1-3
NoDisplay不在菜单中显示, 但可以与MIME类型相关联booleanNo1-3
Comment应用描述ocalestringNo1-3
Icon要么绝对路径,要么符合图标主题规范localestringNo1-3
Hidden是否隐藏,等同于不存在的文件booleanNo1-3
OnlyShowIn, NotShowIn一般不用此字段booleanNo1-3
DBusActivatableDBus激活,默认false。参阅D-Bus激活。应包含Exec行,实现兼容booleanNo
TryExec如果文件不存在, 则忽略该文件,并不在菜单中出现stringNo1
Exec执行路径 。参阅Exec KeystringNo1
Path当Type=Application时,程序运行的目录string No1
Terminal程序是否在终端窗口中运行。booleanNo1
Actions为其他组提供接口,比如Action=Gallery;,那么其他组就为[Desktop Action Gallery]string(s)No1
MimeType此应用支持打开的类型,具体类型可以百度string(s)No1
Categories参阅桌面菜单规范string(s)No1
Implements默认情况下,桌面文件不实现任何接口。参阅接口string(s)No
Keywords用于搜索,不应该是Name或者为多余的值 GenericName。localestring(s)No1
StartupNotify如果不存在,则合理的处理取决于实现(假设为false,使用StartupWMClass等)。参阅启动通知协议规范booleanNo1
StartupWMClass一般跟Name相同即可stringNo1
URL只适用于Type=LinkstringYes

Exec Key

Code描述
%f%f指向临时文件。用于不了解URL语法的程序。
%F文件列表。用于可以一次打开多个本地文件的应用程序。每个文件作为单独的参数传递给可执行程序。
%u单一的URL或者本地文件
%U%u的复数
%i如果Icon 为空,不应该填写此参数。一般也不用
%cName键中的已翻译名称。
%k桌面文件的位置 要么为URL,要么是本地文件名,要么是为空,不知道干啥的,一般不用

命令行最多可包含一个%f,%u,%F或%U字段代码。如果应用程序不应打开任何文件,则必须从命令行中删除%f,%u,%F和%U字段代码并将其忽略。

D-Bus激活

文件名必须为,比如:org.example.FooViewer.desktop
D-Bus的XML格式

  <interface name='org.freedesktop.Application'>
    <method name='Activate'>
      <arg type='a{sv}' name='platform_data' direction='in'/>
    </method>
    <method name='Open'>
      <arg type='as' name='uris' direction='in'/>
      <arg type='a{sv}' name='platform_data' direction='in'/>
    </method>
    <method name='ActivateAction'>
      <arg type='s' name='action_name' direction='in'/>
      <arg type='av' name='parameter' direction='in'/>
      <arg type='a{sv}' name='platform_data' direction='in'/>
    </method>
  </interface>

A.示例桌面条目文件

[Desktop Entry]
Version=1.0
Type=Application
Name=Foo Viewer
Comment=The best viewer for Foo objects available!
TryExec=fooview
Exec=fooview %F
Icon=fooview
MimeType=image/x-foo;
Actions=Gallery;Create;

[Desktop Action Gallery]
Exec=fooview --gallery
Name=Browse Gallery

[Desktop Action Create]
Exec=fooview --create-new
Name=Create a new Foo!
Icon=fooview-new

原文链接:https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值