Umgebungsvariable/Dateien

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. einen Terminal öffnen

  2. eine Datei bearbeiten

  3. mit Root-Rechten arbeiten

Inhaltsverzeichnis
  1. Wo soll ich als Administrator was ändern?
  2. Grafischer Login
    1. Für alle Benutzer
    2. Für einen einzelnen Benutzer
    3. Desktop-abhängig
  3. Environment einzelner Dienste
  4. Environment einzelner oder aller Benutzer
  5. Links

Dieser Artikel beschäftigt der Definition von Umgebungsvariablen über Konfigurationsdateien. Typische Anwendungsfälle werden im Unterartikel Umgebungsvariable/typische Anwendungsfälle aufgeführt.

Wo soll ich als Administrator was ändern?

Wenn man möchte, dass beim Start eines Programms oder für einen Benutzer immer eine bestimmte Umgebungsvariable gelten soll, dann kann man sie in eine Konfigurationsdatei schreiben. Diese Konfigurationsdateien und auch deren Syntax sind abhängig vom jeweiligen Programm und Einsatzzweck.

Um für den konkreten Fall die am besten geeignete Konfigurationsdatei zu finden, helfen folgende Kontrollfragen.

Nach dem Bearbeiten einer Konfigurationsdatei für einen Nutzer sollte sich der Nutzer einmal ab und dann wieder neu anmelden, damit die Umgebungsvariablen greifen. Bei der Änderung an einer systemweiten Datei sollte man das System neu starten.

Grafischer Login

Für alle Benutzer

Will man für alle Benutzer eines grafischen Systems eine Umgebungsvariable setzen, benötigt man eine neue Datei im Verzeichnis /etc/X11/Xsession.d/ [2][3], die sinnvollerweise vor der individuellen Datei ~/.xsessionrc ausgeführt wird, z.B. 40custom_environment. Die Reihenfolge der Ausführung ergibt sich aus den Namen und kann über die beiden obligatorischen Ziffern am Anfang der Dateinamen gesteuert werden. Bei der Namenswahl sollte man die Vorschläge aus der Dokumentation (Manpage von Xsession) beachten.

Für einen einzelnen Benutzer

Will man sich als Benutzer eigene Umgebungsvariablen setzen, die nur innerhalb einer grafischen Oberfläche greifen, müssen diese in der Datei ~/.xsessionrc gesetzt werden. Diese überschreiben Variablen aus ~/.profile, ersetzen diese aber nicht auf der Konsole.

Syntax:

echo export FOO=bar >> ~/.xsessionrc 

Desktop-abhängig

Zusätzlich gibt es, abhängig vom verwendeten Desktop, folgende Konfigurationsmöglichkeiten:

Problembehebung

Die Variable LD_LIBRARY_PATH lässt sich nicht auf diese Weise setzen. In diesem Fall sollte man eine der anderen hier vorgestellten Methoden nutzen oder ein Wrapper-Skript schreiben, welches die Variable vor Ausführen des jeweiligen Programms setzt.

Environment einzelner Dienste

Umgebungsvariablen für einzelne Dienste werden in der entsprechenden systemd-Unit bzw. in der dafür vorgesehenen Konfigurationsdatei eingetragen. Einige Dienste und Programme nutzen Konfigurationsdateien in /etc/default/DIENST . Hierzu gehören beispielsweise die Programme rsync , GRUB 2 oder auch der Firewall-Dienst ufw.

Ein Blick in die Dokumentation des jeweiligen Programms oder der zugehörigen Umgebungsvariablen für die systemd-Unit kann hier schnell für Klarheit sorgen.

Sollte in der Unit keine Konfigurationsdatei angegeben sein, kann man die bestehende Unit bearbeiten.

Environment einzelner oder aller Benutzer

Je nach Modus der Shell (also der Anmeldemethode) werden unterschiedliche Dateien ausgewertet.

In der folgenden Tabellen sind die Dateien für die Bash aufgeführt:

Initialisierungsdateien für Bash
Programm: Bash (seit Version 4.2)
Shell-Modus interaktive Login-Shell nicht-interaktive Login-Shell interaktive nicht-Login-Shell nicht-interaktive nicht-Login-Shell
Anpassung für einzelne Benutzer in
~/.profile Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-ok.png
~/.bashrc siehe Hinweisbox siehe Hinweisbox Wiki/Icons/Tango/dialog-ok.png
~/.bash_logout Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-ok.png
~/.config/environment.d/*.conf seit Ubuntu 17.10 seit Ubuntu 17.10
Anpassung für alle Benutzer in
/etc/security/pam_env.conf Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-ok.png
/etc/environment Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-ok.png
/etc/environment.d/*.conf seit Ubuntu 17.10 seit Ubuntu 17.10
/etc/profile.d/*.sh Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-ok.png
/etc/bash.bashrc Wiki/Icons/Tango/dialog-ok.png Wiki/Icons/Tango/dialog-ok.png
/etc/default/locale nur zum Setzen der Standard-Bediensprache des Systems
-> systemd/localectl
nur zum Setzen der Standard-Bediensprache des Systems
-> systemd/localectl
nur zum Setzen der Standard-Bediensprache des Systems
-> systemd/localectl
nur zum Setzen der Standard-Bediensprache des Systems
-> systemd/localectl

Hinweis:

* Die Dateien ~/.bash_profile und ~/.bash_login existieren standardmäßig nicht. Man sollte sie auch nicht anlegen, da sonst Einträge in ~/.profile ignoriert werden.

  • Die Datei /etc/profile sollte nicht verwendet werden. Stattdessen sollte eine Datei unter /etc/profile.d angelegt werden.

Experten-Info:

Für manche Terminal-erfahrene Benutzer ist es irritierend, dass unter Ubuntu standardmäßig die Datei ~/.profile nicht ausgewertet wird. Um das "normale" Verhalten zu bekommen, kann man im Kontextmenü (rechte Maustaste rechte Maustaste) des GNOME-Terminals das "momentan verwendete Profil bearbeiten" und im Reiter "Titel und Befehl" die Option "Befehl als Login-Shell starten" anwählen.

Es ist auch möglich, die Einträge in ~/.bashrc vorzunehmen. Dies ist jedoch in der Regel unnötig aufwändig, da dort enthaltene Befehle bei jedem Start einer Bash ausgeführt werden. Da die Environment-Variablen aber vererbt werden, ist dies nur einmal bei der Login-Shell notwendig, alle darunter gestarteten Bash-Prozesse erben dann die Einstellungen von dieser.