基础版系统开始菜单开发说明

1.Desktop Entry文件的作用

Desktop Entry文件是Linux桌面系统中标准的程序启动配置描述方式。桌面配置项是描述如何启动程序,如何处理数据的配置文件,它们还会和菜单规范同步作用,定义一个程序在菜单中的显示图标。桌面配置项大致分为三类:

应用程序配置项,即 .desktop 文件是原信息资源和应用程序快捷图标的集合。系统程序的配置项通常位于 /usr/share/applications 或 /usr/local/share/applications目录,单用户安装的程序位于 ~/.local/share/applications 目录,优先使用用户的配置项。

2.Desktop Entry文件标准

Desktop Entry 文件标准是由 freedesktop.org 制定的。

具体可参照:https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys

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文件,并将其转换为若干接口函数以供使用,如开始菜单。

对应的接口函数文件为:

开始菜单就是基于这两部分的接口函数而创建,并作为其后端支持。应用程序仅需要提供标准的Desktop Entry文件,并将其安装到指定的目录下即可。

在菜单中显示的图标、名称、类别分别由Desktop Entry下的“Icon”、“Name”、“Categories”来定义,如果应用程序不需要在菜单中显示,可通过“NoDisplay”字段进行控制。