Rzeczywiście, obecna krótka odpowiedź na to pytanie jest niemożliwa , ponieważ niektóre aplikacje zakodowały ścieżkę. Niemniej jednak wiele aplikacji, które nie obsługują katalogów XDG, umożliwia ustawianie innych katalogów za pomocą zmiennych środowiskowych. Czasami musisz być w stanie zmienić konfigurację całego systemu, na przykład z powłoką, ale przez większość czasu powinieneś być w stanie wykonać ten krok jako użytkownik nieuprzywilejowany.
Ustawiam cię
# 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
'
Jeśli używasz kilku powłok, na przykład zsh dla powłoki interaktywnej, ale innej do tworzenia skryptów, możesz zechcieć utworzyć $XDG_CONFIG_HOME/profile
plik, który uzyskasz w odpowiednim skrypcie inicjującym powłoki.
Ustawianie zmiennych środowiskowych
# 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"
Obejść
SSH
SSH zapewnia sposób zmiany pliku konfiguracyjnego klienta, ale - o ile się dowiedziałem - tylko za pomocą wiersza poleceń. Tak więc jednym z rozwiązań, aby zawsze wywoływać klientów bez domyślnego położenia, może być:
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"
I ${XDG_CONFIG_HOME}/ssh/config
powinieneś zawierać coś takiego:
Host *
IdentityFile /home/user/.config/ssh/id_dsa
Co jeszcze nie działa
Chociaż GNUPGHOME
jest to udokumentowana zmienna, w Fedorze 21 skończysz z tworzeniem nowego ~/.gnupg
katalogu po uruchomieniu nowej sesji.
Chociaż ICEauthority
jest to udokumentowana zmienna, w Fedorze 21 skończysz z tworzeniem nowego pliku cookie po uruchomieniu nowej sesji.
Zawartość pliku kropkowego ~/.swt
powinna być prawdopodobnie przechowywana bezpośrednio ${XDG_DATA_HOME}
, ponieważ oba mają lib
katalogi. Nie znaleziono dokumentacji, jak to zrobić, jeśli jest to możliwe.
Produkty Mozilla nie obsługują odpowiedniej zmiennej środowiskowej, zobacz Produkty Mozilla nie zezwalają na korzystanie z niestandardowego katalogu konfiguracji użytkownika i wsparcie dla specyfikacji katalogu podstawowego Freedesktop.org XDG .
Inne przydatne źródła