XDG Base Directory
関連記事
この記事では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
と類似。
貢献
ソフトウェアを追加するときは適切なセクションを使ってください。
コードの評価 (vim や VIMINIT
など)、パッチやコンパイルオプションが必要な方法、あるいはハードコードと考えられる方法は載せるべきではありません。また、Haskell の cabal や eclipse など難しい方法もハードコードとして扱います。
- 1番目のカラムはプロジェクト名です。できればコマンド名にしてください。ソフトウェアのウェブサイトか適切な wiki の記事にリンクさせます。
- 2番目のカラムはプロジェクトが使用するレガシーなファイルやディレクトリです。もはや読み込まれない場合でも確認できるように記述してください。
- 3番目のカラムは XDG Base Directory に切り替わったプロジェクトのコミットあるいはバージョンです。4番目のカラムにはその議論がある場合にリンクを載せてください。
- 最後のカラムにはサポートしていないプロジェクトのための適切な対処方法を記載します。完結に書いてください。曖昧な部分がある場合は自由に追記してください。
サポートしているソフトウェア
部分的にサポートしているソフトウェア
アプリケーション | 旧パス | 対応開始 | 議論 | ノート |
---|---|---|---|---|
abook | ~/.abook
|
$ abook --config "$XDG_CONFIG_HOME"/abook/abookrc \
| ||
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
| ||
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
| |
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
| ||
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
| ||
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 ディレクトリを手動で作成する必要があります)。
| ||
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
| ||
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
| |
ncurses | ~/.terminfo
|
$ export TERMINFO="$XDG_DATA_HOME"/terminfo # Precludes system path searching.
| ||
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
| ||
openscad | ~/.OpenSCAD
|
7c3077b0f | [54] | XDG Base Directory Specification に完全には準拠していません。[55] を参照。
現在 |
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
| |
urxvtd | ~/.urxvt/urxvtd-hostname
|
$ export RXVT_SOCKET="$XDG_RUNTIME_DIR"/urxvt/urxvt-"$(hostname)"
| ||
WeeChat | ~/.weechat
|
[62] | $ export WEECHAT_HOME="$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] |
| |
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"
| |
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] | ~/.zshenv で ZDOTDIR=$HOME/.config/zsh を export してください (ブートストラップ問題のためにハードコードされています)。/etc/zsh/zshenv にも追加することで HOME にドットファイルが必要なくなります。ただし root 権限が必要で設定はシステム全体に適用されます。
| |
racket | ~/.racketrc
|
ライブラリと言語のサポート
- 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
などを参照。