Dove dovrebbe essere definita la variabile XDG_CONFIG_HOME?


42

La specifica XDG parla della XDG_CONFIG_HOMEvariabile, ma non specifica dove dovrebbe essere definita. Dovremmo definirlo in /etc/X11/Xsession, o è il file di configurazione del gestore delle finestre che deve definirlo?

Ho provato a dichiararlo in / etc / environment come

XDG_CONFIG_HOME="$HOME/.config"

ma ciò non ha funzionato, poiché sembra che $ HOME non sia definito quando /etc/environmentviene analizzato.

L'unica documentazione che ho trovato online è stata per Gentoo, dove è stata dichiarata /etc/env.d/90xsession

Sto usando Ubuntu. Quale sarebbe la soluzione generale per le distribuzioni basate su Debian?

Risposte:


24

In Arch Linux, questo è definito da /etc/profile, usando uno /etc/profile.dscript.

Per Debian / Ubuntu, se c'è un /etc/profile.d- crea uno script simile all'interno; se tale directory non esiste, modificare /etc/profileitsef.

export XDG_CONFIG_HOME="$HOME/.config"

Il /etc/environmentfile viene analizzato da pam_env, che lo considera come semplice assegnazione di nome = valore. Tuttavia, ha anche /etc/security/pam_env.conf, che supporta l'espansione variabile e può essere utilizzato per questo scopo.


Gist non è disponibile
falco

3
Non è più in /etc/profileArch, ed è menzionato solo una volta /etc/profile.d/locale.sh.
phil pirozhkov,

1
Il link è morto ...
ManuelSchneid3r

55

Non è necessario definirlo ovunque, a meno che non si desideri modificare l'impostazione predefinita.

Le specifiche della directory di base XDG indicano chiaramente:

Se $XDG_CONFIG_HOMEnon è impostato o vuoto, $HOME/.configdeve essere utilizzato un valore predefinito uguale a .

Quindi è ridondante definirlo sul valore predefinito. Tutte le applicazioni conformi useranno già$HOME/.config

Ma, se non desidera cambiare l'impostazione predefinita in un sistema Debian / Ubuntu, il posto migliore è:

  • Per una modifica a livello di sistema, che interessa tutti gli utenti: /etc/profile
  • Solo per il tuo utente: ~/.profile

1
downvoter è invitato a spiegare cosa c'è che non va nella risposta, e preferibilmente aiuta a migliorarla
MestreLion

1
Questa risposta è perfettamente valida, teoricamente, ma c'è un sacco di software in giro, che non è conforme alla specifica XDG Base Directory Specification e un quattuordecilione di bug derivanti da questa ignoranza.
ManuelSchneid3r

5
@ ManuelSchneid3r Molto vero, ma per tale impostazione del software XDG_CONFIG_HOMEfarà comunque qualche piccola differenza.
MestreLion,

2
Potrebbe esserci un software che utilizza ciecamente XDG_CONFIG_HOMEsenza seguire le specifiche, supponendo che si tratti di una funzionalità standard di Linux o Unix piuttosto che parte di una specifica di terze parti.
Eagle-Eye,

3
@mcnesium Sto dicendo che probabilmente non può far male. Se possibile, sarebbe meglio riparare l'applicazione stessa e inviare la correzione a monte.
Eagle-Eye il

5

Ho scoperto che funziona meglio per impostare le variabili di ambiente tramite PAM. Per le moderne distro Linux, questo significa /etc/environmento $HOME/.pam_environment(vedi man pam_env). Puoi anche impostarli /etc/security/pam_env.confusando una sintassi speciale. Ecco come imposto le mie variabili XDG /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

In precedenza avrei impostato queste variabili /etc/profile.d/custom.sh. Tuttavia, alcune applicazioni si avviano prima di leggere quel file. Il passaggio al metodo PAM ha risolto il problema per più applicazioni che si comportavano in questo modo.


5
Nota: questo non segue le impostazioni predefinite specificate nella specifica della directory di base XDG
Tom Hale,

2
@TomHale Certo che no, il punto fondamentale dell'impostazione delle variabili è quello di sovrascrivere i valori predefiniti. Se sei soddisfatto delle impostazioni predefinite, non è necessario impostare affatto queste variabili.
Carlwgeorge,

1
Ubuntu 14.04 non imposta le variabili della directory XDG per impostazione predefinita, solo perché esiste una specifica non significa che la propria distribuzione lo segua.
Tom Hale,

2
Importa se voglio sapere export LESSHISTFILE="$XDG_CACHE_HOME"/less/historydove lessnon sono a conoscenza delle specifiche e le impostazioni predefinite non sono ancora impostate dalla mia distribuzione.
Tom Hale,

2
@TomHale la specifica non definisce su cosa il sistema operativo dovrebbe impostare le variabili; definisce le variabili che, se definite e non vuote, l' applicazione dovrebbe usare. E se la variabile non è definita o è vuota, l' applicazione dovrebbe utilizzare il percorso predefinito indicato nella specifica. Quindi il tuo breve esempio non è conforme alle specifiche, poiché non controlla prima che XDG_CACHE_HOMEsia definito e non vuoto. Dovrebbe invece essere:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
villapx il

0

Per gli utenti Zsh, definiscilo nel tuo .zshenvfile

export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"

1
Cura dei downvoter per spiegarti?
smac89
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.