桌面应用自动启动规范
目录
桌面应用自动启动规范... 1
介绍. 2
启动期间应用程序的自动启动. 2
1.自动启动目录... 2
2.Application .desktop文件... 2
2.1隐藏关键字... 3
3.实施说明... 3
安装后应用自动启动. 3
1.自动启动文件... 3
2.自动打开文件... 4
附录. 5
一、XDG 基础目录规范... 5
1.1介绍... 5
2.2基本... 5
2.3环境变量... 5
2.4引用此规范... 6
原文地址:
https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html
介绍
此 DRAFT 文档定义了在启动桌面环境和挂载可移动介质后自动启动应用程序的方法。
此规范中的某些文件位置是根据"桌面基础目录规范"指定的。
本文件中的"必须"、"不得"、"必须"、"应"、"应"、"不应"、"推荐"、"可能"和"可选"等关键词将解释为 RFC 2119 中所述。
启动期间应用程序的自动启动
通过将application's .desktop文件放入自动启动目录之一,应用程序将在用户登录后,启动用户桌面环境期间自动启动。
1.自动启动目录
自动启动目录$XDG_CONFIG_DIRS/autostart,根据"桌面基础目录规范"中的"desktop base directory specification".部分定义。
如果相同的文件名位于多个自动启动目录下,则只应使用最重要的目录下的文件。
示例:如果未设置$XDG\CONFIG\HOME,则用户主目录中的自启动目录为~/.config/autostart/
示例:如果未设置$XDG_CONFIG_DIRS,则系统范围的自启动目录为/etc/xdg/autostart/
示例:如果未设置$XDG_CONFIG_HOME 和$XDG_CONFIG_DIRS,并且两个文件/etc/xdg/autostart/foo.desktop和~/.config/autostart/foo.desktop存在,然后仅仅文件~/.config/autostart/foo.desktop将被使用,因为~/.config/autostart/比/etc/xdg/autostart更重要
2.Application .desktop文件
application.desktop文件必须具有“桌面输入规范”中定义的格式。所有键都应按定义进行解释,但有以下例外,以便考虑到autostart目录中的.desktop文件不会显示在菜单中。
2.1隐藏关键字
当.desktop文件将隐藏的密钥设置为true时,必须忽略.desktop文件。当多个目录中存在多个同名的.desktop文件时,必须只考虑最重要的.desktop文件中的隐藏项:如果将其设置为true,则必须忽略其他目录中所有同名的.desktop文件。
2.2 OnlyShowIn and NotShowIn Keys
onlyshowin条目可能包含一个字符串列表,标识必须自动启动此应用程序的桌面环境,所有其他桌面环境不得自动启动此应用程序。
NotShownIn条目可能包含一个字符串列表,用于标识桌面环境,这些桌面环境不能自动启动此应用程序,所有其他桌面环境必须自动启动此应用程序。
这些键中只有一个键(OnlyShowIn或NotShowIn)可以出现在单个.desktop文件中。
2.3TryExec键
如果TryExec键的值与已安装的可执行程序不匹配,则具有非空TryExec字段的.desktop文件不能自动启动。TryExec字段的值可以是绝对路径,也可以是没有任何路径组件的可执行文件的名称。如果指定的可执行文件名没有任何路径组件,则搜索$path环境以查找匹配的可执行程序。
3.实施说明
如果应用程序通过在系统范围的autostart目录中安装.desktop文件来自动启动,则单个用户可以通过在其包含键Hidden=true的个人autostart目录中放置同名的.desktop文件来禁用此应用程序的自动启动。
安装后应用自动启动
桌面环境装载新介质时,该介质可能包含可建议启动应用程序的Autostart文件或可建议打开位于介质上的特定文件的Autoopen文件。
1.自动启动文件
安装新介质时,应按先验顺序检查介质的根目录是否为以下自动启动文件:.autorun, autorun, autorun.sh 仅应考虑存在的第一个文件。
桌面环境可能会根据用户、系统管理员或供应商设置的策略完全忽略Autostart文件。
桌面环境必须在自动启动应用程序之前提示用户确认。
当检测到自动启动文件并且用户确认执行时,必须执行自动启动文件,并将当前工作目录 (CWD) 设置为介质的根目录。
2.自动打开文件
当新介质被挂载时, a) 介质不包含自动启动文件或 b) 忽略自动启动文件的策略生效时,应按优先顺序检查介质的根目录,按优先顺序排列:.autoopen, autoopen .。只应考虑存在的第一个文件。
桌面环境可能会根据用户、系统管理员或供应商设置的策略完全忽略自动打开文件。
自动打开文件必须包含指向媒体上包含的不可执行文件的单个相对路径。如果文件包含换行符或回车符,则必须忽略换行符或回车符本身以及后面的所有字符。
相对路径不得包含引用父目录的路径组件(../)
相对路径不得指向可执行文件。
桌面环境必须验证相对路径是否指向实际位于介质上的文件,同时考虑任何符号或其他链接,并且必须忽略指向介质本身之外的文件位置的任何相对路径。
如果相对路径指向可执行文件,则桌面环境不得执行文件。
桌面环境必须在打开文件之前提示用户进行确认。
当检测到自动打开文件且用户确认应打开自动打开文件中指示的文件时,则必须在用户通常首选的应用程序中打开自动打开文件中指示的文件,除非用户另有指示。
附录
一、XDG 基础目录规范
1.1介绍
各种规格指定文件和文件格式。此规范通过定义一个或多个基目录来定义这些文件应在哪里查找,相对于哪些文件应该位于此位置。
2.2基本
XDG 基础目录规范基于以下概念:
-
有一个单一的基数目录相对于哪些用户特定的数据文件应该写入。此目录由环境变量定义。$XDG_DATA_HOME
-
有一个单一的基础目录相对于哪些用户特定的配置文件应该写入。此目录由环境变量定义。$XDG_CONFIG_HOME
-
有一组按优先顺序排列的基目录,应该相对于这些基目录搜索数据文件。这组目录由环境变量定义。$XDG_DATA_DIRS
-
有一组按首选项排序的基本目录,应相对于这些目录搜索配置文件。这组目录由环境变量定义。$XDG_CONFIG_DIRS
-
有一个单一的基本目录相对于其中用户特定的非必要的(缓存)数据应该写入。此目录由环境变量定义。$XDG_CACHE_HOME
-
有一个单一的基本目录相对于哪些用户特定的运行时间文件和其他文件对象应该放置。此目录由环境变量定义。$XDG_RUNTIME_DIR
在这些环境变量中设置的所有路径必须是绝对的。如果实现在这些变量中遇到相关路径,则应认为路径无效并忽略它。
2.3环境变量
$XDG_DATA_HOME定义应存储哪些用户特定数据文件的基本目录。如果不是设置或空的,则应使用默认值 /.local/share。$XDG_DATA_HOME$HOME
$XDG_CONFIG_HOME定义应存储哪些用户特定配置文件的基本目录。如果不是设置或空的,则应使用默认值/.config。$XDG_CONFIG_HOME$HOME
$XDG_DATA_DIRS定义了除基本目录外用于搜索数据文件的基本目录的首选顺序集。目录应以冒号“:”分隔。。$XDG_DATA_HOME$XDG_DATA_DIRS
如果未设置或为空,则应使用等于/usr/local/share/:/usr/share/的值。$XDG_DATA_DIRS
$XDG_CONFIG_DIRS定义基本目录的首选顺序集,以便在基本目录之外搜索配置文件。中的目录应以冒号“:”分隔。$XDG_CONFIG_HOME$XDG_CONFIG_DIRS
如果未设置或为空,则应使用 /etc/xdg 。$XDG_CONFIG_DIRS
基本目录的顺序表示其重要性:列出的第一个目录是最重要的。当在多个位置定义相同的信息时,相对于更重要的基本目录定义的信息具有先例。所定义的基础目录被认为比所定义的任何基本目录都重要。所定义的基础目录被认为比所定义的任何基本目录都重要。$XDG_DATA_HOME$XDG_DATA_DIRS$XDG_CONFIG_HOME$XDG_CONFIG_DIRS
$XDG_CACHE_HOME定义应存储用户特定非必要数据文件的基目录。如果不是设置或空的,则应使用 默认值/.cache。$XDG_CACHE_HOME$HOME
$XDG_RUNTIME_DIR定义基础目录,相对于哪些用户特定的非必要运行时间文件和其他文件对象(如插座、命名管、...)应存储。目录必须归用户所有,并且他必须是唯一一个阅读和编写访问它的人。其Unix访问模式必须为0700。
目录的使用寿命必须受登录用户的约束。用户首次登录时必须创建该目录,如果用户完全注销目录,则必须将其删除。如果用户多次登录,他应该指向相同的目录,并且必须目录继续存在,从他第一次登录到他最后一次注销系统,而不是在两者之间删除。目录中的文件不能在重新启动或完全注销/登录周期后继续存在。
目录必须在本地文件系统上,并且不与任何其他系统共享。目录必须完全符合操作系统的标准。更具体地说,在类似 Unix 的操作系统上,必须支持AF_UNIX插座、符号链接、硬链接、适当权限、文件锁定、稀疏文件、内存映射、文件更改通知、必须支持可靠的硬链接计数,并且不应对文件名称字符集施加任何限制。此目录中的文件可能会定期进行清理。为了确保您的文件不会被删除,它们应该每 6 小时对访问时间戳进行至少一次修改,或者应在文件上设置"粘性"位。
如果不设置应用程序应返回到具有类似功能的替换目录并打印警告消息。应用程序应使用此目录进行通信和同步,并且不应在其中放置较大的文件,因为它可能驻留在运行时内存中,并且不必交换到磁盘。$XDG_RUNTIME_DIR
2.4引用此规范
其他规格可以通过指定数据文件的位置作为 /subdir/filename来引用此规范。这意味着:$XDG_DATA_DIRS
·此类文件应安装到/subdir/filename,默认为 /usr/share。$datadir$datadir
·用户数据文件的特定版本可在 /subdir/filename中创建,同时考虑未设置的默认值。$XDG_DATA_HOME$XDG_DATA_HOME$XDG_DATA_HOME
·数据文件的查找应搜索与和指定的所有基目录相关的./subdir/filename。如果环境变量不是设置的,就是空的,则应使用本规范定义的默认值。$XDG_DATA_HOME$XDG_DATA_DIRS
规范可以通过指定配置文件的位置作为/subdir/filename来引用此规范。这意味着:$XDG_CONFIG_DIRS
·默认配置文件应安装到/xdg/subdir/filename,默认为/etc。$sysconfdir$sysconfdir
·用户配置文件的特定版本可在 /subdir/filename中创建,同时考虑未设置的默认值。$XDG_CONFIG_HOME$XDG_CONFIG_HOME$XDG_CONFIG_HOME
·配置文件的查找应搜索与和指示的所有基本目录相关的./subdir/filename。如果环境变量未设置或为空,则应使用本规范定义的默认值。$XDG_CONFIG_HOME$XDG_CONFIG_DIRS
如果在尝试写入文件时,目标目录不存在,则应尝试使用权限创建它。如果目标目录已存在,则不应更改权限。应用程序应该准备好处理文件无法写入的情况,原因可能是目录不存在并且无法创建,或者其他任何原因。在这种情况下,它可以选择向用户显示错误消息。0700
当尝试读取文件时,如果出于任何原因,某个目录中的文件不可访问,例如,由于目录不存在,文件不存在或用户无权打开文件,则应跳过该目录中文件的处理。如果由于此原因找不到所需的文件,应用程序可能会选择向用户提交错误消息。
当一个文件位于多个基本目录下时,一种引用或应该定义其行为的规范。例如,它可以定义只应使用最重要的基本目录下的文件,或者,作为另一个示例,它可以定义用于合并来自不同文件的信息的规则。$XDG_DATA_DIRS$XDG_CONFIG_DIRS