优麒麟启动器(desktop文件)介绍

很多小伙伴在使用优麒麟操作系统界面的时候,很容易感受到它与其他操作系统的不同,不仅仅是界面风格改变以及功能模块的重新划分,还有不少在其他操作系统上很难见到的有趣的小功能,今天就来探讨一下一个我们经常见到却很少使用到的贴心小工具–创建启动器。
优麒麟的桌面环境非常简洁,如果你想要改造自己的桌面环境,想要对应用程序的图标进行设计,想要更加方便的文件及文件夹打开方式,需要某些应用的高级功能(例如点击wps文档自动打开某几篇自己正在写的文章,点击火狐浏览器自动打开某几个自己经常使用的网站)。也许启动器就是你桌面环境改造的最佳工具。
在优麒麟系统中,启动器的创建实际上为desktop文件,所以本文分desktop文件介绍和优麒麟启动器的使用说明两个章节。

一:desktop文件介绍
1.总览
desktop文件在linux操作系统的各桌面环境中被广泛使用,这些文件属性描述了如何启动特定程序,其在菜单中的显示方式等。统一标准对广大社区来说是有益的,实现该规范的操作系统环境之间的交互操作因此变得更加简单。

2.文件命名
desktop文件应具有.desktop拓展名,这样根据该拓展名能够非常容易何快捷地确定文件类型。如果没有拓展名,那么桌面系统应通过 “magic detection”退回到识别状态。
对于应用程序来说,.desktop文件拓展名之前的桌面文件的名称部分应符合D-Bus协议,(例如不以数字开头,并且不能含有除字母、数字、下划线、破折号以外的其他字符)
desktop文件的名称应遵循”reverse DNS”的约定:应以应用程序作者控制的反向DNS域名开头(小写)。域名后应加上应用程序的名称,该名称通常是由单词和首字母大写(CamelCase)共同编写的。例如,如果所有者 example.org写入“ Foo Viewer”,则他们可以选择名称org.example.FooViewer,从而生成名为的文件org.example.FooViewer.desktop。(为避免与用户域名的冲突,不建议使用包含破折号的名称)。

3.desktop文件ID
该ID代表了每个应用程序的桌面ID标识,该ID基于其文件名。要确定desktop文件的ID,首先要确定其完成路径,删除”applications/”的前缀并转化为”-“。例如例如/usr/share/applications/foo/bar.desktop具有桌面文件ID foo-bar.desktop

4.文件基本格式
desktop文件以UTF-8编码。文件被解释为由换行符分隔的一系列行。文件中的每个地方大小写都很重要。以”#”和空行开头的行被视为注释,将被忽略。
desktop文件中的每一行控制一个属性的设置,属性的设置基本格式类似”键-值”对的形式(key=value),(以下称”key”为关键字,称value为关键字的值)。key=value 等号前后的空格会被自动忽略,”=”是实际的分隔符。

5.识别value的类型
识别的value的类型为字符串,语言字符串,图标字符串,布尔值和数字。字符串类型的值可以包含除控制字符之外的所有ASCII字符。用户可以显示类型为localestring的值,并以UTF-8编码。iconstring类型的值是图标的名称;这些可以是绝对路径,也可以是使用图标主题规范中描述的算法定位的图标的符号名称。这样的值是用户无法显示的,并以UTF-8编码。数字类型的值必须是C语言环境中scanf的%f说明符所识别的有效浮点数。字符串,localestring和iconstring类型的值支持转义序列\ s,\ n,\ t,\ r和\,分别表示ASCII空间,换行符,制表符,回车符和反斜杠。一些键可以具有多个值。在这种情况下,键的值指定为复数:例如,字符串。多个值应该用分号分隔,并且键的值可以选择用分号终止。尾随的空字符串必须始终以分号结尾。这些值中的分号需要使用\;进行转义。

6.标准key的值:
需要注意的是,以下这些key中,有些是必选的,大多数是可选的。需要注意的是仅当存在某特定的key并且将其设置为特定的值的时候,某些key才有意义。(例如当Type的值为Application的时候才可以使用Terminal)。

  • 属性Exec
    关键字”Exec”只有在”Type”类型是”Application”时才有意义。”Exec”的数值定义了启动指定应用程序所要执行的程序,可以选择在其后跟随一个或者多个参数,可执行程序可以使用其完整的路径来指定,也可以仅使用可执行文件的名称来指定。如果未提供完整的路径,则在桌面环境中使用的$PATH环境变量中查找可执行文件,可执行程序的名称或者路径可能不包含等号,参数之间用空格分割。在本例中,关键字”Exec”的数值是firefox .在shell中输入该字符串并按回车键同样可以启动指定应用程序

其中 Exec 常用的参数有:%f %F %u %U

%f:单个文件名,即使选择了多个文件。如果已选择的文件不在本地文件系统中(比如说在HTTP或者FTP上),这个文件将被作为一个临时文件复制到本地,%f将指向本地临时文件;

%F:文件列表。用于程序可以同时打开多个本地文件。每个文件以分割段的方式传递给执行程序。

%u:单个URL。本地文件以文件URL或文件路径的方式传递。

%U:URL列表。每个URL以分割段的方式传递给执行程序。本地文件以文件URL或文件路径的方式传递。

  • 属性Icon
    定义了启动器显示的图标。如果关键字”Icon”的数值是以绝对路径的格式给出,那么该图标文件将被使用;优麒麟和其他linux系统也支持系统主题的图标,例如Icon图标属性选择firefox系统就会自动在当前系统主题下选取相应的图标。
    注意:

在desktop文件中,在icon的主图规范中,Icon关键字的数值无法识别”~”,所以必须使用绝对路径

  • 属性Name:
    无论用户是如何给desktop文件命名的,显示给用户的名称都会是该名称。
  • 属性Type:
    关键字”Type”定义了Desktop Entry文件的类型。常见的”Type”数值是”Application”和”Link”。”Type = Application”表示当前Desktop Entry文件指向了一个应用程序;而”Type = Link”表示当前Desktop Entry文件指向了一个URL 。
  • 属性Comment:
    应用程序的注释。在不同的桌面环境中,该属性的显示时机可能存在较大差异,很多解析应用程序的代码都会选择解析desktop文件来解析应用程序,但往往解析的属性不包含Comment(大多数仅解析Name,Icon,Exec三个属性)。在优麒麟操作系统和桌面环境中,一般在开始菜单中该应用程序鼠标悬浮时,快速启动栏鼠标悬浮等情况会显示该属性。
  • 属性GenericName:

与Name类似,GenericName也是应用程序的名称(相关应用程序的通用名称),但是一般不直接显示给用户,而是在某些应用内才会被解析和显示,优麒麟操作系统默认不解析该属性,全部解析Name属性来展示应用程序名称。

  • 属性MimeType:
    MimeType属性是MIME体系在desktop文件中的体现,MimeType属性包含了许多对该应用程序的功能的实现,我们能够看到许多mime文件类型描述文件,这些文件定义了每个MiMeType的特征参数,以及何种类型的的文件归属到这个MIME下,他们实现了默认打开程序的优先级,修改打开默认程序等功能。(一篇关于MIMEType的详细介绍:https://www.jianshu.com/p/4617e8e600ad)。
  • 属性Categories
    属性Categories只有在”Type”类型是”Application”时才有意义。该属性能够指出应用程序在菜单中显示的类别。具体菜单分类由规范”Desktop Specification Menu”具体定义。
  • 属性Actions:
    该属性与Qt中的QAction类极其相似,QAction可以包括一个图标,菜单文本等,这些内容的绝大部分都可以在构造函数中设置。也可以通过setIcon(),setIconText()等函数分别设置,在desktop文件中这些功能的实现依然是通过给不同的Action设置不同的属性,这样,应用程序的功能就能够极大地丰富。Firefox.desktop就是一个很好的例子。
  • 属性OnlyShowIn,NotShowIn
    是否在特定的linux桌面系统中使用
  • 除了上述属性外我们有时还能在不同的desktop文件中见到其他特殊的属性,例如StartupNotify,其数值的含义由规范”Startup Notification Protocol Specifications”定义(链接:https://specifications.freedesktop.org/startup-notification-spec/startup-notification-latest.txt);

    X-SuSE-translate:关键字”X-SuSE-translate”是SUSE Linux(http://www.novell.com/linux/)特有的。”X-SuSE-translate”符合SUSE RPM Package风格。”X-SuSE-translate”数值表示是否要对关键字”Name”和”GenericName”进行翻译。

7.支持D-Bus启动
支持由D-Bus启动的应用程序必须实现以下接口(以D-Bus自省XML格式给出):


 <interface name ='org.freedesktop.Application'>
    <method name ='激活'>
      <arg type ='a {sv}'name ='platform_data'direction ='in'/>
    </ method>
    <方法名称='打开'>
      <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>

应用程序必须根据简介部分中的命名建议来命名其桌面文件(例如,文件名必须类似于org.example.FooViewer.desktop)。该应用程序必须具有一个可激活的D-Bus服务,该服务的已知名称必须与删除了.desktop部分的桌面文件名相同(例如,对于我们的示例org.example.FooViewer)。上面的接口必须在如下确定的对象路径上实现:从应用程序的众所周知的D-Bus名称开始,将所有点都更改为斜杠并在斜杠前面加上前缀。如果找到破折号(’-‘),请将其转换为下划线(’_’)。
当启动应用程序而无需打开文件时,调用Activate方法。
使用文件启动应用程序时,将调用Open方法。字符串数组是UTF-8中的URI数组。
激活桌面操作时,将调用ActivateAction方法。 action-name参数是操作的名称。

8.Interfaces

9.MIME 类型
MIME也是desktop文件的一种关键字。MimeType关键字是MIME体系在desktop文件中的体现,MimeType属性包含了许多对该应用程序的功能的实现,我们能够看到许多mime文件类型描述文件,这些文件定义了每个MiMeType的特征参数,以及何种类型的的文件归属到这个MIME下,他们实现了默认打开程序的优先级,修改打开默认程序等功能。(一篇关于MIMEType的详细介绍:https://www.jianshu.com/p/4617e8e600ad)。

10.增填desktop文件的动作
应用程序类型的desktop文件可以包含一个或多个操作。Actions关键字表示调用应用程序的另一种方式。应用程序启动器应在应用程序上下文中将它们公开给用户(例如,作为子菜单)。这用于构建所谓的“快速列表”或“跳转列表”。
该关键字与Qt中的QAction类极其相似,QAction可以包括一个图标,菜单文本等,这些内容的绝大部分都可以在构造函数中设置。也可以通过setIcon(),setIconText()等函数分别设置,在desktop文件中这些功能的实现依然是通过给不同的Action设置不同的属性,这样,应用程序的功能就能够极大地丰富。firefox.desktop就是一个很好的例子。
在desktop文件中增添动作Actions的行为类似与重新写一个desktop文件。每一个动作都应有一组特定的关键字(主要包含Name Icon Exec关键字)这些组内的关键字决定了该动作(Actions)如何展示。
需要注意的是组内的Name关键字是显示给用户的标签(启动器的子菜单)。Icon关键字是与该动作一起显示的图标,关键字的值命名规范同”图标主题规范”。Exec关键字死为此操作执行的程序,可能带有参数,此处关键字与上面Exec关键字的规范是相同的


备注:关于desktop文件的中文命名,有不少网站称之为 Linux Desktop Entry 文件,本节简称为desktop文件。



发表评论

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