Onde a variável XDG_CONFIG_HOME deve ser definida?


41

A especificação XDG fala sobre a XDG_CONFIG_HOMEvariável, mas não especifica onde ela deve ser definida. Devemos defini-lo /etc/X11/Xsessionou é o arquivo de configuração do gerenciador de janelas que precisa definir isso?

Tentei declará-lo em / etc / environment como

XDG_CONFIG_HOME="$HOME/.config"

mas isso não funcionou, pois parece que $ HOME não está definido quando /etc/environmenté analisado.

A única documentação que encontrei on-line foi para o Gentoo, onde foi declarado em /etc/env.d/90xsession

Estou usando o Ubuntu. Qual seria a solução geral para as distribuições baseadas no Debian?

Respostas:


24

No Arch Linux, isso é definido /etc/profileusando um /etc/profile.dscript.

Para Debian / Ubuntu, se houver um /etc/profile.d- crie um script semelhante dentro; se esse diretório não existir - edite-o /etc/profile.

export XDG_CONFIG_HOME="$HOME/.config"

O /etc/environmentarquivo é analisado por pam_env, que o trata como nome simples = atribuições de valor. No entanto, ele também possui /etc/security/pam_env.conf, que suporta expansão variável e pode ser usado para essa finalidade.


Gist está indisponível
hawk

3
Não está mais no /etc/profileArch e é mencionado apenas uma vez /etc/profile.d/locale.sh.
Phil Pirozhkov

11
O link está morto ...
ManuelSchneid3r 30/07/2015

54

Você não precisa defini-lo em nenhum lugar, a menos que queira alterar o padrão.

A Especificação do diretório base do XDG diz claramente:

Se não $XDG_CONFIG_HOMEestiver definido ou vazio, um padrão igual a $HOME/.configdeve ser usado.

Portanto, é redundante defini-lo com o valor padrão. Todos os aplicativos compatíveis já usarão$HOME/.config

Mas, se você não quiser alterar o padrão em um sistema Debian / Ubuntu, o melhor lugar é:

  • Para uma mudança em todo o sistema, afetando todos os usuários: /etc/profile
  • Somente para seu usuário: ~/.profile

11
downvoter é bem-vinda para explicar o que há de errado com a resposta, e de preferência ajuda melhorá-lo
MestreLion

11
Teoricamente, essa resposta é perfeitamente correta, mas existe um amplo software, que não é compatível com a Especificação de Diretório Base do XDG e um quattuordecilhão de erros decorrentes dessa ignorância.
ManuelSchneid3r

5
@ ManuelSchneid3r Muito verdade, mas para essa configuração de software XDG_CONFIG_HOMEfará pouca diferença, se houver.
MestreLion 2/08/15

2
Pode haver software que use cegamente XDG_CONFIG_HOMEsem seguir as especificações, supondo que seja um recurso padrão do Linux ou mesmo do Unix, e não parte de uma especificação de terceiros.
Eagle-Eye

3
@ mcnesium Estou dizendo que provavelmente não pode machucar. Embora, se possível, seria melhor corrigir o próprio aplicativo e enviar a correção a montante.
Eagle-Eye

5

Descobri que funciona melhor para definir variáveis ​​de ambiente via PAM. Para distos modernos do Linux, isso significa /etc/environmentou $HOME/.pam_environment(consulte man pam_env). Você também pode configurá-los /etc/security/pam_env.confusando uma sintaxe especial. Aqui está como defino minhas variáveis ​​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, eu definiria essas variáveis ​​em /etc/profile.d/custom.sh. No entanto, alguns aplicativos são iniciados antes da leitura do arquivo. A mudança para o método PAM resolveu o problema de vários aplicativos que se comportaram dessa maneira.


5
Nota: isso não segue os padrões especificados na Especificação do diretório base
Tom Hale

2
@ TomHale Claro que não, o objetivo principal de definir as variáveis ​​é substituir os padrões. Se você estiver satisfeito com os padrões, não precisará definir essas variáveis.
precisa saber é o seguinte

11
O Ubuntu 14.04 não define as variáveis ​​de diretório XDG por padrão - apenas porque há uma especificação, não significa que a distro de uma pessoa a siga.
Tom Hale

2
Não importa se eu quero saber export LESSHISTFILE="$XDG_CACHE_HOME"/less/historyonde lessnão está ciente das especificações e os padrões ainda não foram definidos pela minha distribuição.
Tom Hale #

2
@ TomHale, a especificação não define para que o sistema operacional deve definir as variáveis; define variáveis ​​que, se definidas e não vazias, o aplicativo deve usar. E se a variável não estiver definida ou estiver vazia, o aplicativo deverá usar o caminho padrão referenciado na especificação. Portanto, seu pequeno exemplo não é compatível com as especificações, pois não verifica primeiro se XDG_CACHE_HOMEestá definido e não está vazio. Em vez disso, deveria ser:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
villapx 4/18/18

0

Para usuários do Zsh, defina-o em seu .zshenvarquivo

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

11
Downvoter quer se explicar?
smac89
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.