Dateien
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Dieser Artikel beschäftigt sich mit 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.
Soll der beabsichtige Effekt ohne einen angemeldeten Benutzer wirksam sein (betrifft also das System selbst oder laufende Dienste)
Ist dabei nur ein bestimmter Dienst oder ein einzelnes Programm betroffen → Environment einzelner Dienste oder
Sind alle Dienste und Programme betroffen? → systemweite Umgebungsvariablen setzen
In manchen Fällen kann es auch notwendig sein, Umgebungsvariablen für den Linux-Kernel zu setzen. → dauerhaufte Konfiguration eines Systems
Betrifft der beabsichtige Effekt nur angemeldete Benutzer bzw. deren Anmeldung?
Soll dies nur für grafische Logins gelten? → grafischer Login oder
auch andere Logins betreffen? → Environment einzelner oder aller Benutzer
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:
GDM3: /usr/share/gdm/env.d/* (für alle Benutzer)
GNOME: ~/.gnomerc wird über /etc/X11/Xsession.d/55gnome-session_gnomerc ausgeführt. (für einzelne Benutzer)
LightDM: keine Möglichkeit zur Definition von Umgebungsvariablen für Benutzer bekannt.
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 | ||||
~/.bashrc | siehe Hinweisbox | siehe Hinweisbox | ||
~/.bash_logout | ||||
~/.config/environment.d/*.conf | seit Ubuntu 17.10 | seit Ubuntu 17.10 | ||
Anpassung für alle Benutzer in | ||||
/etc/security/pam_env.conf | ||||
/etc/environment | ||||
/etc/environment.d/*.conf | seit Ubuntu 17.10 | seit Ubuntu 17.10 | ||
/etc/profile.d/*.sh | ||||
/etc/bash.bashrc | ||||
/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) 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.
Links¶
Umgebungsvariable allgemein
Standards: POSIX.1-2008 is simultaneously IEEE Std 1003.1™-2008 and The Open Group Technical Standard Base Specifications, Issue 7. The 2016 edition incorporates Technical Corrigendum 1 and Technical Corrigendum 2 addressing problems discovered since the approval of the 2008 edition: POSIX.1-2008/IEEE Std 1003.1™-2008/Open Group Technical Standard Base Specifications 🇬🇧
Init-Prozess:
PAM
Homepage: http://www.linux-pam.org/
Shell
Shell Übersichtsartikel
Desktop