¿Dónde se debe definir la variable XDG_CONFIG_HOME?


42

La especificación XDG habla sobre la XDG_CONFIG_HOMEvariable, pero no especifica dónde debe definirse. ¿Deberíamos definirlo /etc/X11/Xsession, o es el archivo de configuración del administrador de ventanas el que necesita definir esto?

Intenté declararlo en / etc / environment como

XDG_CONFIG_HOME="$HOME/.config"

pero eso no funcionó, ya que parece que $ HOME no se define cuando /etc/environmentse analiza.

La única documentación que pude encontrar en línea fue para Gentoo, donde se declaró en /etc/env.d/90xsession

Estoy usando Ubuntu ¿Cuál sería la solución general para las distribuciones basadas en Debian?

Respuestas:


24

En Arch Linux, esto se define /etc/profilemediante un /etc/profile.dscript.

Para Debian / Ubuntu, si hay un /etc/profile.d- cree un script similar dentro; si dicho directorio no existe, /etc/profileedítelo.

export XDG_CONFIG_HOME="$HOME/.config"

El /etc/environmentarchivo se analiza pam_env, lo que lo trata como simples asignaciones de nombre = valor. Sin embargo, también tiene /etc/security/pam_env.conf, que admite expansión variable y se puede utilizar para este propósito.


Gist no está disponible
halcón

3
Ya no está en /etc/profileArch, y solo se menciona una vez /etc/profile.d/locale.sh.
phil pirozhkov

1
Link está muerto ...
ManuelSchneid3r

55

No necesita definirlo en ningún lado, a menos que desee cambiar el valor predeterminado.

La especificación del directorio base de XDG dice claramente:

Si $XDG_CONFIG_HOMEno está configurado o está vacío, se $HOME/.configdebe utilizar un valor predeterminado igual a .

Por lo tanto, es redundante definirlo al valor predeterminado. Todas las aplicaciones compatibles ya usarán$HOME/.config

Sin embargo, si usted no desea cambiar el valor por defecto en un sistema Debian / Ubuntu, el mejor lugar es:

  • Para un cambio en todo el sistema, que afecta a todos los usuarios: /etc/profile
  • Solo para su usuario: ~/.profile

1
downvoter puede explicar qué tiene de malo la respuesta y, de preferencia, ayudar a mejorarla
MestreLion

1
Esta respuesta está perfectamente bien, teóricamente, pero hay un montón de software, que no cumple con la especificación de directorio base XDG y un quattuordecillion de errores derivados de esta ignorancia.
ManuelSchneid3r

55
@ ManuelSchneid3r Muy cierto, pero para tal configuración de software XDG_CONFIG_HOMEhará poca diferencia de todos modos, si es que hay alguno.
MestreLion

2
Puede haber un software que use ciegamente XDG_CONFIG_HOMEsin seguir las especificaciones, suponiendo que sea una característica estándar de Linux o incluso Unix en lugar de parte de una especificación de terceros.
Eagle-Eye

3
@mcnesium Estoy diciendo que probablemente no pueda doler. Aunque si es posible, sería mejor arreglar la aplicación en sí y enviar la solución en sentido ascendente.
Eagle-Eye

5

Descubrí que funciona mejor establecer variables de entorno a través de PAM. Para las distos modernas de Linux, esto significa /etc/environmento $HOME/.pam_environment(ver man pam_env). También puede configurarlos /etc/security/pam_env.confusando una sintaxis especial. Así es como configuro mis variables 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

Anteriormente establecería estas variables en /etc/profile.d/custom.sh. Sin embargo, algunas aplicaciones comienzan antes de que se lea ese archivo. Cambiar al método PAM resolvió el problema para múltiples aplicaciones que se comportaron de esta manera.


55
Nota: esto no sigue los valores predeterminados especificados en la Especificación del directorio base de XDG
Tom Hale

2
@TomHale Por supuesto que no, el objetivo de configurar las variables es anular los valores predeterminados. Si está satisfecho con los valores predeterminados, no necesita establecer estas variables en absoluto.
carlwgeorge

1
Ubuntu 14.04 no establece las variables de directorio XDG por defecto, solo porque haya una especificación no significa que la distribución de uno la siga.
Tom Hale

2
Importa si quiero saber export LESSHISTFILE="$XDG_CACHE_HOME"/less/historydónde lessno conoce la especificación y los valores predeterminados aún no están establecidos en mi distribución.
Tom Hale

2
@TomHale, la especificación no define para qué debe establecer las variables el sistema operativo ; define variables que, si se definen y no están vacías, la aplicación debería usarlas. Y si la variable no está definida o está vacía, la aplicación debe usar la ruta predeterminada referenciada en la especificación. Por lo tanto, su breve ejemplo no cumple con las especificaciones, ya que no comprueba primero si XDG_CACHE_HOMEestá definido y no está vacío. En cambio, debería ser:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
villapx

0

Para usuarios de Zsh, defínalo en su .zshenvarchivo

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

1
Downvoter te importa explicarte?
smac89
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.