Wo soll die Variable XDG_CONFIG_HOME definiert werden?

31181
NOLFXceptMe

Die XDG-Spezifikation spricht über die XDG_CONFIG_HOMEVariable, legt jedoch nicht fest, wo sie definiert werden soll. Sollen wir es in definieren /etc/X11/Xsessionoder ist es die Konfigurationsdatei des Window Managers, die dies definieren muss?

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

XDG_CONFIG_HOME="$HOME/.config" 

Das hat aber nicht funktioniert, da $ HOME scheinbar nicht definiert ist, wenn /etc/environmentgeparst wird.

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

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

34

3 Antworten auf die Frage

42
MestreLion

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 festgelegt oder leer ist, sollte ein Standardwert $HOME/.configverwendet werden.

Daher ist es überflüssig, den Standardwert festzulegen. Alle kompatiblen Anwendungen werden bereits verwendet$HOME/.config

Wenn Sie jedoch den Standard 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
Downvoter kann gerne erklären, was mit der Antwort falsch ist, und vorzugsweise zur Verbesserung beitragen MestreLion vor 9 Jahren 1
Diese Antwort ist theoretisch vollkommen in Ordnung, aber es gibt reichlich Software, die nicht mit der XDG-Basisverzeichnisspezifikation kompatibel ist, und eine Anzahl von Fehlern, die aus dieser Unwissenheit resultieren. ManuelSchneid3r vor 8 Jahren 1
@ ManuelSchneid3r Sehr wahr, aber für eine solche Softwareeinstellung macht 'XDG_CONFIG_HOME` sowieso wenig einen Unterschied. MestreLion vor 8 Jahren 5
Möglicherweise gibt es eine Software, die blind 'XDG_CONFIG_HOME' verwendet, ohne der Spezifikation zu folgen, vorausgesetzt, es handelt sich um eine standardmäßige Linux- oder sogar Unix-Funktion und nicht als Teil einer Spezifikation eines Drittanbieters. Eagle-Eye vor 7 Jahren 1
@ Eagle-Eye sagst du, dass wir * XDG_CONFIG_HOME usw. also definieren müssen? mcnesium vor 7 Jahren 0
Ich meine, es kann wahrscheinlich nicht schaden. Wenn möglich, wäre es besser, die Anwendung selbst zu reparieren und den Fix in den Upstream zu senden. Eagle-Eye vor 7 Jahren 2
20
grawity

In Arch Linux wird dies durch /etc/profileein /etc/profile.dSkript definiert.

Wenn es ein Debian / Ubuntu gibt, /etc/profile.derstellen Sie ein ähnliches Skript. Wenn ein solches Verzeichnis nicht existiert, bearbeiten Sie /etc/profileitsef.

export XDG_CONFIG_HOME="$HOME/.config" 

Die /etc/environmentDatei wird nach analysiert pam_env, was sie als einfache Name = Wertzuweisungen behandelt. Es hat jedoch auch /etc/security/pam_env.conf, welche variable Erweiterung unterstützt und zu diesem Zweck verwendet werden kann.

Gist ist nicht verfügbar hawk vor 10 Jahren 0
Es befindet sich nicht mehr in `/ etc / profile` in Arch und wird nur einmal in` / etc / profile.d / locale.sh` erwähnt. phil pirozhkov vor 9 Jahren 3
Link ist tot ... ManuelSchneid3r vor 8 Jahren 1
2
carlwgeorge

Ich habe festgestellt, dass es am besten ist, 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.confmit einer speziellen Syntax einstellen . So setze ich meine XDG-Variablen ein /etc/security/pam_env.conf.

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

Zuvor würde ich diese Variablen in einstellen /etc/profile.d/custom.sh. Einige Anwendungen werden jedoch gestartet, bevor diese Datei gelesen wird. Durch die Umstellung auf die PAM-Methode wurde das Problem für mehrere Anwendungen behoben, die sich so verhalten haben.

Hinweis: Dies entspricht nicht den Vorgaben in der [XDG-Basisverzeichnisspezifikation] (https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html). Tom Hale vor 7 Jahren 3
@TomHale Natürlich nicht, der ganze Sinn der Einstellung der Variablen besteht darin, die Standardeinstellungen zu überschreiben. Wenn Sie mit den Standardeinstellungen zufrieden sind, müssen Sie diese Variablen nicht festlegen. carlwgeorge vor 7 Jahren 0
Ubuntu 14.04 legt die XDG-Verzeichnisvariablen nicht standardmäßig fest - nur weil es eine Spezifikation gibt, bedeutet dies nicht, dass die Distro einer folgt. Tom Hale vor 7 Jahren 1
@TomHale Das spielt keine Rolle, da die XDG-Spezifikation Standardwerte enthält, wenn die Variablen nicht festgelegt sind. Daher müssen die XDG-Variablen * nicht * gesetzt werden. Pauan vor 7 Jahren 0
Es spielt keine Rolle, ob ich LESSHISTFILE = "$ XDG_CACHE_HOME" / less / history exportieren will, wobei "less" der Spezifikation nicht bekannt ist und die Standardeinstellungen noch nicht von meiner Distribution festgelegt wurden. Tom Hale vor 7 Jahren 2