Search by Tags

How to Autorun application at the start up in Linux

 
Applicable for

Compare with Revision


Subscribe for this article updates

Purpose

This article describes how to automatically start an application during or after boot of a Colibri module running Embedded Linux.

Daemons

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).

Systemd

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.
http://www.freedesktop.org/wiki/Software/systemd/
http://www.freedesktop.org/software/systemd/man/systemd.html

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

  • Procedure

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.

  • Using the systemctl command

From: http://www.freedesktop.org/software/systemd/man/systemctl.html
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

Shells

/etc/profile

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.

  • Procedure

Add a script file in /etc/profile.d/*.sh.

Example script file:

#!/bin/sh
#script file for deleting backup entries
rm /home/root/*~

Graphical

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.

http://wiki.lxde.org/en/LXSession

LXSession Autostart file

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.

.desktop files

Creating a .desktop file.
Adding the .desktop file to autostart.

http://standards.freedesktop.org/desktop-entry-spec/latest/
Note that in /usr/share/applications/ a number of .desktop files already exists which can be copied into the autostart folder

For Example:
If you want to execute lxterminal automatically at startup.
Create a terminal.desktop in /etc/xdg/autostart/ .
Add some keys like:

  • [Desktop Entry]. (Must be the first line of every desktop file and is the section header to identify the block of key value pairs associated with the desktop. Necessary for the desktop to recognize the file correctly.)
  • Name of the application.(The name of the Desktop Entry group - should be unique on the system )
  • Type of the application. (Possible values are "Application", "Link" or "Directory".)
  • Exec filename of the application plus optionally arguments.
  • Terminal (Describes whether the application should run in a terminal.)

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.