XDG 기본 디렉토리 규격은 디렉토리 하나의 세트가 사용자 폴더에 소위 점 파일 / 디렉토리에서 이동하는 데 사용되는 데이터를 저장하는 데 사용 할 수 있습니다 제공합니다. 이 글은이 디렉토리를 가능한 많이 사용하고자하는 사용자를 돕기 위해 작성되었습니다.
XDG 기본 디렉토리 규격은 디렉토리 하나의 세트가 사용자 폴더에 소위 점 파일 / 디렉토리에서 이동하는 데 사용되는 데이터를 저장하는 데 사용 할 수 있습니다 제공합니다. 이 글은이 디렉토리를 가능한 많이 사용하고자하는 사용자를 돕기 위해 작성되었습니다.
답변:
실제로, 일부 응용 프로그램은 경로를 하드 코딩 하기 때문에 질문에 대한 현재 짧은 대답은 할 수 없습니다 . 그럼에도 불구하고 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는 클라이언트 구성 파일을 변경하는 방법을 제공하지만 명령 줄을 통해서만 찾을 수 있습니다. 따라서 기본 배치가없는 클라이언트를 항상 호출하는 솔루션은 다음과 같습니다.
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에서는 새 세션을 시작할 때 새 쿠키를 생성하게됩니다.
도트 파일 ~/.swt
내용은 ${XDG_DATA_HOME}
모두 lib
디렉토리를 가지고 있기 때문에에 직접 저장해야합니다 . 가능하다면 그 방법에 대한 문서를 찾지 못했습니다.
Mozilla 제품은 적절한 환경 변수를 지원하지 않습니다. Mozilla 제품은 사용자 정의 사용자 구성 디렉토리 및 Freedesktop.org XDG 기본 디렉토리 사양 지원 을 사용할 수 없습니다를 참조하십시오 .
export XAUTHORITY="$XDG_CACHE_HOME/Xauthority"
2) 변수를 인용하십시오! (예를 들어 (1) 참조) 3) 나의 bash
경우 :export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
지속적으로 업데이트되는 Arch Linux 위키 페이지 XDG 기본 디렉토리 지원 을 참조하십시오 .
GIT
난 그냥 내 이동 .gitconfig
에를 XDG_CONFIG_HOME
OSX에. git-config 문서에 따라 (평판으로 인해 링크가 생략되었습니다).
Second user-specific configuration file. If $XDG_CONFIG_HOME is not set or
empty, $HOME/.config/git/config will be used. Any single-valued variable
set in this file will be overwritten by whatever is in ~/.gitconfig. It is
a good idea not to create this file if you sometimes use older versions of
Git, as support for this file was added fairly recently.
Mavericks에서 시스템 전체 PATH 환경 변수 설정의 지시 사항을 사용하여 환경 변수를 설정했습니다 . 파일을 XDG_CONFIG_HOME/git/config
직접 작성해야하며 ~/.gitconfig
존재하는 경우 우선권을 갖습니다.
정력
나는 Tom Vincent의 2011 기사 Vim respect XDG를 사용 했으며 작동하는 것 같습니다. 위의 답변에 대해 잘 모르겠습니다. VIMDOTDIR
일이 아닌 것 같습니다.
Zsh는 bash보다 약간 더 나은 작업을 수행하여 $ZDOTDIR
변수를 사용하여 집을 정리할 수 있습니다 . zsh를 방해하지 않으려면 ~/.zshenv
파일에 다음을 추가해야 합니다.
# ~/.zshenv contents
# this is the bare bones setup to move everything to XDG dir
ZDOTDIR=$HOME/.config/zsh
루트 권한이있는 경우이를 대신 /etc/zsh/zshenv
하여 $ HOME에 zsh 도트 파일이 필요하지 않도록 할 수 있습니다 . 여기에서, 다른 모든 zsh을의 dotfiles가로 이동할 수 있습니다 ~/.config/zsh
처럼 .zshrc
. 또한 zsh 기록을 $XDG_DATA_HOME
위치에 추가하는 것이 좋습니다 HISTFILE=$XDG_DATA_HOME/zsh/zsh_history
.
일부 앱은 기본적으로 XDG 위치를 찾고 $ HOME 디렉토리에 레거시 도트 파일이 있기 때문에이를 인식하지 못할 수도 있습니다. 힘내이의 좋은 예입니다 - 당신이있는 경우 ~/.gitconfig
,로 이동하십시오 ~/.config/git/config
. 개인적으로 좋아하는 Fish Shell 은 기본적으로 ~ / .config도 사용합니다.
또한 다른 앱에서 자체 버전의 re- $ HOME-ing 변수를 확인하십시오. 많은 사람들이 변수를 통해 XDG를 지원합니다.
export ATOM_HOME=$XDG_CONFIG_HOME/atom
export LPASS_HOME=$XDG_CONFIG_HOME/lpass
export _Z_DATA=$XDG_DATA_HOME/z/z.txt
그러나 여전히 매우 광범위한 수치심의 XDG 벽이 있습니다. Tmux는 $ HOME의 혼란을 막는 데 적극적으로 참여했습니다 . pylint와 동일합니다 . 그리고 줄리아 . 그리고 목록은 계속됩니다. Arch는 XDG 지원의 훌륭한 실행 목록을 유지합니다 .
솔직히, 나는 그것을지지하는 것에 대한 저항을 이해할 수 없다. 사용자는 앱이 $ HOME에 대해 과도하게 실행되지 않아야한다는 명확한 메시지를 명확하게 보내야합니다. 더 이상 괜찮지 않아 현대의 시스템은 20 년 전과 같이 수십 개의 앱이 아니라 $ HOME을 오염시키는 수백 개의 앱을 사용합니다.