介绍
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 类型 | 是否必须? | 生效的类型 |
---|---|---|---|---|
Type | Application (type1), Link (type2), Direcory (type3) | string | Yes | |
Version | 版本,例如1.1 | string | No | 1-3 |
Name | 应用程序的特定名称,例如“Mozilla”。 | localestring | Yes | 1-3 |
GenericName | 应用程序的通用名称,例如“Web浏览器”。 | localestring | No | 1-3 |
NoDisplay | 不在菜单中显示, 但可以与MIME类型相关联 | boolean | No | 1-3 |
Comment | 应用描述 | ocalestring | No | 1-3 |
Icon | 要么绝对路径,要么符合图标主题规范 | localestring | No | 1-3 |
Hidden | 是否隐藏,等同于不存在的文件 | boolean | No | 1-3 |
OnlyShowIn, NotShowIn | 一般不用此字段 | boolean | No | 1-3 |
DBusActivatable | DBus激活,默认false。参阅D-Bus激活。应包含Exec行,实现兼容 | boolean | No | |
TryExec | 如果文件不存在, 则忽略该文件,并不在菜单中出现 | string | No | 1 |
Exec | 执行路径 。参阅Exec Key | string | No | 1 |
Path | 当Type=Application时,程序运行的目录 | string No | 1 | |
Terminal | 程序是否在终端窗口中运行。 | boolean | No | 1 |
Actions | 为其他组提供接口,比如Action=Gallery;,那么其他组就为[Desktop Action Gallery] | string(s) | No | 1 |
MimeType | 此应用支持打开的类型,具体类型可以百度 | string(s) | No | 1 |
Categories | 参阅桌面菜单规范 | string(s) | No | 1 |
Implements | 默认情况下,桌面文件不实现任何接口。参阅接口 | string(s) | No | |
Keywords | 用于搜索,不应该是Name或者为多余的值 GenericName。 | localestring(s) | No | 1 |
StartupNotify | 如果不存在,则合理的处理取决于实现(假设为false,使用StartupWMClass等)。参阅启动通知协议规范 | boolean | No | 1 |
StartupWMClass | 一般跟Name相同即可 | string | No | 1 |
URL | 只适用于Type=Link | string | Yes | 2 |
Exec Key
Code | 描述 |
---|---|
%f | %f指向临时文件。用于不了解URL语法的程序。 |
%F | 文件列表。用于可以一次打开多个本地文件的应用程序。每个文件作为单独的参数传递给可执行程序。 |
%u | 单一的URL或者本地文件 |
%U | %u的复数 |
%i | 如果Icon 为空,不应该填写此参数。一般也不用 |
%c | Name键中的已翻译名称。 |
%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