Da ich oft in meinen Tutorials auf die einzelnen Methoden zum automatischen Starten von Scripten und Anwendungen nach einem Reboot des Raspberry Pi eingegangen bin möchte ich heute die verschiedenen Autostart-Methoden nochmal zusammenfassen und in den FAQs veröffentlichen. Es gibt fünf gängige Methoden um Programme, Dienste und Scripte beim Booten des Raspberry Pi automatisch starten zu lassen.
Inhaltsverzeichnis
Die Auswahl der für euch geeigneten Methode richtet sich danach zu welchem Zeitpunkt der automatische Start durchgeführt werden soll, bei den Methoden gibt es Unterschiede wann das hinterlegte Programm / Script ausgeführt wird.
- Die in /etc/rc.local hinterlegten „Autostarts“ werden am Ende des Startvorganges eures Raspberry Pi ausgeführt
- Init Scripte liegen unter /etc/rc*/ und werden beim Startvorgang abhängig vom eingestellten Runlevel gestartet
- .Desktop Dateien liegen im Home eines jeweiligen Benutzers und werden bei nach der Anmeldung am grafischen Desktop ausgeführt
- .bashrc Dateien liegen ebenfalls im Home eines Benutzers und werden beim jedem Anmelden via SSH oder Konsole ausgeführt
Für einfache Skripte und Befehle eignet sich die Datei rc.local, da hier weder auf Abhängigkeiten (zum Beispiel zum Netzwerk) noch sonstiges geachtet werden muss. Die Verwendung von Init Scripten wird meist für komplexere Software und Dienste verwendet und die „sauberste“ Lösung, allerdings auch etwas kompliziert. Die Autostart Methode via .desktop oder .bashrc verwendet man üblicherweise nur wenn eine Script oder Programm nur ausgeführt werden soll wenn sich ein bestimmter Benutzer anmeldet.
Wichtig ist, falls ihr Scripte via Autostart aufruft, das diese auch das Recht haben ausgeführt zu werden (chmod +x MeinScript.sh).
Init-Script Autostart
Init-Scripts werden abhängig vom Runlevel ausgeführt. Für den Startvorgang eines Linux Systems wird das init-Programm verwendet, es ist für die ordnungsgemäße Initialisierung des Systems verantwortlich. Beim Start des Systems werden verschiedene „Runlevel“ durchlaufen. Die Runlevel sind vergleichbar mit der Gangschaltung eines Autos. Man schaltet beim „starten“ nacheinander die Gänge hoch, zum „stoppen“ schaltet man wieder runter. Details zu den Runleven gibt zum Beispiel im Ubuntu Wiki.
Ein Init Script wird im Verzeichnis /etc/init.d/ angelegt und hat Methoden für start, stop, restart oder auch status eingetragen, Vorteil ist das ein Programm nicht nur beim booten des RasPi gestartet wird sondern beim runterfahren oder neustarten auch entsprechend behandelt wird. Im laufenden Betrieb ist mit „status“ jeder Zeit der aktuelle Zustand abfragbar.
In diesem Beispiel erstellen wir ein Init Script mit dem namen „Mein Programm“. Ein umfangreicheres beispielt gibt es auf eurem RasPi unter „/etc/init.d/skeleton“.
1 |
sudo nano /etc/init.d/MeinProgramm |
Der Inhalt sieht wie folgt aus, gespeichert wird mit STRG+X, Y und ENTER.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#! /bin/sh ### BEGIN INIT INFO # Provides: MeinProgramm # Required-Start: # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Starts & Stops My Programm # Description: Starts & Stops My Programm ### END INIT INFO #Switch case fuer den ersten Parameter case "$1" in start) #Aktion wenn start uebergeben wird echo "Starte MeinProgramm" ;; stop) #Aktion wenn stop uebergeben wird echo "Stoppe MeinProgramm" ;; restart) #Aktion wenn restart uebergeben wird echo "Restarte MeinProgramm" ;; *) #Standard Aktion wenn start|stop|restart nicht passen echo "(start|stop|restart)" ;; esac exit 0 |
Nun fügen wir das Init-Script hinzu und setzen noch die richtigen Dateirechte.
1 2 3 |
cd /etc/init.d/ sudo chmod 755 MeinProgramm sudo update-rc.d MeinProgramm defaults |
Zum entfernen wird folgender Befehl verwendet (sudo update-rc.d -f MeinProgramm remove).
Autostart mit rc.local
Möchte man eigene Dienste, eigene Skripte oder Programme beim Systemstart automatisch starten kann man diese in die Datei /etc/rc.local eintragen. Hierbei muss sudo nicht verwendet werden, Einträge in dieser Datei werden immer mit Root Rechten ausgeführt, rc.local startet Dienste und Scripte nur außerhalb der grafischen Oberfläche automatisch.
Die Datei rc.local kann zum Beispiel mit dem Editor Nano bearbeitet werden,
1 |
sudo nano /etc/rc.local |
Hier ein paar Beispiele, am Ende der Datei muss immer exit 0 stehen, eure Einträge müssen daher davor gesetzt werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. /usr/bin/tool # ein Programm /usr/local/bin/script.sh # ein Shellskript /etc/init.d/dienst start # ein Dienst exit 0 |
LXDE Autostarts
Raspbian kann wahlweise auf eine Kommandozeile oder direkt in die grafische Oberfläche booten, die Einstellung kann via raspi-config verändert werden. Der Standard Desktop bei Raspbian ist LXDE (Lightweight X11 Desktop Environment). Auch beim Starten bzw. Anmelden eines Benutzers am Desktop können Autostarts ausgeführt werden, beim Desktop hat man hierbei die Wahl das für einen einzelnen Benutzer oder für alle Benutzer auf dem System zu konfigurieren. Die Dateien sind jeweils in den folgenden Pfaden zu finden und können mit nano editiert werden
- Für alle Benutzer: /etc/xdg/lxsession/LXDE-pi/autostart
- Für einen bestimmten Benutzer: ~/.config/lxsession/LXDE/autostart
Hier ein paar Beispiele für Autostarts: Ein Shell Script, der Browser Midori und ein Python Script
1 2 3 4 |
@lxterminal -e /pfad/zu/einem-script.sh @midori @python mein-python-script.py |
Jede Zeile enthält ein Kommando das ausgeführt wird, wenn einem Befehl mit einem @ beginnt, wird dieser Befehl automatisch erneut ausgeführt wenn das Programm crashed.
Autostarts mit .desktop Dateien
Eine gängige Methode automatische Starts von Programmen für einen Benutzer einzurichten ist die Verwendung von .desktop Dateien. Diese befinden sich im Home Verzeichnis des jeweiligen Benutzers und können ebenfalls mit einem Editor angelegt werden. Der Dateiname kann beliebig sein die Endung .desktop muss aber vorhanden sein.
1 |
sudo nano ~/.config/autostart/MeinAutostart.desktop |
Eine Desktop-Datei hat folgendes Format:
1 2 3 4 5 6 |
[Desktop Entry] Name=Autostart-Script Comment=Kommentar Type=Application Exec=Mein-Script.sh Terminal=false |
Mit dem Parameter Terminal true/false kann das Terminal-Fenster deaktiviert werden sodass dieses nicht angezeigt wird.
Cronjob für Autostarts
Cron bietet einen speziellen Job Typ für Aufgaben die direkt nach einen (neu)start eures Raspberry Pi ausgeführt werden sollen. Cronjobs könnt ihr entweder für euren Benutzer oder Systemweit anlegen. Zur Anlage eines Systemweiten Jobs muss dieser in /etc/crontab eingetragen werden, zum Erstellen eines Benutzer-Jobs reicht es contab -e aufzurufen.
1 |
crontab -e |
Ein Beispiel zum Ausführen eines Scripts:
1 |
@reboot /home/pi/MeinScript.sh |
Das vorangestellte @reboot definiert das dieser Befehl nach jedem (neu)start einmal automatisch ausgeführt wird.