「Linux」- 应用程序自启动,自动启动脚本

  CREATED BY JENKINSBOT

问题描述

该笔记将记录:在系统中发生某些事件时,如何自动执行脚本,或者如何启动桌面应用程序;

解决方案

文章主要的内容参考了ArchWiki/Autostaring中的介绍,然后加入了一些补充说明;

在系统启动和关机时

使用systemd服务;

在用户登入和登出时

可以使用systemd/User服务;

时间事件

按日期、时间进行周期的执行:

  • systemd/Timers
  • Cron

在某个日期和时间执行一次:

  • systemd/Timers
  • at

systemd/Timers 中涵盖了 Cron 及 at 的功能;

在文件系统事件发生时

通常使用 inotify 实现,由下面这些工具:

  • inotify-tools (see some examples)
  • Incron
  • fswatch

在 SHELL 的登入或登出时

这个可以通过配置命令行 SHELL 的配置文件实现;

在 Xorg 启动时

可以通过下面两个配置文件实现:

  • xinitrc,如果你使用 xinit 手动启动 Xorg;
  • xprofile,如果你使用了显示管理器;

在桌面环境启动时

大多数桌面环境实现了XDG Autostart,如果可以参考相关 ArchWiki 中桌面环境的 Autostart 部分的介绍:

在窗口管理器启动时

可以参考桌面管理器在 ArchWiki 中的文章,文章中的 Autostart 部分中有相关的介绍:

我现在使用的窗口管理器是 FVWM,但是没有 Arch 中没有相关的 Autostart 介绍。可以通过 Fvwm 中的 InitFunction 实现应用的自启动;

关于使用 XDG 自动启动应用的问题

XDG 自启动规范中定义了一种方法,用于在桌面环境启动、可移动介质装入时,自动启动桌面条目(通常.desktop 文件)。这种方法需要将桌面条目放置在特定的目录中;

注意,虽然 XDG 工具包中提供了很多命令,但是这些命令中并不包含自启动脚本。什么意思呢?就是说对于 XDG 自启动,需要桌面环境的支持。XDG 只是一个统一的规范。XDG 自启动规范只是定义了那些目录中的存放的桌面条目应该被启动,但并不负责启动;

如果你的桌面环境不支持 XDG 自启动规范,则需要安装独立的应用来进行程序的自启动。比如,dex,dapper,fbautostart。这些应用也不会自动启动,仍需要你配置它们来进行启动,但是它们兼容 XDG 自启动规范,启动这些应用后,它们会去启动特定目录中的 XDG 条目;

在 FVWM 中,自启动桌面应用

目前,我使用的办法是使用 dex 来启动 XDG 规范中特定目录中的桌面条目。通过在 FVWM 的配置文件中加入如下配置:

AddToFunc InitFunction
+ I Exec exec dex -a

在初始化的时候启动应用;

参考文献

ArchWiki/Autostaring
ArchWiki/XDG Autostart

更新日志

06/14/2018 创建文章,解决 FVWM 中几个应用自启动的问题;