XDG Base Directory

提供: ArchWiki
2016年10月22日 (土) 17:04時点におけるKusakata (トーク | 投稿記録)による版 (→‎貢献: 翻訳)
ナビゲーションに移動 検索に移動

関連記事

この記事では2003年に導入された XDG Base Directory Specification を使用しているソフトウェアを整理しています。ここでは一般的に使われているドットファイルと対応状態を並べて仕様がどれだけ使われているか示します。Base Directory Specification に対応していないソフトウェアについては、擬似的に対応させる方法を説明します。

ただし環境変数やコンパイルオプションに保存されているコードを実行したり、ソースにパッチを適用したりする方法は除外します。設定はあくまでシステム間で相互運用できるべきでありコンパイルオプションを使ってしまうと使用が制限されるためです。

XDG Base Directory Specification

フルスペック を読んでください。このセクションでは概要だけを抽出しています。

デフォルトでは pam_systemd によって XDG_RUNTIME_DIR だけが設定されます。既存のディレクトリの絶対パスを使って明示的に他の変数を定義するかどうかはユーザー次第です。FS#31204[1] を見てください。

ユーザーディレクトリ

  • XDG_CONFIG_HOME
    • ユーザー個別の設定が書き込まれるディレクトリ (/etc と類似)。
    • デフォルトは $HOME/.config です。
  • XDG_CACHE_HOME
    • ユーザー個別の重要でない (キャッシュ) データが書き込まれるディレクトリ (/var/cache と類似)。
    • デフォルトは $HOME/.cache です。
  • XDG_DATA_HOME
    • ユーザー個別のデータファイルが書き込まれるディレクトリ (/usr/share と類似)。
    • デフォルトは $HOME/.local/share です。
  • XDG_RUNTIME_DIR
    • ソケットや名前付きパイプなどのような必須でないユーザー個別のデータファイルに使われます。
    • デフォルト値は必ずしも設定する必要はありません。設定されていない場合は警告が表示されます。
    • ディレクトリの所有者がユーザーでアクセスモードが 0700 である必要があります。
    • OS の標準機能だけで動作するファイルシステムを使用します。
    • ローカルファイルシステム上に存在する必要があります。
    • 定期的にファイルが消去される可能性があります。
    • 永続的に保持したい場合は6時間毎に変更を加えるかスティッキービットを設定します。
    • ユーザーがログインしている値だけ存在します。
    • tmpfs でマウントされることもあるので巨大なファイルは保存できません。

システムディレクトリ

  • XDG_DATA_DIRS
    • : でディレクトリを区切ります (PATH と類似)。
    • デフォルトは /usr/local/share:/usr/share です。
  • XDG_CONFIG_DIRS
    • : でディレクトリを区切ります (PATH と類似)。
    • デフォルトは /etc/xdg です。

例外

以下のディレクトリやファイルには長い歴史があり、ファイルやディレクトリがそこにあると想定して書き込みを行うツールが存在するので変更されることはありません。

活発に開発あるいはメンテナンスを受けているツールもありますが、前述の理由により Base Directory Specification にあわせて開発者が変更を受け入れることはおそらくないでしょう。

~/.ssh
DropBear や OpenSSH など多数の ssh デーモン・クライアントが使用しています。OpenSSH Bug 2050 を参照。
~/.pki
Mozilla の NSS Project が使用しているディレクトリ。
~/.netrc
~/.ssh と同じように、多数のプログラムが使用しています。curl (CURLOPT_NETRC_FILE), ftp (NETRC), s-nail (NETRC) などのプロジェクトが該当します。ディレクトリを変更できる場合もありますが w3m, wget, lftp など多くのプログラムが設定に対応していません。
~/.profile
様々なシェルやディスプレイマネージャが使用しています。~/.netrc と類似。

貢献

ソフトウェアを追加するときは適切なセクションを使ってください。

コードの評価 (vimVIMINIT など)、パッチやコンパイルオプションが必要な方法、あるいはハードコードと考えられる方法は載せるべきではありません。また、Haskell の cabal や eclipse など難しい方法もハードコードとして扱います。

  • 1番目のカラムはプロジェクト名です。できればコマンド名にしてください。ソフトウェアのウェブサイトか適切な wiki の記事にリンクさせます。
  • 2番目のカラムはプロジェクトが使用するレガシーなファイルやディレクトリです。もはや読み込まれない場合でも確認できるように記述してください。
  • 3番目のカラムは XDG Base Directory に切り替わったプロジェクトのコミットあるいはバージョンです。4番目のカラムにはその議論がある場合にリンクを載せてください。
  • 最後のカラムにはサポートしていないプロジェクトのための適切な対処方法を記載します。完結に書いてください。曖昧な部分がある場合は自由に追記してください。

サポートしているソフトウェア

アプリケーション 旧パス 対応開始 議論 ノート
antimicro ~/.antimicro edba864 [2]
aria2 ~/.aria2 8bc1d37 [3]
beets
blender ~/.blender 4293f473 [4]
burp f2388e9
chromium ~/.chromium 23057 [5] [6]
citra ~/.citra-emu f7c3193fec [7]
cower 8b70805
d-feet ~/.d-feet 7f6104b
dconf
dolphin-emu ~/.dolphin-emu a498c68 [8]
dunst 78b6e2b1 [9]
dwb
fish
fontconfig ~/.fontconfig 8c255fb1
fontforge ~/.FontForge ~/.PfaEdit e4c2cc7432 [10] [11]
fontconfig ~/.fonts "$XDG_DATA_HOME"/fonts を使用します。
freerdp ~/.freerdp edf6e7258d
gconf ~/.gconf fc28caa7 [12]
git ~/.gitconfig 0d94427e
gstreamer-1.0 4e36f93924cf [13]
gtk3
htop ~/.htoprc 93233a67
i3 ~/.i3 7c130fb54
i3status ~/.i3status.conf c3f7fc4994
imagemagick
inkscape ~/.inkscape 0.47 [14]
lftp ~/.lftp 21dc400 [15]
lgogdownloader ~/.gogdownloader d430af63d000 [16]
LibreOffice a6f56f70 25bd2eec [17]
livestreamer ~/.livestreamerrc ea805917 [18]
llpp 3ab86f0cb 現在 llpp はディレクトリを作成せず XDG_CONFIG_HOME の直下に設定を保存します。
mc ~/.mc 1b9957058 0b7115647 ce401d797 [19]
mintty ~/.minttyrc cff1bd8f v2.3.7. [20]
milkytracker ~/.milkytracker_config eb487c55 [21]
mpd ~/.mpdconf 87b73284
mpv ~/.mpv cb250d490 [22]
mypaint ~/.mypaint cf723b74cd
ncmpcpp ~/.ncmpcpp 38d9f811 27cd86e0 [23] [24] ncmpcpp_directory を設定しないと error.log ファイルが ~/.ncmpcpp に保存されます。
neovim ~/.nvim ~/.nvimlog ~/.nviminfo 1ca5646bb [25] [26]
newsbeuter ~/.newsbeuter 3c57824c5 [27] "$XDG_DATA_HOME"/newsbeuter"$XDG_CONFIG_HOME"/newsbeuter を作成する必要があります [28]
OfflineIMAP ~/.offlineimaprc 5150de5 [29]
opentyrian ~/.opentyrian 8d45ff2 [30]
pcsx2 ~/.pcsx2 87f1e8f77 a9020c606 3b22f0fb0 0a012aec2 [31] [32]
ppsspp ~/.ppsspp 132fe47c7d [33]
orbment
pacman ~/.makepkg.conf 80eca94c8 [34]
PulseAudio ~/.pulse ~/.pulse-cookie 59a8618dcd9 87ae8307057 9ab510a6921 4c195bcc9d5 [35]
pyroom
qutebrowser
qtile fd8686e 66d704b 51cff01 [36] 仕様と異なるファイルやディレクトリを作成するバーウィジェットも存在しますが、大抵の場合は設定で変更できます。
retroarch
rr ~/.rr 02e7d41e [37]
surfraw ~/.surfraw.conf ~/.surfraw.bookmarks 3e4591d8 bd8c427d f57fc718
sway ~/.sway/config 614393c09 [38]
systemd
termite
transmission ~/.transmission 5517 [39]
util-linux 570b32100
vimb
VLC media player ~/.vlcrc 16f32e15 [40]
wireshark ~/.wireshark b0b53fa5
xsettingsd ~/.xsettingsd 4ecd7be
warsow ~/.warsow-2.x 98ece3f [41]
uzbl [42] c6fd63a

部分的にサポートしているソフトウェア

アプリケーション 旧パス 対応開始 議論 ノート
abook ~/.abook $ abook --config "$XDG_CONFIG_HOME"/abook/abookrc \

--datafile "$XDG_CACHE_HOME"/abook/addressbook

Atom ~/.atom $ export ATOM_HOME="$XDG_DATA_HOME"/atom
aspell ~/.aspell.conf
cargo ~/.cargo [43] [44] $ export CARGO_HOME="$XDG_DATA_HOME"/cargo
ccache ~/.ccache $ export CCACHE_DIR="$XDG_CACHE_HOME"/ccache
conky ~/.conkyrc 00481ee [45] $ conky --config="$XDG_CONFIG_HOME"/conky/conkyrc
crawl ~/.crawl $ export CRAWL_DIR="$XDG_DATA_HOME"/crawl/ # Trailing '/' is required.
composer ~/.composer $ export COMPOSER_HOME="$XDG_CONFIG_HOME"/composer

$ export COMPOSER_CACHE_DIR="$XDG_CACHE_HOME"/composer

coreutils ~/.dircolors $ source "$(dircolors "$XDG_CONFIG_HOME"/dircolors)"
dict ~/.dictrc $ dict -c "$XDG_CONFIG_HOME"/dict/dictrc
ELinks ~/.elinks $ export ELINKS_CONFDIR="$XDG_CONFIG_HOME"/elinks
emscripten ~/.emscripten ~/.emscripten_sanity ~/.emscripten_ports ~/.emscripten_cache__last_clear 3624 $ export EM_CONFIG="$XDG_CONFIG_HOME"/emscripten/config

$ export EM_CACHE="$XDG_CACHE_HOME"/emscripten/cache $ export EM_PORTS="$XDG_DATA_HOME"/emscripten/cache $ emcc --em-config "$XDG_CONFIG_HOME"/emscripten/config --em-cache "$XDG_CACHE_HOME"/emscripten/cache

PulseAudio ~/.esd_auth module-esound-protocol-unix.so モジュールによって生成されます。別の場所を使用するように設定することもできますが /etc/pulse/default.pa"$XDG_CONFIG_HOME"/pulse/default.pa でモジュールをコメントアウトしてしまう方が簡単です。
gdb ~/.gdbinit $ gdb -nh -x "$XDG_CONFIG_HOME"/gdb/init
GIMP ~/.gimp-2.8 60e0cfe [46] [47] $ export GIMP2_DIRECTORY="$XDG_CONFIG_HOME"/gimp
gliv ~/.glivrc $ gliv --glivrc="$XDG_CONFIG_HOME"/gliv/glivrc
gpg ~/.gnupg $ export GNUPGHOME="$XDG_CONFIG_HOME"/gnupg

$ gpg2 --homedir "$XDG_CONFIG_HOME"/gnupg

gtk2 ~/.gtkrc-2.0 $ export GTK2_RC_FILES="$XDG_CONFIG_HOME"/gtk-2.0/gtkrc
gtk ~/.gtkrc $ export GTK_RC_FILES="$XDG_CONFIG_HOME"/gtk-1.0/gtkrc
httpie ~/.httpie [48] $ export HTTPIE_CONFIG_DIR="$XDG_CONFIG_HOME"/httpie
irssi ~/.irssi [49] irssi --config="$XDG_CONFIG_HOME"/irssi/config --home="$XDG_DATA_HOME"/irssi
ipython/jupyter ~/.ipython $ export IPYTHONDIR="$XDG_CONFIG_HOME"/jupyter

$ export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME"/jupyter

isync ~/.mbsyncrc $ mbsync -c "$XDG_CONFIG_HOME"/isync/mbsyncrc
libice ~/.ICEauthority $ export ICEAUTHORITY="$XDG_RUNTIME_DIR"/X11/iceauthority
less ~/.lesshst $ export LESSHISTFILE="$XDG_CACHE_HOME"/less/history ("$XDG_CACHE_HOME"/less ディレクトリを手動で作成する必要があります)。

$ export LESSHISTFILE=- を使うことで機能を無効化できます。

$ export LESSKEY="$XDG_CONFIG_HOME"/less/lesskey

libdvdcss ~/.dvdcss [50] $ export DVDCSS_CACHE="$XDG_DATA_HOME"/dvdcss
ltrace ~/.ltrace.conf $ ltrace -F "$XDG_CONFIG_HOME"/ltrace/ltrace.conf
Mathematica ~/.Mathematica $ export MATHEMATICA_USERBASE="$XDG_CONFIG_HOME"/mathematica
mednafen ~/.mednafen $ export MEDNAFEN_HOME="$XDG_CONFIG_HOME"/mednafen
moc ~/.moc $ mocp -M "$XDG_CONFIG_HOME"/moc

$ mocp -O MOCDir="$XDG_CONFIG_HOME"/moc

MPlayer ~/.mplayer $ export MPLAYER_HOME="$XDG_CONFIG_HOME"/mplayer
mutt ~/.mutt [51] $ mutt -F "$XDG_CONFIG_HOME"/mutt/muttrc
muttrc
set header_cache = $XDG_CACHE_HOME/mutt/headers
set message_cachedir = $XDG_DATA_HOME/mutt/messages
set mailcap_path = $XDG_CONFIG_HOME/mutt/mailcap
set record = $XDG_DATA_HOME/mutt/record/sent
notmuch ~/.notmuch-config [52] $ export NOTMUCH_CONFIG="$XDG_CONFIG_HOME"/notmuch/notmuchrc

$ export NMBGIT="$XDG_DATA_HOME"/notmuch/nmbug

ncurses ~/.terminfo $ export TERMINFO="$XDG_DATA_HOME"/terminfo # Precludes system path searching.

$ export TERMINFO_DIRS="$XDG_DATA_HOME"/terminfo:/usr/share/terminfo

npm ~/.npm ~/.npmrc [53] $ export NPM_CONFIG_USERCONFIG=$XDG_CONFIG_HOME/npm/npmrc
npmrc
cache=$XDG_CACHE_HOME/npm
prefix=$XDG_DATA_HOME/npm
NVIDIA, CUDA ~/.nv $ export __GL_SHADER_DISK_CACHE_PATH="$XDG_CACHE_HOME"/nv

$ export CUDA_CACHE_PATH="$XDG_CACHE_HOME"/nv

openscad ~/.OpenSCAD 7c3077b0f [54] XDG Base Directory Specification に完全には準拠していません。[55] を参照。

現在 ~/.local/shareハードコード されています。

python-setuptools ~/.python-eggs $ export PYTHON_EGG_CACHE="$XDG_CACHE_HOME"/python-eggs
readline ~/.inputrc $ export INPUTRC="$XDG_CONFIG_HOME"/readline/inputrc
rlwrap ~/.*_history [56] $ export RLWRAP_HOME="$XDG_DATA_HOME"/rlwrap
screen ~/.screenrc $ export SCREENRC="$XDG_CONFIG_HOME"/screen/screenrc
stack ~/.stack [57] $ export STACK_ROOT="$XDG_DATA_HOME"/stack
subversion ~/.subversion [58][59] $ svn --config-dir "$XDG_CONFIG_HOME"/subversion
tig ~/.tigrc $ export TIGRC_USER="$XDG_CONFIG_HOME"/tig/tigrc
tmux ~/.tmux.conf [60] [61] $ tmux -f "$XDG_CONFIG_HOME"/tmux/tmux.conf

$ export TMUX_TMPDIR="$XDG_RUNTIME_DIR"/tmux

urxvtd ~/.urxvt/urxvtd-hostname $ export RXVT_SOCKET="$XDG_RUNTIME_DIR"/urxvt/urxvt-"$(hostname)"
WeeChat ~/.weechat [62] $ export WEECHAT_HOME="$XDG_CONFIG_HOME"/weechat

$ weechat -d "$XDG_CONFIG_HOME"/weechat

wine ~/.wine [63] $ export WINEPREFIX="$XDG_DATA_HOME"/wine
xorg-xauth ~/.Xauthority $ export XAUTHORITY="$XDG_RUNTIME_DIR"/X11/xauthority
libx11 ~/.XCompose $ export XCOMPOSEFILE="$XDG_CONFIG_HOME"/X11/xcompose
xorg-xinit ~/.xinitrc $ export XINITRC="$XDG_CONFIG_HOME"/X11/xinitrc
xorg-xrdb ~/.Xresources ~/.Xdefaults xrdb -load ~/.config/X11/xresources のようにパスを指定して xrdb でリソースがロードされるように Xresources使用 することができます。
uncrustify ~/.uncrustify.cfg $ export UNCRUSTIFY_CONFIG="$XDG_CONFIG_HOME"/uncrustify/uncrustify.cfg
xsel ~/.xsel.log [64] $ xsel --logfile "$XDG_CACHE_HOME"/xsel/xsel.log
ChezScheme ~/.chezscheme_history $ petite --eehistory "$XDG_DATA_HOME"/chezscheme/history
nvidia-settings ~/.nvidia-settings-rc $ nvidia-settings --config="$XDG_CONFIG_HOME"/nvidia/settings
get_iplayer ~/.get_iplayer $ export GETIPLAYERUSERPREFS="$XDG_DATA_HOME"/get_iplayer

ハードコードされているソフトウェア

アプリケーション 旧パス 対応開始 議論 ノート
Apache Directory Studio ~/.ApacheDirectoryStudio
AMule ~/.aMule
bash ~/.bashrc ~/.bash_history ~/.bash_profile ~/.bash_login ~/.bash_logout [65]
  • 指定された bashrc/etc/bashrc から読み込まれます。
  • export HISTFILE="$XDG_DATA_HOME"/bash/history
cabal ~/.cabal [66] 対処方法は議論を見てください。簡単な方法ではありませんが Base Directory 準拠をエミュレートできます。
CUPS ~/.cups [67]
dbus ~/.dbus [68] kdbus を使うことで回避できます。
eclipse ~/.eclipse [69] -Dosgi.configuration.area=@user.home/.config/.. オプションで上書きできますがコマンドラインで指定するのではなく "$ECLIPSE_HOME"/eclipse.ini" に追加する必要があり $ECLIPSE_HOME の書き込み権限が要ります (Arch Linux では $ECLIPSE_HOME/usr/bin/eclipse に決め打ちされています)。
emacs ~/.emacs ~/.emacs.d [70] HOME を設定することができますが、予期せぬ副作用を生みます。他の Emacs 環境変数を修正してロードパスを変更して手動で init ファイルをロードする site ファイルを作成するのが確実ですが、ロードプロセスが大幅に変わってしまいます。
firefox ~/.mozilla [71]
GNU parallel ~/.parallel
gstreamer-0.10 ~/.gstreamer-0.10 gstreamer-1.0 を使ってください。
idris ~/.idris
julia ~/.juliarc.jl ~/.julia_history [72] [73]
lldb ~/.lldb ~/.lldbinit
mathomatic ~/.mathomaticrc ~/.matho_history rlwrap mathomatic -r を使って RLWRAP_HOME 変数を適切に設定することで履歴を移動できます。
milkytracker ~/.milkytracker_config [74]
mongodb ~/.mongorc.js ~/.dbshell [75] Stack Overflow のスレッド ではコマンドラインスイッチの --norc を使うことを提案しています。
ncmpc ~/.ncmpc
palemoon ~/.moonchild productions [76]
perf ~/.debug tools/perf/util/config.c:18 でハードコードされています。
python ~/.python_history バージョン 3.4 からインタラクティブセッションの履歴は全てデフォルトで ~/.python_history に保存されますが、古いバージョンと同じ方法でカスタムパスを設定できます ([77] を参照)。
procps-ng ~/.toprc [78]
spectrwm ~/.spectrwm
SQLite ~/.sqlite_history [79][80]
vim ~/.vim ~/.vimrc ~/.viminfo 7.3.1178 から vim は ~/.vimrc が存在しない場合に ~/.vim/vimrc を検索します。
~/.vim/vimrc
set undodir=~/.cache/vim/undo " vim will not create this directory.
set directory=~/.cache/vim/swap " vim will not create this directory.
set backupdir=~/.cache/vim/backup " vim will not create this directory.
set viminfo+=n~/.cache/vim/viminfo
vimperator ~/.vimperatorrc [81] $ export VIMPERATOR_INIT=":source $XDG_CONFIG_HOME/vimperator/vimperatorrc"

$ export VIMPERATOR_RUNTIME="$XDG_CONFIG_HOME"/vimperator

wpa_cli ~/.wpa_cli_history
xdg-utils ~/.gnome 何らかの理由で xdg-desktop-menu スクリプトは gnome_user_dir="$HOME/.gnome/apps" をハードコードしており、chromium などによって使われています。
xmonad ~/.xmonad [82]
xombrero ~/.xombrero [83]
zsh ~/.zshrc ~/.zprofile ~/.zshenv ~/.zlogin ~/.zlogout ~/.histfile [84] ~/.zshenvZDOTDIR=$HOME/.config/zsh を export してください (ブートストラップ問題のためにハードコードされています)。/etc/zsh/zshenv にも追加することで HOME にドットファイルが必要なくなります。ただし root 権限が必要で設定はシステム全体に適用されます。

export HISTFILE="$XDG_DATA_HOME"/zsh/history

racket ~/.racketrc

ライブラリと言語のサポート

C
C99: Cloudef のシンプルな実装
Haskell
1.2.3.0 から directory で公式に対応 ab9d0810ce
xdg-basedir
Perl
File-BaseDir
perl-file-xdg
Python
pyxdg
Vala
GLib.Environment によるサポート。
get_user_cache_dir, get_user_data_dir, get_user_config_dir などを参照。

参照