De hecho, la respuesta corta actual a la pregunta es que no puedes , ya que algunas aplicaciones codifican la ruta. Sin embargo, muchas aplicaciones que no admiten específicamente directorios XDG permiten configurar otros directorios a través de variables de entorno. En algún momento debe poder cambiar la configuración de todo el sistema, por ejemplo, con shell, pero la mayoría de las veces, debe poder realizar el paso como un usuario sin privilegios.
Poniendo tu caparazón
# 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 usa varios shell, por ejemplo zsh para shell interactivo, pero otro para scripting, es posible que desee $XDG_CONFIG_HOME/profile
archivar, que obtendrá en el script de inicialización de shell relevante.
Establecer variables de entorno
# 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"
Solución alterna
SSH
SSH proporciona una forma de cambiar el archivo de configuración del cliente, pero, por lo que encontré, solo a través de la línea de comandos. Entonces, una solución para invocar siempre a los clientes con un emplazamiento no predeterminado puede ser:
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"
Y ${XDG_CONFIG_HOME}/ssh/config
debería contener algo como:
Host *
IdentityFile /home/user/.config/ssh/id_dsa
Lo que aún no funciona
Aunque GNUPGHOME
es una variable documentada, bajo Fedora 21 terminarás con la creación de un nuevo ~/.gnupg
directorio cuando inicies una nueva sesión.
Aunque ICEauthority
es una variable documentada, bajo Fedora 21 terminará con la creación de una nueva cookie cuando inicie una nueva sesión.
El ~/.swt
contenido del archivo de puntos probablemente debería almacenarse directamente ${XDG_DATA_HOME}
, ya que ambos tienen lib
directorios. No se encontró documentación sobre cómo hacerlo si es posible.
Los productos de Mozilla no admiten una variable de entorno adecuada; consulte los productos de Mozilla no permiten utilizar un directorio de configuración de usuario personalizado y Soporte para la especificación de directorio base XDG de Freedesktop.org .
Otras fuentes utiles