En effet, la réponse courte actuelle à la question est que vous ne pouvez pas , car certaines applications codent en dur le chemin. Néanmoins, de nombreuses applications qui ne prennent pas spécifiquement en charge les répertoires XDG permettent de définir d'autres répertoires via des variables d'environnement. Vous devez parfois modifier la configuration à l'échelle du système, par exemple avec le shell, mais la plupart du temps, vous devriez pouvoir effectuer l'étape en tant qu'utilisateur non privilégié.
Mettre sa coquille
# Setting bash to use $XDG_CONFIG_HOME/bash, defaults to ~/.config/bash
confdir=${XDG_CONFIG_HOME:-$HOME/.config}/bash
### Moving existing files
mkdir -p -- "$confdir"
for file in "$HOME"/.bash*; do
dest=$confdir/$(basename "${file:1}")
mv -i -- "$file" "$dest" # don't overwrite without permission
done
### Sourcing and setting variables
sudo sh -c 'cat >>/etc/profile.d/bash_in_xdg_config_home.sh <<CONF
# Make bash follow the XDG_CONFIG_HOME convention
_confdir=\${XDG_CONFIG_HOME:-\$HOME/.config}/bash
if [ -d "$_confdir" ] && [ "\$0" = "bash" ]
then
. "\$_confdir"/bash_profile
. "\$_confdir"/bashrc
HISTFILE=\$_confdir/bash_history
fi
unset _confdir
CONF
'
sudo sh -c 'cat >>/etc/bash.bash_logout <<CONF
if [ -s "\${XDG_CONFIG_HOME:-\$HOME/.config}/bash/bash_logout" ]
then
. "\${XDG_CONFIG_HOME:-\$HOME/.config}/bash/bash_logout"
fi
CONF
'
# Setting zsh
## System wide configuration (using xdg directories)
sudo sh -c 'cat >>/etc/zshenv <<CONF
if [[ -d "\${XDG_CONFIG_HOME:-\$HOME/.config}"/zsh ]]
then
export ZDOTDIR=\${XDG_CONFIG_HOME:-\$HOME/.config}/zsh
fi
CONF
'
Si vous utilisez plusieurs shell, par exemple zsh pour le shell interactif, mais un autre pour l'écriture de scripts, vous voudrez peut-être $XDG_CONFIG_HOME/profile
déposer, que vous allez trouver dans le script d'initialisation du shell approprié.
Définition des variables d'environnement
# bazaar
export BZRPATH=$XDG_CONFIG_HOME/bazaar
export BZR_PLUGIN_PATH=$XDG_DATA_HOME/bazaar
export BZR_HOME=$XDG_CACHE_HOME/bazaar
# gnupg
export GNUPGHOME=${XDG_CONFIG_HOME}/gnupg
# ICEauthority
export ICEAUTHORITY=${XDG_CACHE_HOME}/ICEauthority
# less
export LESSHISTFILE="${XDG_CONFIG_HOME}/less/history"
export LESSKEY="${XDG_CONFIG_HOME}/less/keys"
# mplayer
export MPLAYER_HOME=$XDG_CONFIG_HOME/mplayer
# subversion
export SUBVERSION_HOME=$XDG_CONFIG_HOME/subversion
# vim
export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | source $MYVIMRC'
export VIMDOTDIR="$XDG_CONFIG_HOME/vim"
Solution de contournement
SSH
SSH fournit un moyen de modifier le fichier de configuration client, mais - autant que je sache - uniquement via la ligne de commande. Ainsi, une solution pour toujours invoquer les clients avec un emplacement par défaut non peut être:
if [ -s "${XDG_CONFIG_HOME}/ssh/config" ]
then
SSH_CONFIG="-F ${XDG_CONFIG_HOME}/ssh/config"
fi
if [ -s "${XDG_CONFIG_HOME}/ssh/id_dsa" ]
then
SSH_ID="-i ${XDG_CONFIG_HOME}/ssh/id_dsa"
fi
alias ssh="ssh $SSH_CONFIG $SSH_ID "
alias ssh-copy-id="ssh-copy-id $SSH_ID"
Et votre ${XDG_CONFIG_HOME}/ssh/config
devrait contenir quelque chose comme:
Host *
IdentityFile /home/user/.config/ssh/id_dsa
Ce qui ne fonctionne pas encore
Bien qu'il s'agisse d' GNUPGHOME
une variable documentée, sous Fedora 21, vous vous retrouverez avec la création d'un nouveau ~/.gnupg
répertoire lorsque vous lancerez une nouvelle session.
Bien qu'il s'agisse d' ICEauthority
une variable documentée, sous Fedora 21, vous vous retrouverez avec la création d'un nouveau cookie lorsque vous lancerez une nouvelle session.
Le ~/.swt
contenu du fichier dot devrait probablement être stocké directement dans ${XDG_DATA_HOME}
, car les deux ont des lib
répertoires. Aucune documentation n'a été trouvée sur la façon de procéder si cela est possible.
Les produits Mozilla ne prennent pas en charge une variable d'environnement appropriée, voir Les produits Mozilla ne permettent pas d'utiliser un répertoire de configuration utilisateur personnalisé et la prise en charge de la spécification de répertoire de base Freedesktop.org XDG .
Autres sources utiles