User Tools

Site Tools


linux:ytvi_autostart_in_linux

YTVI Autostart in Linux

Autostart-Dateien und Mechanismen unter Debian/Ubuntu

Übersicht

Datei / Mechanismus Startzeitpunkt Benutzerbereich Kontext (Konsole oder X) Ruft andere Skripte auf Besonderheiten und Hinweise Beispiele für typische Einträge
/etc/profile Login-Shell Global (Alle Benutzer) Konsole (Bash/Zsh) Ruft /etc/profile.d/* auf Diese Datei wird bei der Anmeldung eines Benutzers (Login-Shell) ausgeführt. Sie wird bei Terminal-Anmeldung oder SSH verwendet, aber nicht bei X-Session-Starts. Standardmäßig für systemweite Umgebungsvariablen geeignet. Setzen von systemweiten Umgebungsvariablen (export PATH=…)
~/.profile Login-Shell Spezifisch für den Benutzer Konsole und X Ruft ~/.bash_profile oder ~/.bashrc auf (abhängig von der Konfiguration) Wird bei der Anmeldung mit einer Login-Shell oder bei X-Anmeldung verwendet. Wird oft verwendet, um benutzerspezifische Umgebungsvariablen zu setzen. In Bash ist .profile die Standarddatei für Login-Shells. Wird von Bash, Dash und möglicherweise auch X-Session gelesen. * Setzen von benutzerspezifischen Aliases und Umgebungsvariablen
* Starten von Programmen (eval $(ssh-agent -s))
~/.bashrc Nicht-Login-Shell
Login-Shell (indirekt über ~/.profile oder ~/.bash_profile)
Spezifisch für den Benutzer Konsole (Bash) Wird durch ~/.profile aufgerufen, wenn es eine Login-Shell ist Diese Datei wird bei jedem Start einer neuen nicht-Login-Bash-Shell ausgeführt. Üblicherweise für Terminal-Fenster und interaktive Shells verwendet, jedoch nicht für grafische Sitzungen oder Login-Shells. Aliases (alias ll='ls -la') und benutzerspezifische Funktionen
~/.bash_profile Login-Shell Spezifisch für den Benutzer Konsole (Bash) Ruft ~/.bashrc auf Wird bei der Anmeldung mit einer Login-Shell ausgeführt. Diese Datei wird verwendet, um benutzerspezifische Umgebungsvariablen zu setzen. Häufig wird hier die ~/.bashrc referenziert, um deren Inhalt auch für Login-Shells verfügbar zu machen. * Aufruf von ~/.bashrc (if [ -f ~/.bashrc ]; then . ~/.bashrc; fi)
* Setzen von benutzerspezifischen Umgebungsvariablen
~/.zshrc Nicht-Login-Shell Spezifisch für den Benutzer Konsole (Zsh) - Ähnlich wie .bashrc, jedoch für die Zsh-Shell. Wird jedes Mal ausgeführt, wenn eine Zsh-Instanz gestartet wird (nicht-Login-Shell). Aliases und benutzerspezifische Zsh-Einstellungen
/etc/rc.local Systemstart (letzte Phase) Global (Alle Benutzer) Nicht spezifiziert (Systemebene) - Diese Datei wird in der letzten Phase des Systemstarts ausgeführt. Sie eignet sich, um systemweite Dienste oder Befehle auszuführen. Seit neueren Versionen von Debian/Ubuntu kann es sein, dass /etc/rc.local standardmäßig deaktiviert ist. Man kann sie manuell aktivieren. Wird als root ausgeführt, da es Teil des Systemstarts ist. Starten von benutzerdefinierten Diensten (/usr/bin/mein_dienst &)
/etc/X11/Xsession Start der X-Sitzung Global (Alle Benutzer) X (Grafische Umgebung) Ruft benutzerspezifische ~/.xsession auf (falls vorhanden) Diese Datei wird verwendet, um die X-Session (Grafiksession) zu initialisieren. Sie ist ein zentraler Punkt für die Konfiguration der X-Sitzung und wird vor der Ausführung von Desktop-Umgebungen (wie GNOME oder KDE) aufgerufen. * Setzen von Umgebungsvariablen für X (export GTK_THEME=…)
* Deaktivieren des Bildschirmschoners (xset s off -dpms)
~/.xinitrc Start von X via startx Spezifisch für den Benutzer X (Grafische Umgebung) - Diese Datei wird verwendet, wenn ein Benutzer den X-Server mit dem Befehl startx startet. Typischerweise für Benutzer, die keine Display-Manager wie gdm oder lightdm verwenden. * Starten des Fenstermanagers (exec i3)
* Deaktivieren des Bildschirmschoners (xset s off -dpms)
~/.xsession Login über Display-Manager Spezifisch für den Benutzer X (Grafische Umgebung) - Diese Datei wird ausgeführt, wenn der Benutzer sich über einen Display-Manager (z.B. gdm oder lightdm) anmeldet. Sie ermöglicht benutzerspezifische Konfigurationen für die grafische Session. Setzen von benutzerspezifischen Umgebungsvariablen
/etc/init.d/* (SysV) Systemstart Global (Alle Benutzer) Nicht spezifiziert (Systemebene) - Wird verwendet, um systemweite Dienste zu starten. Veraltet zugunsten von systemd, aber immer noch in Verwendung bei älteren Systemen. Starten eines systemweiten Dienstes (/etc/init.d/apache2 start)
systemd Units (/etc/systemd/system/*) Systemstart / Benutzeranmeldung Global oder Benutzerabhängig (je nach Konfiguration) Nicht spezifiziert (Systemebene) Kann andere Units oder Skripte per ExecStart aufrufen Systemd ist der aktuelle Standard für den Dienststart auf modernen Debian/Ubuntu-Systemen. Man kann eigene Units definieren, die Programme oder Skripte bei Systemstart oder bei Benutzeranmeldungen ausführen. Definieren eines Dienstes (ExecStart=/usr/bin/mein_dienst)
~/.config/autostart/*.desktop Login der grafischen Session Spezifisch für den Benutzer X (Grafische Umgebung) - Diese Methode wird verwendet, um Anwendungen automatisch beim Start der grafischen Desktop-Umgebung (wie GNOME oder KDE) zu starten. Dateien im .desktop-Format definieren, welche Programme gestartet werden sollen. Starten einer Anwendung (Exec=/usr/bin/firefox)
/etc/xdg/autostart/*.desktop Login der grafischen Session Global (Alle Benutzer) X (Grafische Umgebung) - Ähnlich wie ~/.config/autostart, aber systemweit für alle Benutzer. Diese Methode wird ebenfalls von Desktop-Umgebungen genutzt, um Programme automatisch zu starten. Starten einer systemweiten Anwendung (Exec=/usr/bin/gnome-shell)

Hinweise

1. Unterschied Login-Shell vs. Nicht-Login-Shell:

  1. Eine Login-Shell ist die erste Shell, die gestartet wird, wenn ein Benutzer sich im System anmeldet (z.B. über SSH oder die Konsole).
  2. Eine Nicht-Login-Shell wird beispielsweise durch das Starten eines Terminal-Fensters aus einer bestehenden Sitzung heraus geöffnet.

2. Global vs. Benutzerspezifisch:

  1. Dateien unter /etc/ sind normalerweise global, d.h. sie gelten für alle Benutzer.
  2. Dateien in den Home-Verzeichnissen (~/.bashrc, ~/.profile etc.) gelten nur für den spezifischen Benutzer.

3. Grafische Umgebung vs. Konsole:

  1. Einige dieser Dateien sind speziell für die grafische Umgebung (X) gedacht (~/.xinitrc, ~/.xsession, ~/.config/autostart/).
  2. Andere wiederum sind speziell für Shell-Sitzungen (Login und Nicht-Login) gedacht (~/.bashrc, /etc/profile).

4. Systemd für modernere Verwaltung:

  1. Neuere Versionen von Debian/Ubuntu setzen hauptsächlich auf systemd, um Startprozesse zu verwalten. Man kann dafür eigene “Service”-Dateien erstellen, um Programme beim Systemstart oder bei Benutzeranmeldungen auszuführen.

5. .desktop-Dateien für die grafische Umgebung:

  1. .desktop-Dateien, die in den Autostart-Ordnern (~/.config/autostart/ oder /etc/xdg/autostart/) gespeichert werden, dienen dazu, Anwendungen automatisch beim Login in einer grafischen Session zu starten. Diese Methode ist besonders praktisch für Anwendungen mit GUI.

zeitlichen Abfolge

Systemstart
|
|-- `/etc/init.d/*` (SysV) oder `systemd` Units (`/etc/systemd/system/*`)
|   |
|   |-- `/etc/rc.local` (letzte Phase des Systemstarts)
|
Benutzeranmeldung (Login-Shell)
|
|-- `/etc/profile`
|   |
|   |-- `/etc/profile.d/*`
|
|-- `~/.profile`
    |
    |-- Ruft ggf. `~/.bash_profile` oder `~/.bashrc` auf
        |-- ~/.bash_profile ruft ggf. ~/.bashrc auf     
Start von nicht-Login-Shell (z.B. neues Terminal)
|
|-- `~/.bashrc` (für Bash)
|-- `~/.zshrc` (für Zsh)
Start der grafischen Umgebung (X-Session)
|
|-- `/etc/X11/Xsession`
|   |
|   |-- Ruft ggf. `~/.xsession` auf
|
|-- `~/.xinitrc` (bei Start mit `startx`)
|-- `~/.xsession` (bei Anmeldung über Display-Manager)
|
|-- `/etc/xdg/autostart/*.desktop` (systemweit für alle Benutzer)
|-- `~/.config/autostart/*.desktop` (benutzerspezifisch)

Beispiele

Skript systemweit beim Booten ausführen

Verwenden Sie /etc/rc.local oder erstellen Sie eine systemd Unit, um ein Skript auszuführen, bevor Benutzer sich anmelden.

Umgebungsvariablen für alle Benutzer setzen

Verwenden Sie /etc/profile, wenn es systemweite Variablen betrifft, oder ~/.profile für spezifische Benutzer.

Programm für grafische Sitzung eines Benutzers starten

Platzieren Sie eine .desktop-Datei in ~/.config/autostart/, um sicherzustellen, dass das Programm automatisch beim Anmelden an die grafische Benutzeroberfläche gestartet wird.

SSH Login

→ Login-Shell, weil du dich neu am System anmeldest

Systemweite Dateien

  • /etc/profile: Diese Datei wird zuerst ausgeführt und ist für systemweite Einstellungen gedacht. Sie wird bei jeder neuen Login-Shell (wie SSH) geladen.
  • /etc/profile.d/*: Skripte und Einstellungen, die sich im Verzeichnis /etc/profile.d/ befinden, werden von /etc/profile aufgerufen und ausgeführt.

Benutzerspezifische Dateien

  • ~/.profile oder ~/.bash_profile: Danach wird eine dieser benutzerspezifischen Dateien ausgeführt, je nachdem, welche vorhanden ist. Häufig ruft ~/.profile die ~/.bashrc auf, um die Einstellungen für die Nicht-Login-Shell ebenfalls zu laden.
  • ~/.bashrc (indirekt): Obwohl ~/.bashrc normalerweise für Nicht-Login-Shells verwendet wird, wird sie oft über ~/.profile oder ~/.bash_profile eingebunden, sodass ihre Einstellungen auch bei Login-Shells angewendet werden. Dies stellt sicher, dass alle benutzerspezifischen Einstellungen, wie Aliases oder Funktionen, auch beim SSH-Login verfügbar sind.

Autostart Log

  • in /home/pi eine Datei anlegen
    nano /home/pi/log.sh
    #!/bin/bash
     
    # Log-Datei
    LOG_FILE="/tmp/startup_log.txt"
     
    # Überprüfe, ob das Skript als Root ausgeführt wird
    if [ "$EUID" -eq 0 ]; then
      # Überprüfe, ob die Logdatei existiert, falls nicht, erstelle sie und setze Berechtigungen
      if [ ! -f "$LOG_FILE" ]; then
        touch "$LOG_FILE"
        chmod 666 "$LOG_FILE"
        echo "$(date '+%Y-%m-%d %H:%M:%S.%3N') - Log file created and permissions set to 666 by root" >> "$LOG_FILE"
      fi
    fi
     
    # Überprüfe, ob ein Parameter übergeben wurde
    if [ -z "$1" ]; then
      echo "Usage: $0 'log message'"
      exit 1
    fi
     
    # Log-Daten sammeln
    TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S.%3N')
    USER=$(whoami)
    HOSTNAME=$(hostname)
    IP_ADDRESS=$(hostname -I)
    LOAD=$(uptime | awk '{print $8,$9,$10}')  # CPU-Last
    MEMORY=$(free -m | awk 'NR==2{printf "%s/%sMB (%.2f%%)", $3,$2,$3*100/$2 }')  # RAM-Auslastung
    PID=$$
    #PPID=$PPID  # Elternprozess-ID
    GROUPS=$(groups $USER)
    OS_KERNEL=$(uname -sr)
    UPTIME=$(uptime -p)
    DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}')
    WORK_DIR=$(pwd)
    TTY=$(tty)
     
    # Log-Eintrag schreiben
    echo "$TIMESTAMP - $USER@${HOSTNAME} - Mem: $MEMORY - PPID: $PPID - WDir: $WORK_DIR - TTY: $TTY > $1" >> $LOG_FILE
  • sudo chmod 666 /home/pi/log.sh
  • Ergebnis
    root@FriemelKiste:~# cat /tmp/startup_log.txt
    2024-10-03 23:33:36.740 - Log file created and permissions set to 666 by root
    2024-10-03 23:33:36.744 - root@FriemelKiste - Mem: 93/973MB (9.56%) - PPID: 1 - WDir: / - TTY: not a tty > Service Start
    2024-10-03 23:33:36.740 - root@FriemelKiste - Mem: 93/973MB (9.56%) - PPID: 2320 - WDir: /root - TTY: not a tty > Reboot aus Cron -e
    2024-10-03 23:33:52.212 - root@FriemelKiste - Mem: 102/973MB (10.48%) - PPID: 2552 - WDir: / - TTY: not a tty > /etc/rc.local
    2024-10-03 23:33:53.734 - pi@FriemelKiste - Mem: 105/973MB (10.79%) - PPID: 2622 - WDir: /home/pi - TTY: /dev/tty1 > /etc/profile -> All User
    2024-10-03 23:33:54.082 - pi@FriemelKiste - Mem: 107/973MB (11.00%) - PPID: 2622 - WDir: /home/pi - TTY: /dev/tty1 > /home/pi/.bashrc -> pi
    2024-10-03 23:33:58.945 - root@FriemelKiste - Mem: 130/973MB (13.36%) - PPID: 2781 - WDir: /root - TTY: /dev/pts/0 > /etc/profile -> All User
    2024-10-03 23:33:59.035 - root@FriemelKiste - Mem: 132/973MB (13.57%) - PPID: 2781 - WDir: /root - TTY: /dev/pts/0 > ROOT /.bashrc
    2024-10-03 23:33:59.116 - root@FriemelKiste - Mem: 136/973MB (13.98%) - PPID: 2781 - WDir: /root - TTY: /dev/pts/0 > .profile -> root
    2024-10-03 23:34:04.508 - pi@FriemelKiste - Mem: 213/973MB (21.89%) - PPID: 3023 - WDir: /home/pi - TTY: /dev/pts/1 > /home/pi/.bashrc -> pi
    2024-10-03 23:35:13.225 - pi@FriemelKiste - Mem: 217/973MB (22.30%) - PPID: 3105 - WDir: /home/pi - TTY: /dev/pts/2 > /etc/profile -> All User
    2024-10-03 23:35:13.304 - pi@FriemelKiste - Mem: 222/973MB (22.82%) - PPID: 3105 - WDir: /home/pi - TTY: /dev/pts/2 > /home/pi/.bashrc -> pi
    2024-10-03 23:35:13.380 - pi@FriemelKiste - Mem: 234/973MB (24.05%) - PPID: 3105 - WDir: /home/pi - TTY: /dev/pts/2 > .profile -> Pi
    2024-10-03 23:35:33.964 - pi@FriemelKiste - Mem: 130/973MB (13.36%) - PPID: 2622 - WDir: /home/pi - TTY: /dev/tty1 > .profile -> Pi
    2024-10-03 23:42:53.668 - root@FriemelKiste - Mem: 123/973MB (12.64%) - PPID: 3374 - WDir: /root - TTY: /dev/pts/1 > /etc/profile -> All User
    2024-10-03 23:42:53.744 - root@FriemelKiste - Mem: 123/973MB (12.64%) - PPID: 3374 - WDir: /root - TTY: /dev/pts/1 > ROOT /.bashrc
    2024-10-03 23:42:53.816 - root@FriemelKiste - Mem: 135/973MB (13.87%) - PPID: 3374 - WDir: /root - TTY: /dev/pts/1 > .profile -> root
    2024-10-03 23:42:58.707 - root@FriemelKiste - Mem: 221/973MB (22.71%) - PPID: 3654 - WDir: /root - TTY: /dev/pts/2 > ROOT /.bashrc
linux/ytvi_autostart_in_linux.txt · Last modified: 2024/10/13 08:03 by dominik

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki