基础版系统开始菜单开发说明
1.Desktop Entry文件的作用
Desktop Entry文件是Linux桌面系统中标准的程序启动配置描述方式。桌面配置项是描述如何启动程序,如何处理数据的配置文件,它们还会和菜单规范同步作用,定义一个程序在菜单中的显示图标。桌面配置项大致分为三类:
- 应用程序:指向某个应用程序的快捷方式;
- 链接:指向某个网址的链接;
- 目录:某个菜单项元数据的容器。
应用程序配置项,即 .desktop 文件是原信息资源和应用程序快捷图标的集合。系统程序的配置项通常位于 /usr/share/applications 或 /usr/local/share/applications目录,单用户安装的程序位于 ~/.local/share/applications 目录,优先使用用户的配置项。
2.Desktop Entry文件标准
Desktop Entry 文件标准是由 freedesktop.org 制定的。
3.Desktop文件结构
Desktop Entry 文件通常以字符串“[Desktop Entry]”开始。Desktop Entry 文件的内容是由若干“{关键字,数值}”配对的 Entry 组成的。例如,“Version”就是一个关键字,关键字“Version”对应的数值是“1.0”。
Desktop Entry 文件标准定义了一系列标准关键字。标准关键字分为必选和可选两种:必选标准关键字必须在 .desktop 文件中被定义;而可选关键字则不必。以下是对重点关键字的解析。
关键字 Version:[可选]
该数值指定了当前 Desktop Entry 文件所遵循的 Desktop Entry 文件标准版本。关键字“Encoding”:[1.0 版本不推荐使用]
关键字 Encoding:[1.0版本不推荐使用]
该数值指定了当前 Desktop Entry 文件中特定字符串所使用的编码方式。尽管Desktop Entry 文件标准 1.0 不再推荐使用该关键字,但由于历史原因该关键字仍然广泛出现在现有的 Desktop Entry 文件中。
关键字 Name:[可选]
该数值指定了相关应用程序的名称,快捷方式的显示名称由关键字“Name”的数值所决定。
关键字 GenericName:[可选]
该数值指定了相关应用程序的通用名称,用于补充说明。
关键字 Comment:[可选]
该数值是对当前Desktop Entry的简单描述。
关键字 Type:[必选]
该关键字定义了Desktop Entry文件的类型。常见的“Type”数值是“Application”和“Link”。“Type = Application”表示当前Desktop Entry文件指向了一个应用程序;而“Type = Link”表示当前Desktop Entry文件指向了一个URL。
关键字 Exec:[可选]
关键字“Exec”只有在关键字“Type”类型是“Application”时才有意义。“Exec”的数值定义了启动指定应用程序所要执行的命令,在此命令是可以带参数的。在shell中输入该字符串并按回车键同样可以启动指定应用程序。
关键字 URL:[可选]
关键字“URL”只有在关键字“Type”类型是“Link”时才有意义。“URL”的数值定义了该Desktop Entry文件指向的URL。例如:
[Desktop Entry]
...
Type = Link
URL = http://www.ibm.com/developerworks
...
关键字 Icon:[可选]
该数值定义了当前Desktop Entry文件在应用程序浏览器或是在文件浏览器中所显示的图标。如果关键字“Icon”的数值是以绝对路径的格式给出,那么其数值所指定图标文件将被使用;反之,Linux系统将使用“Icon Theme Specification”在系统指定图标目录下定位所需要使用的图标文件。
关键字 StartupNotify:[可选]
关键字“StartupNotify”的数值是布尔值(true 或是 false)。该关键字只有在关键字“Type”类型是“Application”时才有意义。其数值的含义由规范“Startup Notification Protocol Specifications”定义,在此不再详述。
关键字 Terminal:[可选]
和关键字“StartupNotify”一样,关键字“Terminal”的数值也是布尔值,并且该关键字只有在关键字“Type”类型是“Application”时才有意义。其数值指出了相关应用程序(即关键字“Exec”的数值)是否需要在终端窗口中运行。
关键字 Categories:[可选]
关键字“Categories”只有在关键字“Type”类型是“Application”时才有意义。“Categories”的数值指出了相关应用程序在菜单中显示的类别。具体菜单分类由规范“Desktop Specification Menu”具体定。
关键字 OnlyShowIn 和 NotShowIn:[可选]
这两个关键字分别定义了当前Desktop Entry是否在特定Linux桌面系统(例如:Linux GNOME 或 Linux KDE)下显示(由“OnlyShowIn”定义),或不显示(由“NotShowIn”定义)。
关键字 [LOCALE]:[可选]
根据“Desktop Entry Specification”规范,在关键字后加上字符串“[LOCALE]”就可对该关键字进行特定的本地化定义。“LOCALE”的合法取值为:LOCALE= lang_COUNTRY.ENCODING@MODIFIER。
在此,域"_COUNTRY",".ENCODING"和"@MODIFIER"是可以被忽略的。当指定Desktop Entry文件被解析时,解析器应当根据当前POSIX locale来正确获取本地化的关键字数值。
关键字 NoDisplay:[可选]
该关键字定义了是否允许应用图标出现在菜单列表中(true或false),如果设置了false,则该应用程序图标不会出现在菜单中。
关键字 StartupWMClass:[可选]
定义了当前应用程序启动后的窗口“wmclass”的属性值,该属性值最好与“Name”值保持一致。
关键字 Keywords:[可选]
该关键字定义了当前应用程序的关键词,这些关键词通常是对当前应用程序的描述,可被用于特定情况下的搜索参考。
其余关键字
除了上述出现的关键字外,“Desktop Entry Specification”还定义了“Hidden”、“TryExec”、“MimeType”等可选关键字,用户可以根据需要进行选取。
4.创建Desktop Entry文件实例
Desktop Entry示例:
[Desktop Entry]
Version = 1.0
Name = NFSBrowser
GenericName = Web Browser
Comment = Access the Internet
Exec = /usr/bin/nfs-browser %U
Icon = nfs-browser
StartupNotify = true
Terminal = false
Type = Application
Categories = Network;WebBrowser
NoDisplay = true
MimeType=text/html;text/xml;application/xhtml_xml;image/webp;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp
#本地化配置;
Name[zh_CN] = 方德浏览器
Comment[zh_CN] = 访问互联网
GenericName[zh_CN] = 网页浏览器
5.Desktop Entry在开始菜单中的使用
开始菜单并不直接使用应用程序的Desktop Entry。桌面环境通过读取和解析对应目录下的Desktop Entry文件,并将其转换为若干接口函数以供使用,如开始菜单。
对应的接口函数文件为:
- cdos-app-system.h:应用程序集合,包含对应用程序的查找和管理。
- cdos-app.h:对应某个应用程序,提供针对该应用程序及其Desktop Entry的接口函数。
开始菜单就是基于这两部分的接口函数而创建,并作为其后端支持。应用程序仅需要提供标准的Desktop Entry文件,并将其安装到指定的目录下即可。
在菜单中显示的图标、名称、类别分别由Desktop Entry下的“Icon”、“Name”、“Categories”来定义,如果应用程序不需要在菜单中显示,可通过“NoDisplay”字段进行控制。