Wo soll die Variable XDG_CONFIG_HOME definiert werden?

41

Die XDG-Spezifikation XDG_CONFIG_HOMEbezieht sich auf die Variable, gibt jedoch nicht an, wo sie definiert werden soll. Sollten wir es in definieren /etc/X11/Xsession, oder ist es die Konfigurationsdatei des Fenstermanagers, die dies definieren muss?

Ich habe versucht, es in / etc / environment als zu deklarieren

XDG_CONFIG_HOME="$HOME/.config"

aber das hat nicht funktioniert, da es scheint, dass $ HOME nicht definiert ist, wann /etc/environmentanalysiert wird.

Die einzige Dokumentation, die ich online finden konnte, war für Gentoo, wo es deklariert wurde /etc/env.d/90xsession

Ich benutze Ubuntu. Was wäre die allgemeine Lösung für Debian-basierte Distributionen?

NOLFXceptMe
quelle

Antworten:

24

In Arch Linux wird dies /etc/profilemithilfe eines /etc/profile.dSkripts definiert.

Wenn es unter Debian / Ubuntu a gibt /etc/profile.d- erstellen Sie ein ähnliches Skript; Wenn solch ein Verzeichnis nicht existiert - editiere /etc/profilees.

export XDG_CONFIG_HOME="$HOME/.config"

Die /etc/environmentDatei wird von analysiert pam_env, wodurch sie als einfache Zuweisung von Name = Wert behandelt wird. Es hat jedoch auch /etc/security/pam_env.conf, die variable Expansion unterstützt und für diesen Zweck verwendet werden kann.

Grawity
quelle
Gist ist nicht verfügbar
Hawk
3
Es ist nicht /etc/profilemehr in Arch und wird nur noch einmal erwähnt /etc/profile.d/locale.sh.
Phil Pirozhkov
1
Link ist tot ...
ManuelSchneid3r
54

Sie müssen nicht brauchen , es überall zu definieren, wenn Sie die Standardeinstellung ändern möchten.

Die XDG-Basisverzeichnisspezifikation sagt eindeutig:

Wenn $XDG_CONFIG_HOMEentweder nicht gesetzt oder leer ist, sollte ein Standardwert gleich $HOME/.configverwendet werden.

Es ist also überflüssig, ihn auf den Standardwert zu setzen. Alle kompatiblen Anwendungen werden bereits verwendet$HOME/.config

Wenn Sie jedoch die Standardeinstellung in einem Debian / Ubuntu-System ändern möchten, ist der beste Ort:

  • Für eine systemweite Änderung, die alle Benutzer betrifft: /etc/profile
  • Nur für Ihren Benutzer: ~/.profile
MestreLion
quelle
1
Downvoter ist willkommen zu erklären, was mit der Antwort falsch ist, und vorzugsweise dazu beitragen, es zu verbessern
MestreLion
1
Diese Antwort ist theoretisch völlig in Ordnung, aber es gibt eine Menge Software, die nicht mit der XDG Base Directory-Spezifikation kompatibel ist, und eine Menge Fehler, die auf diese Unkenntnis zurückzuführen sind.
ManuelSchneid3r
5
@ ManuelSchneid3r Sehr richtig, aber für solche Softwareeinstellungen XDG_CONFIG_HOMEwird es sowieso kaum einen Unterschied machen, wenn überhaupt.
MestreLion
2
Es kann Software geben, die blind verwendet wird, XDG_CONFIG_HOMEohne die Spezifikation zu befolgen, vorausgesetzt, es handelt sich um eine Standard-Linux- oder sogar Unix-Funktion und nicht um einen Teil einer Spezifikation eines Drittanbieters.
Eagle-Eye
3
Ich sage, es kann wahrscheinlich nicht schaden. Wenn möglich, ist es jedoch besser, die Anwendung selbst zu reparieren und die Korrektur im Upstream zu senden.
Eagle-Eye
5

Ich habe festgestellt, dass es am besten funktioniert, Umgebungsvariablen über PAM festzulegen. Für moderne Linux-Distos bedeutet dies /etc/environmentoder $HOME/.pam_environment(siehe man pam_env). Sie können sie auch /etc/security/pam_env.confmithilfe einer speziellen Syntax festlegen . Hier ist, wie ich meine XDG-Variablen einstelle /etc/security/pam_env.conf.

XDG_CACHE_HOME  DEFAULT=@{HOME}/.xdg/cache
XDG_CONFIG_HOME DEFAULT=@{HOME}/.xdg/config
XDG_DATA_HOME   DEFAULT=@{HOME}/.xdg/data
XDG_STATE_HOME  DEFAULT=@{HOME}/.xdg/state

Bisher habe ich diese Variablen eingestellt /etc/profile.d/custom.sh. Einige Anwendungen starten jedoch, bevor diese Datei gelesen wird. Der Wechsel zur PAM-Methode behebt das Problem bei mehreren Anwendungen, die sich auf diese Weise verhalten haben.

Carlwgeorge
quelle
5
Hinweis: Dies entspricht nicht den Standardeinstellungen in der XDG-Basisverzeichnisspezifikation
Tom Hale,
2
@TomHale Natürlich geht es beim Festlegen der Variablen nicht darum, die Standardeinstellungen zu überschreiben. Wenn Sie mit den Standardeinstellungen zufrieden sind, müssen Sie diese Variablen überhaupt nicht festlegen.
Carlwgeorge
1
Ubuntu 14.04 legt die XDG-Verzeichnisvariablen nicht standardmäßig fest - nur weil es eine Spezifikation gibt, bedeutet dies nicht, dass die Distribution dieser folgt.
Tom Hale
2
Es ist egal, ob ich möchte, export LESSHISTFILE="$XDG_CACHE_HOME"/less/historywo lessdie Spezifikation nicht bekannt ist und die Standardeinstellungen noch nicht von meiner Distribution festgelegt wurden.
Tom Hale
2
@TomHale Die Spezifikation definiert nicht, auf was das Betriebssystem die Variablen einstellen soll. Es definiert Variablen, die die Anwendung verwenden soll , wenn sie definiert und nicht leer sind . Und wenn die Variable nicht definiert ist oder leer ist, die Anwendung sollte den Standardpfad in der Spezifikation verwiesen verwenden. Ihr kurzes Beispiel ist also nicht spezifikationskonform, da es nicht zuerst überprüft, ob XDG_CACHE_HOMEes definiert und nicht leer ist. Es sollte stattdessen sein:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
villapx
0

Definieren Sie es für Zsh-Benutzer in Ihrer .zshenvDatei

export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
smac89
quelle
1
Downvoter wollen sich erklären?
smac89