XDG Base Directory サポート

提供: ArchWiki
移動先: 案内検索

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

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

XDG Base Directory Specification

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

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

ユーザーディレクトリ

  • 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 です。

貢献

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

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

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

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

アプリケーション 旧パス 対応開始 議論 ノート
antimicro ~/.antimicro edba864 [1]
aria2 ~/.aria2 8bc1d37 [2]
blender ~/.blender 4293f473 [3]
burp f2388e9
chromium ~/.chromium 23057 [4] [5]
citra ~/.citra-emu f7c3193fec [6]
cower 8b70805
d-feet ~/.d-feet 7f6104b
dconf
dolphin-emu ~/.dolphin-emu a498c68 [7]
dr14-meter 7e777ca64 [8] ハードコード: $HOME/.config/dr14meter
dunst 78b6e2b1 [9]
dwb
fish
fontconfig ~/.fontconfig ~/.fonts 8c255fb1 フォントの保存には "$XDG_DATA_HOME"/fonts を使ってください。
fontforge ~/.FontForge ~/.PfaEdit e4c2cc7432 [10] [11]
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]
latexmk ~/.latexmkrc
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]
milkytracker ~/.milkytracker_config eb487c55 [20]
mintty ~/.minttyrc cff1bd8f v2.3.7 [21]
mpd ~/.mpdconf 87b73284
mpv ~/.mpv cb250d490 [22]
mutt ~/.mutt 42fee7585f [23]
mypaint ~/.mypaint cf723b74cd
ncmpcpp ~/.ncmpcpp 38d9f811 27cd86e0 [24] [25] ncmpcpp_directory を設定しないと error.log ファイルが ~/.ncmpcpp に保存されます。
neovim ~/.nvim ~/.nvimlog ~/.nviminfo 1ca5646bb [26] [27]
newsbeuter ~/.newsbeuter 3c57824c5 [28] "$XDG_DATA_HOME"/newsbeuter"$XDG_CONFIG_HOME"/newsbeuter を作成する必要があります [29]
OfflineIMAP ~/.offlineimaprc 5150de5 [30]
opentyrian ~/.opentyrian 8d45ff2 [31]
pcsx2 ~/.pcsx2 87f1e8f77 a9020c606 3b22f0fb0 0a012aec2 [32] [33]
ppsspp ~/.ppsspp 132fe47c7d [34]
procps-ng ~/.toprc af53e170b9 [35] [36]
orbment
pacman ~/.makepkg.conf 80eca94c8 [37]
PulseAudio ~/.pulse ~/.pulse-cookie 59a8618dcd9 87ae8307057 9ab510a6921 4c195bcc9d5 [38]
pyroom
qutebrowser
qtile fd8686e 66d704b 51cff01 [39] 仕様と異なるファイルやディレクトリを作成するバーウィジェットも存在しますが、大抵の場合は設定で変更できます。
retroarch
rr ~/.rr 02e7d41e [40]
sublime-text-devAUR キャッシュは $XDG_CACHE_HOME/sublime-text-3 ではなく $XDG_CONFIG_HOME/sublime-text-3/Cache に保存されます。
surfraw ~/.surfraw.conf ~/.surfraw.bookmarks 3e4591d8 bd8c427d f57fc718
sway ~/.sway/config 614393c09 [41]
systemd
termite
transmission ~/.transmission 5517 [42]
util-linux 570b32100
uzbl c6fd63a [43]
vimb
VirtualBox ~/.VirtualBox 4.3 [44]
VLC media player ~/.vlcrc 16f32e15 [45]
warsow ~/.warsow-2.x 98ece3f [46]
wireshark ~/.wireshark b0b53fa5
xsettingsd ~/.xsettingsd 4ecd7be
xmonad ~/.xmonad 40fc10b6 [47] [48] XMONAD_CONFIG_HOME, XMONAD_DATA_HOME, XMONAD_CACHE_HOME 環境変数が使えます。

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

アプリケーション 旧パス 対応開始 議論 ノート
abook ~/.abook $ abook --config "$XDG_CONFIG_HOME"/abook/abookrc --datafile "$XDG_CACHE_HOME"/abook/addressbook
Anki ~/Anki ~/Documents/Anki [49] [50] $ anki -b "$XDG_DATA_HOME"/Anki
aspell ~/.aspell.conf
Atom ~/.atom $ export ATOM_HOME="$XDG_DATA_HOME"/atom
cargo ~/.cargo [51] [52] $ export CARGO_HOME="$XDG_DATA_HOME"/cargo
ccache ~/.ccache $ export CCACHE_DIR="$XDG_CACHE_HOME"/ccache
ChezScheme ~/.chezscheme_history $ petite --eehistory "$XDG_DATA_HOME"/chezscheme/history
composer ~/.composer $ export COMPOSER_HOME="$XDG_CONFIG_HOME"/composer

$ export COMPOSER_CACHE_DIR="$XDG_CACHE_HOME"/composer

conky ~/.conkyrc 00481ee [53] $ conky --config="$XDG_CONFIG_HOME"/conky/conkyrc
coreutils ~/.dircolors $ source "$(dircolors "$XDG_CONFIG_HOME"/dircolors)"
crawl ~/.crawl 末尾の '/' は必須です: $ export CRAWL_DIR="$XDG_DATA_HOME"/crawl/
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

gdb ~/.gdbinit $ gdb -nh -x "$XDG_CONFIG_HOME"/gdb/init
get_iplayer ~/.get_iplayer $ export GETIPLAYERUSERPREFS="$XDG_DATA_HOME"/get_iplayer
GIMP ~/.gimp-2.8 ~/.thumbnails 60e0cfe [54] [55] $ export GIMP2_DIRECTORY="$XDG_CONFIG_HOME"/gimp
gliv ~/.glivrc $ gliv --glivrc="$XDG_CONFIG_HOME"/gliv/glivrc
gpg ~/.gnupg [56] [57] $ export GNUPGHOME="$XDG_CONFIG_HOME"/gnupg

$ gpg2 --homedir "$XDG_CONFIG_HOME"/gnupg

Google Earth ~/.googleearth ~/.config/Google/GoogleEarthPlus.confKMLPathCachePath オプションで一部のパスは変更できます。
GQ LDAP クライアント ~/.gq

~/.gq-state

1.51 $ export GQRC="$XDG_CONFIG_HOME"/gqrc

$ export GQSTATE="$XDG_DATA_HOME"/gq/gq-state

$ mkdir -p "$(dirname "$GQSTATE")"

gradle ~/.gradle [58] $ export GRADLE_USER_HOME="$XDG_DATA_HOME"/gradle
gtk ~/.gtkrc $ export GTK_RC_FILES="$XDG_CONFIG_HOME"/gtk-1.0/gtkrc
gtk2 ~/.gtkrc-2.0 $ export GTK2_RC_FILES="$XDG_CONFIG_HOME"/gtk-2.0/gtkrc
httpie ~/.httpie [59] $ export HTTPIE_CONFIG_DIR="$XDG_CONFIG_HOME"/httpie
ipython/jupyter ~/.ipython $ export IPYTHONDIR="$XDG_CONFIG_HOME"/jupyter

$ export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME"/jupyter

irssi ~/.irssi [60] irssi --config="$XDG_CONFIG_HOME"/irssi/config --home="$XDG_DATA_HOME"/irssi
isync ~/.mbsyncrc $ mbsync -c "$XDG_CONFIG_HOME"/isync/mbsyncrc
less ~/.lesshst $ export LESSHISTFILE="$XDG_CACHE_HOME"/less/history ("$XDG_CACHE_HOME"/less ディレクトリを手動で作成する必要があります)。

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

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

libdvdcss ~/.dvdcss [61] $ export DVDCSS_CACHE="$XDG_DATA_HOME"/dvdcss
libice ~/.ICEauthority [62] $ export ICEAUTHORITY="$XDG_RUNTIME_DIR"/X11/iceauthority
libx11 ~/.XCompose $ export XCOMPOSEFILE="$XDG_CONFIG_HOME"/X11/xcompose
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
ncurses ~/.terminfo $ export TERMINFO="$XDG_DATA_HOME"/terminfo # Precludes system path searching.

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

notmuch ~/.notmuch-config [63] $ export NOTMUCH_CONFIG="$XDG_CONFIG_HOME"/notmuch/notmuchrc

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

npm ~/.npm ~/.npmrc [64] $ 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

nvidia-settings ~/.nvidia-settings-rc $ nvidia-settings --config="$XDG_CONFIG_HOME"/nvidia/settings
openscad ~/.OpenSCAD 7c3077b0f [65] XDG Base Directory Specification に完全には準拠していません。[66] を参照。

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

OpenSSL ~/.rnd .rnd ファイルの場所は RANDFILE 環境変数で設定できます。FAQ を参照。
pass ~/.password-store $ export PASSWORD_STORE_DIR="$XDG_DATA_HOME"/pass
pidgin ~/.purple $ pidgin --config="$XDG_DATA_HOME"/purple
PulseAudio ~/.esd_auth module-esound-protocol-unix.so モジュールによって生成されます。別の場所を使用するように設定することもできますが /etc/pulse/default.pa"$XDG_CONFIG_HOME"/pulse/default.pa でモジュールをコメントアウトしてしまう方が簡単です。
python-setuptools ~/.python-eggs $ export PYTHON_EGG_CACHE="$XDG_CACHE_HOME"/python-eggs
rclone ~/.rclone.conf $ rclone --config="$XDG_CONFIG_HOME"/rclone/rclone.conf
readline ~/.inputrc $ export INPUTRC="$XDG_CONFIG_HOME"/readline/inputrc
rlwrap ~/.*_history [67] $ export RLWRAP_HOME="$XDG_DATA_HOME"/rlwrap
sbt ~/.sbt

~/.ivy2

$ sbt -ivy "$XDG_DATA_HOME"/ivy2 -sbt-dir "$XDG_DATA_HOME"/sbt
screen ~/.screenrc $ export SCREENRC="$XDG_CONFIG_HOME"/screen/screenrc
stack ~/.stack [68] $ export STACK_ROOT="$XDG_DATA_HOME"/stack
subversion ~/.subversion [69][70][71] $ svn --config-dir "$XDG_CONFIG_HOME"/subversion
task ~/.task ~/.taskrc $ export TASKDATA="$XDG_DATA_HOME"/task $ export TASKRC="$XDG_CONFIG_HOME"/task/taskrc
tig ~/.tigrc $ export TIGRC_USER="$XDG_CONFIG_HOME"/tig/tigrc
tmux ~/.tmux.conf [72] [73] $ tmux -f "$XDG_CONFIG_HOME"/tmux/tmux.conf

$ export TMUX_TMPDIR="$XDG_RUNTIME_DIR"

uncrustify ~/.uncrustify.cfg $ export UNCRUSTIFY_CONFIG="$XDG_CONFIG_HOME"/uncrustify/uncrustify.cfg
Unison ~/.unison $ export UNISON="$XDG_DATA_HOME"/unison
urxvtd ~/.urxvt/urxvtd-hostname $ export RXVT_SOCKET="$XDG_RUNTIME_DIR"/urxvtd
WeeChat ~/.weechat [74] $ export WEECHAT_HOME="$XDG_CONFIG_HOME"/weechat

$ weechat -d "$XDG_CONFIG_HOME"/weechat

wget ~/.wgetrc $ export WGETRC="$XDG_CONFIG_HOME/wgetrc"
wine ~/.wine [75] WinetricksWINEPREFIX の管理に XDG のような場所を使用します:

$ mkdir -p "$XDG_DATA_HOME"/wineprefixes

$ export WINEPREFIX="$XDG_DATA_HOME"/wineprefixes/default

xorg-xauth ~/.Xauthority $ export XAUTHORITY="$XDG_RUNTIME_DIR"/Xauthority
xorg-xinit ~/.xinitrc ~/.xserverrc $ export XINITRC="$XDG_CONFIG_HOME"/X11/xinitrc $ export X="$XDG_CONFIG_HOME"/X11/xserverrc
xorg-xrdb ~/.Xresources ~/.Xdefaults xrdb -load ~/.config/X11/xresources のようにパスを指定して xrdb でリソースがロードされるように Xresources使用 することができます。
xsel ~/.xsel.log [76] $ xsel --logfile "$XDG_CACHE_HOME"/xsel/xsel.log

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

アプリケーション 旧パス 議論 ノート
AMule ~/.aMule
anthy ~/.anthy [77]
Apache Directory Studio ~/.ApacheDirectoryStudio
bash ~/.bashrc ~/.bash_history ~/.bash_profile ~/.bash_login ~/.bash_logout [78]
  • 指定された bashrc/etc/bashrc から読み込まれます。
  • export HISTFILE="$XDG_DATA_HOME"/bash/history
cabal ~/.cabal [79] 対処方法は議論を見てください。簡単な方法ではありませんが Base Directory 準拠をエミュレートできます。
CUPS ~/.cups [80]
dbus ~/.dbus [81] kdbus を使うことで回避できます。
eclipse ~/.eclipse [82] -Dosgi.configuration.area=@user.home/.config/.. オプションで上書きできますがコマンドラインで指定するのではなく "$ECLIPSE_HOME"/eclipse.ini" に追加する必要があり $ECLIPSE_HOME の書き込み権限が要ります (Arch Linux では $ECLIPSE_HOME/usr/bin/eclipse に決め打ちされています)。
emacs ~/.emacs ~/.emacs.d [83] HOME を設定することができますが、予期せぬ副作用を生みます。他の Emacs 環境変数を修正してロードパスを変更して手動で init ファイルをロードする site ファイルを作成するのが確実ですが、ロードプロセスが大幅に変わってしまいます。
Fetchmail ~/.fetchmailrc
firefox ~/.mozilla [84]
GNU parallel ~/.parallel
idris ~/.idris [85]
julia ~/.juliarc.jl ~/.julia_history [86] [87]
Linux PAM ~/.pam_environment ハードコード: modules/pam_env/pam_env.c
lldb ~/.lldb ~/.lldbinit
mathomatic ~/.mathomaticrc ~/.matho_history rlwrap mathomatic -r を使って RLWRAP_HOME 変数を適切に設定することで履歴を移動できます。
Mercurial ~/.hgrc 設定ファイルの検索パスを追加することはできませんが上書きすることはできます。デフォルトフォルダを追加するときは注意してください: $ export HGRCPATH=/usr/lib/python2.7/site-packages/mercurial/default.d/:\

/etc/mercurial/hgrc:"${XDG_CONFIG_HOME}"/mercurial/hgrc

デフォルトの設定パスを確認するには: $ env -u HGRCPATH hg debugconfig --debug | grep "read config"

milkytracker ~/.milkytracker_config [88]
mongodb ~/.mongorc.js ~/.dbshell [89] Stack Overflow のスレッド ではコマンドラインスイッチの --norc を使うことを提案しています。
ncmpc ~/.ncmpc
~/.netrc ~/.ssh などの多数のプログラムが使っています。curl (CURLOPT_NETRC_FILE), ftp (NETRC), s-nail (NETRC) なども使用しています。別の場所を設定できるプログラムも存在しますが w3m, wget, lftp など大抵のプログラムは設定が不可能です。
NSS ~/.pki [90]
OpenSSH ~/.ssh [91] DropBear や OpenSSH など多数の ssh デーモンやクライアントが使用します。
palemoon ~/.moonchild productions [92]
perf ~/.debug tools/perf/util/config.c:18 でハードコードされています。
~/.profile 様々なシェルディスプレイマネージャが使用しています。
python ~/.python_history バージョン 3.4 からインタラクティブセッションの履歴は全てデフォルトで ~/.python_history に保存されますが、古いバージョンと同じ方法でカスタムパスを設定できます ([93] を参照)。
racket ~/.racketrc
SeaMonkey ~/.mozilla [94]
Skype < 5.0 ~/.Skype [95]
Solfege ~/.solfege ~/.solfegerc ~/lessonfiles [96]
SpamAssassin ~/.spamassassin
spectrwm ~/.spectrwm
SQLite ~/.sqlite_history ~/.sqliterc [97][98] $ sqlite3 -init "$XDG_CONFIG_HOME"/sqlite3/sqliterc
Thunderbird ~/.thunderbird [99]
vim ~/.vim ~/.vimrc ~/.viminfo 7.3.1178 から vim は ~/.vimrc が存在しない場合に ~/.vim/vimrc を検索します。
"$XDG_CONFIG_HOME"/vim/vimrc
set undodir=$XDG_CACHE_HOME/vim/undo
set directory=$XDG_CACHE_HOME/vim/swap
set backupdir=$XDG_CACHE_HOME/vim/backup
set viminfo+='1000,n$XDG_CACHE_HOME/vim/viminfo
set runtimepath=$XDG_CONFIG_HOME/vim,$XDG_CONFIG_HOME/vim/after,$VIMRUNTIME
~/.profile
export VIMINIT=":source $XDG_CONFIG_HOME"/vim/vimrc

https://tlvince.com/vim-respect-xdg も参照。

vimperator ~/.vimperatorrc [100] $ 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 などによって使われています。
xombrero ~/.xombrero [101]
zsh ~/.zshrc ~/.zprofile ~/.zshenv ~/.zlogin ~/.zlogout ~/.histfile [102] ~/.zshenvZDOTDIR=$HOME/.config/zsh を export してください (ブートストラップ問題のためにハードコードされています)。/etc/zsh/zshenv にも追加することで HOME にドットファイルが必要なくなります。ただし root 権限が必要で設定はシステム全体に適用されます。

$ export HISTFILE="$XDG_DATA_HOME"/zsh/history

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

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 などを参照。

参照