XDG Base Directory
関連記事
この記事では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
です。
貢献
ソフトウェアを追加するときは適切なセクションを使ってください。
コードの評価 (vim や VIMINIT
など)、パッチやコンパイルオプションが必要な方法、あるいはハードコードと考えられる方法は載せるべきではありません。また、Haskell の cabal や eclipse など難しい方法もハードコードとして扱います。
- 1番目のカラムはプロジェクト名です。できればコマンド名にしてください。ソフトウェアのウェブサイトか適切な wiki の記事にリンクさせます。
- 2番目のカラムはプロジェクトが使用するレガシーなファイルやディレクトリです。もはや読み込まれない場合でも確認できるように記述してください。
- 3番目のカラムは XDG Base Directory に切り替わったプロジェクトのコミットあるいはバージョンです。4番目のカラムにはその議論がある場合にリンクを載せてください。
- 最後のカラムにはサポートしていないプロジェクトのための適切な対処方法を記載します。簡潔に書いてください。曖昧な部分がある場合は自由に追記してください。
サポートしているソフトウェア
部分的にサポートしているソフトウェア
アプリケーション | 旧パス | 対応開始 | 議論 | ノート |
---|---|---|---|---|
abook | ~/.abook
|
$ abook --config "$XDG_CONFIG_HOME"/abook/abookrc --datafile "$XDG_CACHE_HOME"/abook/addressbook
| ||
Anki | ~/Anki ~/Documents/Anki
|
[47] [48] | $ anki -b "$XDG_DATA_HOME"/Anki
| |
aspell | ~/.aspell.conf
|
|||
Atom | ~/.atom
|
$ export ATOM_HOME="$XDG_DATA_HOME"/atom
| ||
cargo | ~/.cargo
|
[49] [50] | $ 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
| ||
conky | ~/.conkyrc
|
00481ee | [51] | $ 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
| |
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 | [52] [53] | $ export GIMP2_DIRECTORY="$XDG_CONFIG_HOME"/gimp
|
gliv | ~/.glivrc
|
$ gliv --glivrc="$XDG_CONFIG_HOME"/gliv/glivrc
| ||
gpg | ~/.gnupg
|
[54] [55] | $ export GNUPGHOME="$XDG_CONFIG_HOME"/gnupg
| |
Google Earth | ~/.googleearth
|
~/.config/Google/GoogleEarthPlus.conf の KMLPath や CachePath オプションで一部のパスは変更できます。
| ||
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
|
[56] | $ export HTTPIE_CONFIG_DIR="$XDG_CONFIG_HOME"/httpie
| |
ipython/jupyter | ~/.ipython
|
$ export IPYTHONDIR="$XDG_CONFIG_HOME"/jupyter
| ||
irssi | ~/.irssi
|
[57] | 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 ディレクトリを手動で作成する必要があります)。
| ||
libdvdcss | ~/.dvdcss
|
[58] | $ export DVDCSS_CACHE="$XDG_DATA_HOME"/dvdcss
| |
libice | ~/.ICEauthority
|
[59] | $ 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
| ||
MPlayer | ~/.mplayer
|
$ export MPLAYER_HOME="$XDG_CONFIG_HOME"/mplayer
| ||
ncurses | ~/.terminfo
|
$ export TERMINFO="$XDG_DATA_HOME"/terminfo # Precludes system path searching.
| ||
notmuch | ~/.notmuch-config
|
[60] | $ export NOTMUCH_CONFIG="$XDG_CONFIG_HOME"/notmuch/notmuchrc
| |
npm | ~/.npm ~/.npmrc
|
[61] | $ 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
| ||
nvidia-settings | ~/.nvidia-settings-rc
|
$ nvidia-settings --config="$XDG_CONFIG_HOME"/nvidia/settings
| ||
openscad | ~/.OpenSCAD
|
7c3077b0f | [62] | XDG Base Directory Specification に完全には準拠していません。[63] を参照。
現在 |
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
|
[64] | $ export RLWRAP_HOME="$XDG_DATA_HOME"/rlwrap
| |
screen | ~/.screenrc
|
$ export SCREENRC="$XDG_CONFIG_HOME"/screen/screenrc
| ||
stack | ~/.stack
|
[65] | $ export STACK_ROOT="$XDG_DATA_HOME"/stack
| |
subversion | ~/.subversion
|
[66][67][68] | $ 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
|
[69] [70] | $ tmux -f "$XDG_CONFIG_HOME"/tmux/tmux.conf
| |
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
|
[71] | $ export WEECHAT_HOME="$XDG_CONFIG_HOME"/weechat
| |
wget | ~/.wgetrc
|
$ export WGETRC="$XDG_CONFIG_HOME/wgetrc"
| ||
wine | ~/.wine
|
[72] | Winetricks は WINEPREFIX の管理に XDG のような場所を使用します:
| |
xorg-xauth | ~/.Xauthority
|
$ export XAUTHORITY="$XDG_RUNTIME_DIR"/Xauthority
| ||
xorg-xinit | ~/.xinitrc
|
$ export XINITRC="$XDG_CONFIG_HOME"/X11/xinitrc
| ||
xorg-xrdb | ~/.Xresources ~/.Xdefaults
|
xrdb -load ~/.config/X11/xresources のようにパスを指定して xrdb でリソースがロードされるように Xresources を 使用 することができます。
| ||
xsel | ~/.xsel.log
|
[73] | $ xsel --logfile "$XDG_CACHE_HOME"/xsel/xsel.log
|
ハードコードされているソフトウェア
アプリケーション | 旧パス | 議論 | ノート |
---|---|---|---|
AMule | ~/.aMule
|
||
Apache Directory Studio | ~/.ApacheDirectoryStudio
|
||
bash | ~/.bashrc ~/.bash_history ~/.bash_profile ~/.bash_login ~/.bash_logout
|
[74] |
|
cabal | ~/.cabal
|
[75] | 対処方法は議論を見てください。簡単な方法ではありませんが Base Directory 準拠をエミュレートできます。 |
CUPS | ~/.cups
|
[76] | |
dbus | ~/.dbus
|
[77] | kdbus を使うことで回避できます。 |
eclipse | ~/.eclipse
|
[78] | -Dosgi.configuration.area=@user.home/.config/.. オプションで上書きできますがコマンドラインで指定するのではなく "$ECLIPSE_HOME"/eclipse.ini" に追加する必要があり $ECLIPSE_HOME の書き込み権限が要ります (Arch Linux では $ECLIPSE_HOME が /usr/bin/eclipse に決め打ちされています)。
|
emacs | ~/.emacs ~/.emacs.d
|
[79] | HOME を設定することができますが、予期せぬ副作用を生みます。他の Emacs 環境変数を修正してロードパスを変更して手動で init ファイルをロードする site ファイルを作成するのが確実ですが、ロードプロセスが大幅に変わってしまいます。
|
Fetchmail | ~/.fetchmailrc
|
||
firefox | ~/.mozilla
|
[80] | |
GNU parallel | ~/.parallel
|
||
idris | ~/.idris
|
[81] | |
julia | ~/.juliarc.jl ~/.julia_history
|
[82] [83] | |
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/:\
デフォルトの設定パスを確認するには: | |
milkytracker | ~/.milkytracker_config
|
[84] | |
mongodb | ~/.mongorc.js ~/.dbshell
|
[85] | Stack Overflow のスレッド ではコマンドラインスイッチの --norc を使うことを提案しています。
|
ncmpc | ~/.ncmpc
|
||
~/.netrc
|
~/.ssh などの多数のプログラムが使っています。curl (CURLOPT_NETRC_FILE ), ftp (NETRC ), s-nail (NETRC ) なども使用しています。別の場所を設定できるプログラムも存在しますが w3m, wget, lftp など大抵のプログラムは設定が不可能です。
| ||
NSS | ~/.pki
|
[86] | |
OpenSSH | ~/.ssh
|
[87] | DropBear や OpenSSH など多数の ssh デーモンやクライアントが使用します。 |
palemoon | ~/.moonchild productions
|
[88] | |
perf | ~/.debug
|
tools/perf/util/config.c:18 でハードコードされています。 | |
~/.profile
|
様々なシェルやディスプレイマネージャが使用しています。 | ||
python | ~/.python_history
|
バージョン 3.4 からインタラクティブセッションの履歴は全てデフォルトで ~/.python_history に保存されますが、古いバージョンと同じ方法でカスタムパスを設定できます ([89] を参照)。
| |
racket | ~/.racketrc
|
||
SeaMonkey | ~/.mozilla
|
[90] | |
Skype | ~/.Skype
|
[91] | |
Solfege | ~/.solfege ~/.solfegerc ~/lessonfiles
|
[92] | |
SpamAssassin | ~/.spamassassin
|
||
spectrwm | ~/.spectrwm
|
||
SQLite | ~/.sqlite_history
|
[93][94] | |
Thunderbird | ~/.thunderbird
|
[95] | |
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="$XDG_CONFIG_HOME"/vim/vimrc | |
vimperator | ~/.vimperatorrc
|
[96] | $ export VIMPERATOR_INIT=":source $XDG_CONFIG_HOME/vimperator/vimperatorrc"
|
wpa_cli | ~/.wpa_cli_history
|
||
xdg-utils | ~/.gnome
|
何らかの理由で xdg-desktop-menu スクリプトは gnome_user_dir="$HOME/.gnome/apps" をハードコードしており、chromium などによって使われています。
| |
xmonad | ~/.xmonad
|
[97] | |
xombrero | ~/.xombrero
|
[98] | |
zsh | ~/.zshrc ~/.zprofile ~/.zshenv ~/.zlogin ~/.zlogout ~/.histfile
|
[99] | ~/.zshenv で ZDOTDIR=$HOME/.config/zsh を export してください (ブートストラップ問題のためにハードコードされています)。/etc/zsh/zshenv にも追加することで HOME にドットファイルが必要なくなります。ただし root 権限が必要で設定はシステム全体に適用されます。
|
ライブラリと言語のサポート
- Haskell
- 1.2.3.0 から directory で公式に対応 ab9d0810ce。
- xdg-basedir
- Python
- pyxdg
- Vala
- GLib.Environment によるサポート。
get_user_cache_dir
,get_user_data_dir
,get_user_config_dir
などを参照。