Où la variable XDG_CONFIG_HOME doit-elle être définie?

42

La spécification XDG parle de la XDG_CONFIG_HOMEvariable, mais ne spécifie pas où elle doit être définie. Devrions-nous le définir dans /etc/X11/Xsessionou est-ce le fichier de configuration du gestionnaire de fenêtres qui doit le définir?

J'ai essayé de le déclarer dans / etc / environment en tant que

XDG_CONFIG_HOME="$HOME/.config"

mais cela n'a pas fonctionné, car il semble que $ HOME n'est pas défini quand /etc/environmentest analysé.

La seule documentation que j'ai pu trouver en ligne était pour Gentoo, où elle a été déclarée dans /etc/env.d/90xsession

J'utilise Ubuntu. Quelle serait la solution générale pour les distributions basées sur Debian?

NOLFXceptMe
la source

Réponses:

24

Dans Arch Linux, ceci est défini par /etc/profile, en utilisant un /etc/profile.dscript.

Pour Debian / Ubuntu, s'il y a un /etc/profile.d- créez un script similaire à l'intérieur; si un tel répertoire n'existe pas - éditez /etc/profileitsef.

export XDG_CONFIG_HOME="$HOME/.config"

Le /etc/environmentfichier est analysé par pam_env, ce qui le traite comme une simple affectation nom = valeur. Cependant, il en a aussi /etc/security/pam_env.conf, qui supporte une expansion variable et peut être utilisé à cette fin.

Grawity
la source
Gist est indisponible
faucon
3
Ce n'est plus dans /etc/profileArch, et n'est mentionné qu'une seule fois dans /etc/profile.d/locale.sh.
phil pirozhkov
1
Link est mort ...
ManuelSchneid3r
55

Vous n'avez pas besoin de le définir n'importe où, sauf si vous souhaitez modifier la valeur par défaut.

La spécification de l'annuaire de base XDG indique clairement:

Si $XDG_CONFIG_HOMEest non défini ou vide, une valeur par défaut égale à $HOME/.configdoit être utilisée.

Il est donc redondant de le définir à la valeur par défaut. Toutes les applications conformes utiliseront déjà$HOME/.config

Mais, si vous ne voulez changer la valeur par défaut dans un système Debian / Ubuntu, le meilleur endroit est:

  • Pour un changement de système touchant tous les utilisateurs: /etc/profile
  • Pour votre utilisateur seulement: ~/.profile
MestreLion
la source
1
Les votants sont invités à expliquer ce qui ne va pas dans la réponse et, de préférence, à contribuer à son amélioration.
MestreLion
1
Cette réponse est parfaitement correcte, théoriquement, mais il existe de nombreux logiciels, qui ne sont pas conformes à la spécification XDG Base Directory et à un nombre considérable de bogues provenant de cette ignorance.
ManuelSchneid3r
5
@ ManuelSchneid3r C'est tout à fait vrai, mais pour un tel logiciel, le réglage XDG_CONFIG_HOMEne fera aucune différence de toute façon, le cas échéant.
MestreLion
2
Il peut y avoir des logiciels qui utilisent aveuglément XDG_CONFIG_HOMEsans suivre les spécifications, en supposant qu'il s'agisse d'une fonctionnalité standard de Linux ou même d'Unix plutôt que d'une partie d'une spécification tierce.
Eagle-Eye
3
@ mcnesium Je dis que ça ne peut probablement pas faire de mal. Cependant, si possible, il serait préférable de réparer l'application elle-même et d'envoyer le correctif en amont.
Eagle-Eye
5

J'ai constaté qu'il était préférable de définir des variables d'environnement via PAM. Pour les distos modernes de Linux, cela signifie /etc/environmentou $HOME/.pam_environment(voir man pam_env). Vous pouvez également les configurer en /etc/security/pam_env.confutilisant une syntaxe spéciale. Voici comment définir mes variables XDG dans /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

Auparavant, je mettrais ces variables dans /etc/profile.d/custom.sh. Cependant, certaines applications démarrent avant la lecture de ce fichier. Le passage à la méthode PAM a résolu le problème pour plusieurs applications qui se comportaient de cette manière.

Carlwgeorge
la source
5
Remarque: ceci ne suit pas les valeurs par défaut spécifiées dans la spécification de l'annuaire de base XDG
Tom Hale le
2
@TomHale Bien sûr que non, le but de la définition des variables est de remplacer les valeurs par défaut. Si vous êtes satisfait des valeurs par défaut, vous n'avez pas besoin de définir ces variables.
Carlwgeorge
1
Ubuntu 14.04 ne définit pas les variables de répertoire XDG par défaut - le simple fait qu’il existe une spécification ne signifie pas que sa distribution la suit.
Tom Hale
2
Peu importe si je veux savoir export LESSHISTFILE="$XDG_CACHE_HOME"/less/historylesssont mes connaissances et si les valeurs par défaut ne sont pas encore définies par ma distribution.
Tom Hale
2
@TomHale la spécification ne définit pas ce que le système d'exploitation doit définir pour les variables; il définit les variables que, si elles sont définies et non vides, l' application doit utiliser. Et si la variable n'est pas définie ou est vide, l' application doit utiliser le chemin par défaut référencé dans la spécification. Ainsi, votre court exemple n'est pas conforme aux spécifications, car il ne vérifie pas d'abord s'il XDG_CACHE_HOMEest défini et non vide. Il devrait plutôt être:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
villapx
0

Pour les utilisateurs de Zsh, définissez-le dans votre .zshenvfichier.

export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
smac89
la source
1
Vous souhaitez vous expliquer?
smac89