Scroll to navigation

ENVIRONMENT.D(5) environment.d ENVIRONMENT.D(5)

BEZEICHNUNG

environment.d - Definition einer Benutzerdiensteumgebung

ÜBERSICHT

~/.config/environment.d/*.conf
/etc/environment.d/*.conf
/run/environment.d/*.conf
/usr/local/lib/environment.d/*.conf
/usr/lib/environment.d/*.conf
/etc/environment

BESCHREIBUNG

Konfigurationsdateien in den environment.d-Verzeichnissen enthalten Listen von Umgebungsvariablenzuweisungen, die an Dienste, die durch die Systembenutzerinstanz gestartet werden, weitergegeben werden. systemd-environment-d-generator(8) wertet sie aus und aktualisiert die von der Systemd-Benutzerinstanz exportierte Umgebung. Lesen Sie die nachfolgende Diskussion darüber, welche Prozesse diese Variablen erben.

Das Konfigurationsverzeichnis auf Benutzerebene ist standardmäßig ~/.config/environment.d/. Falls $XDG_CONFIG_HOME in der Umgebung des Benutzer-Diensteverwalters auf einen absoluten Pfad gesetzt ist (d.h. mittels PAM oder /etc/environment) hat dieser Vorrang vor ~/.config/. Beachten Sie, dass dies beim Urladen berücksichtigt werden muss: in Dateien in environment.d/ gesetzte Variablen, einschließlich $XDG_CONFIG_HOME selbst, sind nicht verfügbar, wenn der Generator ermittelt, welches Verzeichnis er lesen soll.

Es wird empfohlen, alle Namen mit Ziffern zu beginnen, um die Sortierung zu vereinfachen.

Zur Rückwärtskompatibilität wird ein Symlink auf /etc/environment installiert, so dass diese Datei auch ausgewertet wird.

KONFIGURATIONSVERZEICHNISSE UND RANGFOLGE

Konfigurationsdateien werden aus Verzeichnissen in /etc/, /run/, /usr/local/lib/ und /usr/lib/, in dieser Rangfolge, gelesen, wie im Abschnitt ÜBERSICHT oben aufgeführt. Dateien müssen die Endung ».conf« haben. Dateien in /etc/ setzen Dateien mit dem gleichen Namen in /run/, /usr/local/lib/ und /usr/lib/ außer Kraft. Dateien in /run/ setzen Dateien mit dem gleichen Namen unter /usr/lib/ außer Kraft.

Alle Konfigurationsdateien werden in lexikographischer Reihenfolge sortiert, unabhängig davon, in welchem Verzeichnis sie sich befinden. Falls mehrere Dateien die gleiche Option angeben, wird der Eintrag in der Datei mit dem lexikographisch letzten Namen Vorrang erhalten. Daher kann die Konfiguration in einer bestimmten Datei entweder komplett ersetzt werden (indem eine Datei mit dem gleichen Namen in einem Verzeichnis mit höherer Priorität abgelegt wird) oder einzelne Einstellungen können geändert werden (indem zusätzliche Einstellungen in einer Datei mit einem anderen Namen, der später angeordnet ist, angegeben werden).

Pakete sollten ihre Konfigurationsdateien in /usr/lib/ (Distributionspakete) oder /usr/local/lib/ (lokale Installationen) installieren [1]. Dateien in /etc/ sind für den lokalen Administrator reserviert, der diese Logik verwenden kann, um die durch die Lieferantenpakete bereitgestellten Konfigurationsdateien außer Kraft zu setzen. Es wird empfohlen, allen Dateinamen eine zweistellige Zahl und einen Bindestrich voranzustellen, um die Sortierung der Dateien zu vereinfachen.

Es wird empfohlen, allen Dateinamen eine zweistellige Zahl und einen Bindestrich voranzustellen, um die Sortierung vereinfachen. Es wird empfohlen, den Bereich 10-40 für Konfigurationsdateien in /usr/ und den Bereich 60-90 für Konfigurationsdateien in /etc/ und /run/ zu verwenden um sicherzustellen, dass lokale und flüchtige Konfigurationsdateien Priorität gegenüber Konfigurationsdateien haben, die vom Betriebssystemlieferanten geliefert werden.

Falls der Administrator eine vom Lieferanten bereitgestellte Konfigurationsdatei deaktivieren möchte, wird empfohlen, einen Symlink im Konfigurationsverzeichnis in /etc/ mit dem gleichen Dateinamen wie die des Lieferanten auf /dev/null zu setzen. Falls die Lieferantendatei im Initrd-Image enthalten ist, muss das Image neu erstellt werden.

KONFIGURATIONSFORMAT

Die Konfigurationsdateien enthalten eine Liste von »SCHLÜSSEL=Wert«-Umgebungsvariablenzuweisungen, getrennt durch Zeilenumbrüche. Die rechte Seite dieser Zuweisungen kann vorher definierte Umgebungsvariablen referenzieren, indem das Format »${ANDERER_SCHLÜSSEL}« und »$ANDERER_SCHLÜSSEL« verwandt wird. Es ist auch möglich, »${FOO:-VORGABEWERT}« zu verwenden, um auf die gleiche Art wie »${FOO}« zu expandieren, außer die Expandierung wäre leer, in welchem Fall sie auf VORGABEWERT expandiert wird; und »${FOO:+ALTERNATIVWERT}« zu verwenden, um auf ALTERNATIVWERT zu expandieren, falls ${FOO}« sich auf einen nicht leeren Wert expandiert hätte. Sie können ein wörtliches Dollarzeichen »$« maskieren, indem Sie es verdoppeln: »$$«.

Ein Rückwärtsschrägstrich »\« gefolgt von einem Zeilenumbruch agiert als Zeilenfortsetzung (beide Zeichen werden verworfen); in allen anderen Fällen wird der Rückwärtsschrägstrich verbraucht und das folgende Zeichen wird wörtlich in dem Wert aufgenommen. Dies kann zum Erhalten von einleitenden/abschließenden Leerraumzeichen oder zur Aufnahme von wörtlichen Rückwärtsschrägstrichen verwandt werden.

Sie können die rechte Seite einer Zuweisung optional in Paare von 'einfachen englischen Anführungszeichen' oder "doppelten englischen Anführungszeichen" einschließen; diese werden vor dem Speichern des Wertes entfernt. Die Verwendung einer der Zitierstile hat keine Auswirkung auf die Expansion von Variablen; allerdings deaktivieren einzelne englische Anführungszeichen die Rückwärtsschrägstrichmaskierung komplett, während doppelte englische Anführungszeichen Rückwärtsschrägstriche entfernen, die vor doppelten englischen Anführungszeichen »"«, Dollarzeichen »$«, Rückwärtsschrägstrichen »\«, einem Gravis »`« und Zeilenumbrüchen stehen und alle anderen Rückwärtsschrägstriche an der Stelle belassen.

Einleitende und abschließende Leerraumzeichen werden von beiden Seiten der Zuweisung entfernt. Um solche Leerzeichen in dem Wert zu erhalten, können Sie entweder den gesamten Wert in englische Anführungszeichen setzen oder die Leerzeichen mit Rückwärtsschrägstrichen maskieren. Sie können auch wörtliche Zeilenumbrüche in den Wert aufnehmen, indem Sie sie in englische Anführungszeichen einschließen.

Jeder SCHLÜSSEL muss ein gültiger Variablenname sein. Leere Zeilen und Zeilen, die mit den Kommentarzeichen »#« oder »;« beginnen, werden ignoriert. Es wird kein anderes Element der Shell-Syntax unterstützt.

Beispiele

Beispiel 1. Einrichten einer Umgebung, um Zugriff auf ein unter /opt/foo installiertes Programm zu geben

/etc/environment.d/60-foo.conf:

FOO_DEBUG=force-software-gl,log-verbose
PATH=/opt/foo/bin:$PATH
LD_LIBRARY_PATH=/opt/foo/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
XDG_DATA_DIRS=/opt/foo/share:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/}

Beispiel 2. Maskieren und Variablenexpansion

/etc/environment.d/70-bar.conf:

# Ein Kommentare
test_var=(Variable)
; Ein weiterer Kommentar
test_comment=Wert # Dies ist Teil der Variablen und kein Kommentar!
test_none= \ before\
after "" '' \${test_var}
test_double=" \ before\
after "" '' \${test_var}"
test_single=' \ before\
after "" '' \${test_var}'
# Das vorherige Beispiel erstellt die folgenden Umgebungsvariablen,
# geschrieben in C-artiger Zeichenkettenmaskierung:
#
# test_var="(Variable)"
# test_comment="Wert # Dies ist Teil der Variablen und kein Kommentar!"
# test_none=" beforeafter \"\" '' (Variable)"
# test_double=" \\ beforeafter  '' (Variable)"
# test_single=" \\ before\\\nafter \"\"  \\(Variable)"

GELTUNGSBEREICH

Die durch die Benutzerdiensteverwalterinstanz (Instanz systemd --user, gestartet in dem Systemdienst user@UID.service) exportierten Umgebungsvariablen werden an alle Dienste, die durch diesen Verwalter gestartet werden, weitergegeben. Dies betrifft insbesondere Dienste, die in Shells ausgeführt werden. Beispielsweise läuft in der GNOME-Umgebung der graphische Terminal-Emulator als Benutzer-Unit gnome-terminal-server.service, die wiederum die Benutzer-Shell ausführt, so dass die Shell die durch den Benutzerverwalter exportierten Umgebungsvariablen erben wird. Für andere Instanzen der Shell, die nicht vom Benutzerdiensteverwalter gestartet werden, wird die geerbte Umgebung durch das Programm definiert, das sie startete. Tipp: Im Allgemeinen enthalten systemd.service(5)-Units die durch Systemd gestarteten Programme und systemd.scope(5)-Units enthalten Programme, die von etwas anderem gestartet wurden.

Beachten Sie, dass diese Dateien nicht den Umgebungsblock des Diensteverwalters selbst betreffen, sondern ausschließlich die Umgebungsblöcke, die an die Dienste, die von ihm verwaltet werden, übergeben werden. Auf diese Weise gesetzt Umgebungsvariablen können daher nicht das Verhalten des Diensteverwalters beeinflussen. Um Änderungen am Umgebungsblock des Diensteverwalters vorzunehmen, muss die Umgebung verändert werden, bevor der Benutzerdiensteverwalter aufgerufen wird, beispielsweise vom Systemdiensteverwalter oder mittels eines PAM-Moduls.

Insbesondere für SSH-Anmeldungen baut der Dienst sshd(8) eine Umgebung auf, die eine Kombination aus Variablen sind, die von dem fernen System weitergeleitet und solchen, die durch sshd definiert wurden; siehe die Diskussion in ssh(1). Eine graphische Display-Sitzung wird über analoge Mechanismen zur Definition der Umgebung verfügen. Beachten Sie, dass einige Verwalter die Systemd-Benutzer-Instanz bezüglich der exportierten Umgebung mittels systemctl show-environment oder dem zugrundeliegenden D-Bus-Aufruf abfragen und diese Konfiguration in Programme einleiten, die sie starten.

SIEHE AUCH

systemd(1), systemd-environment-d-generator(8), systemd.environment-generator(7)

ANMERKUNGEN

1.
💣💥🧨💥💥💣 Bitte beachten Sie, dass diese Konfigurationsdateien zu allen Zeiten verfügbar sein müssen. Falls /usr/local/ eine separate Partition ist, könnte diese während des frühen Systemstarts nicht verfügbar sein und darf dann nicht für Konfiguration verwandt werden.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer.

systemd 262.1