This article describes how to automatically start an application during or after boot of a Colibri module running Embedded Linux.
You can easily start your scripts or applications as daemons.
A daemon is an application that runs as a "background" process (without a terminal or user interface).
Starting with V2.x of our Linux BSP we use systemd as our init and service manager.
systemd is a system and service manager for Linux, also capable of replacing the traditional SysV init system.
A unit configuration file whose name ends in .service encodes information about a process controlled and supervised by systemd.
Service files can be found in /etc/systemd/system/ and, for distribution provided ones in /lib/systemd/system/. Services can be started or permanently enabled using the systemctl command.
The common configuration items are configured in the generic "[Unit]" and "[Install]" sections. The service specific configuration options are configured in the "[Service]" section.
Service files must include a "[Service]" section, which carries information about the service and the process it supervises.
For more information on options of [Service] section refer to: http://www.freedesktop.org/software/systemd/man/systemd.service.html#Options
Create a unit configuration file ending in .service
Copy the unit configuration file to "/etc/systemd/system" and use the systemctl tool for starting or permanently enabling the service.
Reload the systemd configuration and unit files:
root@colibri-t20:~# systemctl --system daemon-reload
Check status, start and stop a service, valid until next reboot:
root@colibri-t20:~# systemctl status
.service root@colibri-t20:~# systemctl start .service root@colibri-t20:~# systemctl stop .service
Add a service to or remove it from the ones started at boot. Note that this neither starts or stops the service but takes only effect during the next boot:
root@colibri-t20:~# systemctl enable
.service root@colibri-t20:~# systemctl disable .service
Example unit configuration file to automatically execute the (hypothetical) mydatalogger application at start up:
[Unit] Description=mydatalogger service, collects and logs data in the background After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/mydatalogger [Install] WantedBy=multi-user.target
Each time a login shell is spawned the script /etc/profile plus all scripts in /etc/profile.d are executed.
This is done for logins over a serial line, over an ssh connection and also for logins in the display manager to a graphical desktop.
/etc/profile is sourced upon login: it sets up the environment upon login and application-specific settings by sourcing any readable file in /etc/profile.d/.
Using /etc/profile is well suited to set the environment or to do some small tasks. Note that these scripts must return control in order to continue with the login.
Remove the file /etc/profile.d or the additions to /etc/profile in order to undo the automatic execution.
Add a script file in /etc/profile.d/*.sh.
Example script file:
#!/bin/sh #script file for deleting backup entries rm /home/root/*~
You can start applications automatically when you login into your Window Manager or Desktop Environment.
The lxsession session manager can start applications when the graphical environment is started. This can be achieved in two ways:
- A lxsession specific way in which the entries in the files /etc/xdg/lxsession/LXDE/autostart and in ~/.config/lxsession/LXDE/autostart are parsed.
- A generic way which many session managers support. Files in the folders /etc/xdg/autostart/ and ~/.config/autostart/ ending in .desktop get parsed and if applicable the application described therein is started.
Edit /etc/xdg/lxsession/LXDE/autostart or ~/.config/lxsession/LXDE/autostart.
Add the application to a new line in the file.
If you want that your application gets restarted should it get terminated abnormally, precede the application name with a @.
e.g at @lxterminal to /etc/xdg/lxsession/LXDE/autostart
@lxpanel --profile LXDE @pcmanfm --desktop --profile LXDE @xscreensaver -no-splash @lxterminal
Note that this file is not a shell script and therefore shell acrobatics like redirectors and pipes are not allowed. If required this can be worked around by spawning a custom shell script which in turn can support the full shell feature set.
Creating a .desktop file.
Adding the .desktop file to autostart.
Note that in /usr/share/applications/ a number of .desktop files already exists which can be copied into the autostart folder
If you want to execute lxterminal automatically at startup.
Create a terminal.desktop in /etc/xdg/autostart/
Add some keys like:
File content with the entries should be as follows:
[Desktop Entry] Name=LXTerminal Type=Application Exec=lxterminal Terminal=false
Save the .desktop file.
Note: A graphical file manager will list .desktop files not with their file name but rather with the value of the key "Name". e.g. in the example above "LXTerminal".
To disable the automatic start of an application, just either remove the respective .desktop file from /etc/xdg/autostart/ and/or .config/autostart/ or add the key NotShowIn=LXDE; to the desktop file. Alternatively use the graphical front end 'LXDE Menu'/Preferences/'Desktop Session Settings' and untick the 'Enabled' checkbox.