In effetti, l'attuale breve risposta alla domanda è impossibile , poiché alcune applicazioni codificano il percorso. Tuttavia, molte applicazioni che non supportano specificamente le directory XDG consentono di impostare altre directory attraverso le variabili di ambiente. Qualche volta devi essere in grado di cambiare la configurazione dell'intero sistema, ad esempio con la shell, ma la maggior parte delle volte, dovresti essere in grado di eseguire il passaggio come utente senza privilegi.
Impostare la shell
# 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
'
Se si utilizzano più shell, ad esempio zsh per la shell interattiva, ma un'altra per gli script, è possibile che si desideri $XDG_CONFIG_HOME/profile
archiviare file che verranno generati nello script di inizializzazione della shell pertinente.
Impostazione delle variabili d'ambiente
# 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"
Aggirare
SSH
SSH fornisce un modo per modificare il file di configurazione del client, ma - per quanto ho trovato - solo attraverso la riga di comando. Quindi una soluzione per invocare sempre i client con nessuna postazione di default non può essere:
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"
E ${XDG_CONFIG_HOME}/ssh/config
dovresti contenere qualcosa come:
Host *
IdentityFile /home/user/.config/ssh/id_dsa
Cosa non funziona ancora
Sebbene GNUPGHOME
sia una variabile documentata, in Fedora 21 finirai con la creazione di una nuova ~/.gnupg
directory quando avvii una nuova sessione.
Sebbene ICEauthority
sia una variabile documentata, in Fedora 21 finirai con la creazione di un nuovo cookie quando avvii una nuova sessione.
Il ~/.swt
contenuto del file dot dovrebbe probabilmente essere archiviato direttamente in ${XDG_DATA_HOME}
, poiché entrambi hanno lib
directory. Non è stata trovata alcuna documentazione su come farlo, se possibile.
I prodotti Mozilla non supportano una variabile d'ambiente appropriata, consultare i prodotti Mozilla non consentono di utilizzare una directory di configurazione utente personalizzata e il supporto per le specifiche della directory di base XDG di Freedesktop.org .
Altre fonti utili