[[Vorlage(Getestet, )]] {{{#!vorlage Wissen [:Terminal: einen Terminal öffnen] [:Editor:eine Datei bearbeiten] [:mit Root-Rechten arbeiten:] }}} [[Inhaltsverzeichnis(6)]] 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 Environment einzelner Dienste] oder * Sind alle Dienste und Programme betroffen? -> [:systemd/Umgebungsvariable/#systemweite-Umgebungsvariablen-setzen:systemweite Umgebungsvariablen setzen] * In manchen Fällen kann es auch notwendig sein, Umgebungsvariablen für den Linux-Kernel zu setzen. -> [:Bootoptionen/#Dauerhafte-Konfiguration-eines-Systems:dauerhaufte Konfiguration eines Systems] * Betrifft der beabsichtige Effekt nur angemeldete [:Benutzer_und_Gruppen: Benutzer] bzw. deren Anmeldung? * Soll dies nur für grafische Logins gelten? -> [#Grafischer-Login grafischer Login] oder * auch andere Logins betreffen? -> [#Environment-einzelner-oder-aller-Benutzer 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 ([:man: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: {{{#!vorlage Befehl 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: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/Konfiguration/:GRUB 2] oder auch der Firewall-Dienst [:ufw:]. Ein Blick in die Dokumentation des jeweiligen Programms oder der zugehörigen [:systemd/Umgebungsvariable/#Umgebungsvariablen-fuer-eine-Unit-setzen: 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 [:systemd/Units/#Bestehende-Unit-editieren:Unit bearbeiten]. = Environment einzelner oder aller Benutzer = Je nach [:Shell/Modi:Modus der Shell] (also der Anmeldemethode) werden unterschiedliche Dateien ausgewertet. In der folgenden Tabellen sind die Dateien für die [:Bash:] aufgeführt: || <-5 rowclass="titel">Initialisierungsdateien für Bash || || Programm: || <:-4>Bash (seit Version 4.2) || || Shell-Modus || interaktive Login-Shell || nicht-interaktive Login-Shell || interaktive nicht-Login-Shell || nicht-interaktive nicht-Login-Shell || || <:-5 rowclass="kopf"> Anpassung für einzelne Benutzer in || || '''~/.profile''' || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || || || || '''~/.bashrc''' || siehe Hinweisbox || siehe Hinweisbox || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || || || '''~/.bash_logout''' || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || || || || '''~/.config/environment.d/*.conf''' || || seit Ubuntu 17.10 || || seit Ubuntu 17.10 || || <:-5 rowclass="kopf"> Anpassung für alle Benutzer in || || '''/etc/security/pam_env.conf''' || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || || '''/etc/environment''' || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || || || || '''/etc/environment.d/*.conf''' || || seit Ubuntu 17.10 || || seit Ubuntu 17.10 || || '''/etc/profile.d/*.sh''' || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || || || || '''/etc/bash.bashrc''' || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || || [[Bild(Wiki/Icons/Tango/dialog-ok.png, 16)]] || || || '''/etc/default/locale''' || nur zum Setzen der Standard-Bediensprache des Systems [[BR]] -> [:systemd/localectl:] || nur zum Setzen der Standard-Bediensprache des Systems [[BR]] -> [:systemd/localectl:] || nur zum Setzen der Standard-Bediensprache des Systems [[BR]] -> [:systemd/localectl:] || nur zum Setzen der Standard-Bediensprache des Systems [[BR]] -> [:systemd/localectl:] || {{{#!vorlage 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. }}} {{{#!vorlage Experten 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ü ([[Vorlage(Tasten, rmt)]] 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 * [man:environ:] * [ubuntu_doc:community/EnvironmentVariables:Hilfeseite auf ubuntu.com] {en} * 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: [http://pubs.opengroup.org/onlinepubs/9699919799/ POSIX.1-2008/IEEE Std 1003.1™-2008/Open Group Technical Standard Base Specifications] {en} * Init-Prozess: * [man:systemd-system.conf:] * PAM * Homepage: [http://www.linux-pam.org/] * [man:pam_env:], [man:pam_env.conf:] * Shell * [:Shell:] {Übersicht} Übersichtsartikel * [man:bash:], [man:dash:] * [wikipedia:Unix-Shell:] * Desktop * [https://www.freedesktop.org/software/systemd/man/environment.d.html] {en} * [https://lwn.net/Articles/709769/ GNOME, Wayland, and environment variables] {en} * [man:systemd.environment-generator:], [man:systemd.environment-d-generator:] * [man:Xsession:] * [https://wiki.gnome.org/Initiatives/Wayland/SessionStart] {en} * [man:printenv:], [man:env:] # tag: System, Shell