我想让我的应用程序用户控制应用程序是否应在每次用户登录时运行,比如通过激活/停用应用程序内的复选框。(例如,Dropbox 就是这样做的。)
实现此目的的最佳方法是什么?我希望实现能够在大多数 Linux 环境中运行(即尽可能跨平台)。此外,如果用户不需要成为 root 即可更改此设置,那就太好了。
答案1
遵循 X-Desktop 规范的发行版将从系统范围目录XDG_CONFIG_DIRS/autostart
和用户主目录中的自动启动目录自动启动应用程序。只有后者才无需 root 权限即可访问。
在 HOME 中定义自动启动应用程序
1. 找到自动启动目录
我们首先需要知道自动启动目录位于何处。根据X-Desktop 规格位置应如下:
如果同一个文件名位于多个自动启动目录下,则只应使用最重要的目录下的文件。
- 示例:如果未设置 $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/ 更重要
在标准 Ubuntu 安装中$XDG_CONFIG_HOME
未定义。因此,自动启动目录位于~/.config/autostart
。位于此目录中的任何.desktop
文件都将在登录时启动相应的应用程序。
2. 如果不存在自动启动目录,则创建它
在我们填充自动启动目录之前,我们需要检查它是否存在,并且最终必须创建它。
3.定义.dektop
文件
对于 Unity 和 GNOME,最小.desktop
文件将具有以下内容以启用自动启动应用程序:
[Desktop Entry]
Type=Application
Exec=</path/to/application>
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=<name of application>
我们可能会.desktop
随我们的应用程序分发一个模板文件,根据用户选项设置将其复制到自动启动目录或从自动启动目录中删除。
定义系统范围的自动启动应用程序
为了为所有用户启用自动启动应用程序,我们需要用/etc/xdg/autostart
我们的文件填充系统范围的自动启动目录(例如).desktop
。
为了能够从用户选项中执行此操作,我们需要暂时允许 root 权限。例如,可以通过从pkexec
我们的设置对话框中调用子进程来完成此操作。
另请参阅此相关问题: