Дійсно, нинішню коротку відповідь на це питання ви не можете , оскільки деякі програми жорстко кодують шлях. Тим не менш, багато додатків, які спеціально не підтримують каталоги XDG, дозволяють встановлювати інші каталоги через змінні середовища. Деякий час потрібно мати змогу змінити конфігурацію системи, наприклад, з оболонкою, але більшу частину часу ви повинні мати можливість виконувати крок як непривілейований користувач.
Налаштування оболонки
# 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
'
Якщо ви використовуєте декілька оболонок, наприклад zsh для інтерактивної оболонки, але іншу для створення сценаріїв, ви можете подати $XDG_CONFIG_HOME/profile
файл, який ви отримаєте у відповідному сценарії ініціалізації оболонки.
Встановлення змінних середовища
# 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"
Пообіцяйте
SSH
SSH дає спосіб змінити файл конфігурації клієнта, але - наскільки я виявив - лише через командний рядок. Таким чином, одне рішення завжди викликати клієнтів без заміщення за замовчуванням може бути:
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"
І ваше ${XDG_CONFIG_HOME}/ssh/config
повинно містити щось на зразок:
Host *
IdentityFile /home/user/.config/ssh/id_dsa
Що ще не працює
Хоча GNUPGHOME
це задокументована змінна, у Fedora 21 ви закінчите створення нового ~/.gnupg
каталогу під час запуску нового сеансу.
Хоча ICEauthority
це задокументована змінна, у Fedora 21 ви закінчите створення нового файлу cookie під час запуску нового сеансу.
Вміст dotfile, ~/.swt
ймовірно, повинен зберігатися безпосередньо ${XDG_DATA_HOME}
, оскільки обидва мають lib
каталоги. Не знайдено жодної документації, як це зробити, якщо це можливо.
Продукти Mozilla не підтримують відповідну змінну середовища, див. Продукти Mozilla не дозволяють використовувати спеціальний каталог конфігурації користувача та підтримку специфікації базового каталогу Freedesktop.org XDG .
Інші корисні джерела