Di mana variabel XDG_CONFIG_HOME harus didefinisikan?

41

Spesifikasi XDG berbicara tentang XDG_CONFIG_HOMEvariabel, tetapi tidak menentukan di mana ia harus didefinisikan. Haruskah kita mendefinisikannya /etc/X11/Xsession, atau apakah itu file konfigurasi pengelola jendela yang perlu mendefinisikan ini?

Saya mencoba mendeklarasikannya di / etc / environment sebagai

XDG_CONFIG_HOME="$HOME/.config"

tetapi itu tidak berhasil, karena $ HOME tidak didefinisikan ketika /etc/environmentdiuraikan.

Satu-satunya dokumentasi yang dapat saya temukan online adalah untuk Gentoo, di mana dinyatakan dalam /etc/env.d/90xsession

Saya menggunakan Ubuntu. Apa yang akan menjadi solusi umum untuk distro berbasis Debian?

NOLFXceptMe
sumber

Jawaban:

24

Di Arch Linux, ini didefinisikan oleh /etc/profile, menggunakan /etc/profile.dskrip.

Untuk Debian / Ubuntu, jika ada /etc/profile.d- buat skrip serupa di dalamnya; jika direktori seperti itu tidak ada - edit /etc/profileitsef.

export XDG_CONFIG_HOME="$HOME/.config"

The /etc/environmentfile diurai oleh pam_env, yang memperlakukan sebagai nama = nilai sederhana tugas. Namun, ia juga memiliki /etc/security/pam_env.conf, yang mendukung ekspansi variabel dan dapat digunakan untuk tujuan ini.

grawity
sumber
Gist tidak tersedia
elang
3
Itu tidak ada di /etc/profiledalam Arch lagi, dan hanya sekali disebutkan dari /etc/profile.d/locale.sh.
phil pirozhkov
1
Tautan sudah mati ...
ManuelSchneid3r
54

Anda tidak perlu mendefinisikannya di mana pun, kecuali jika Anda ingin mengubah default.

Spesifikasi Direktori Dasar XDG dengan jelas mengatakan:

Jika $XDG_CONFIG_HOMEtidak disetel atau kosong, default sama dengan $HOME/.configharus digunakan.

Jadi berlebihan untuk mendefinisikannya ke nilai default. Semua aplikasi yang patuh sudah akan digunakan$HOME/.config

Tapi, jika Anda tidak ingin mengubah default dalam sistem Debian / Ubuntu, tempat terbaik adalah:

  • Untuk perubahan di seluruh sistem, yang memengaruhi semua pengguna: /etc/profile
  • Hanya untuk pengguna Anda: ~/.profile
MestreLion
sumber
1
downvoter dipersilahkan untuk menjelaskan apa yang salah dengan jawabannya, dan lebih baik membantu memperbaikinya
MestreLion
1
Jawaban ini baik-baik saja, secara teoritis, tetapi ada banyak perangkat lunak di sekitarnya, yang tidak memenuhi spesifikasi Direktori Dasar XDG dan jutaan bug yang berasal dari ketidaktahuan ini.
ManuelSchneid3r
5
@ ManuelSchneid3r Sangat benar, tetapi untuk pengaturan perangkat lunak seperti itu XDG_CONFIG_HOMEakan membuat sedikit perbedaan, jika ada.
MestreLion
2
Mungkin ada perangkat lunak yang digunakan secara membabi buta XDG_CONFIG_HOMEtanpa mengikuti spesifikasi, dengan asumsi bahwa itu adalah Linux standar atau bahkan fitur Unix daripada bagian dari spesifikasi pihak ketiga.
Eagle-Eye
3
@ Mcnesium saya katakan mungkin tidak ada salahnya. Meskipun jika memungkinkan, akan lebih baik untuk memperbaiki aplikasi itu sendiri dan mengirim perbaikan ke hulu.
Eagle-Eye
5

Saya telah menemukan bahwa itu bekerja paling baik untuk mengatur variabel lingkungan melalui PAM. Untuk distro Linux modern, ini berarti /etc/environmentatau $HOME/.pam_environment(lihat man pam_env). Anda juga dapat mengaturnya /etc/security/pam_env.confmenggunakan sintaks khusus. Inilah cara saya mengatur variabel XDG saya di /etc/security/pam_env.conf.

XDG_CACHE_HOME  DEFAULT=@{HOME}/.xdg/cache
XDG_CONFIG_HOME DEFAULT=@{HOME}/.xdg/config
XDG_DATA_HOME   DEFAULT=@{HOME}/.xdg/data
XDG_STATE_HOME  DEFAULT=@{HOME}/.xdg/state

Sebelumnya saya akan mengatur variabel-variabel ini di /etc/profile.d/custom.sh. Namun, beberapa aplikasi memulai sebelum file itu dibaca. Beralih ke metode PAM memecahkan masalah untuk beberapa aplikasi yang berperilaku seperti ini.

carlwgeorge
sumber
5
Catatan: ini tidak mengikuti standar yang ditentukan dalam Spesifikasi Direktori Pangkalan XDG
Tom Hale
2
@ TomHale Tentu saja tidak, seluruh titik pengaturan variabel adalah untuk menimpa default. Jika Anda puas dengan defaultnya, maka Anda tidak perlu mengatur variabel ini sama sekali.
carlwgeorge
1
Ubuntu 14.04 tidak menetapkan variabel direktori XDG secara default - hanya karena ada spesifikasi tidak berarti bahwa distro seseorang mengikutinya.
Tom Hale
2
Tidak masalah jika saya ingin di export LESSHISTFILE="$XDG_CACHE_HOME"/less/historymana lesstidak menyadari spesifikasi dan default belum ditetapkan oleh distro saya.
Tom Hale
2
@ Tomale spec tidak mendefinisikan apa sistem operasi harus mengatur variabel; itu mendefinisikan variabel, yang, jika didefinisikan dan tidak kosong, aplikasi harus digunakan. Dan jika variabel tidak didefinisikan atau kosong, aplikasi harus menggunakan jalur default yang dirujuk dalam spesifikasi. Jadi contoh singkat Anda tidak sesuai dengan spesifikasi, karena tidak terlebih dahulu memeriksa yang XDG_CACHE_HOMEditentukan dan tidak kosong. Ini seharusnya menjadi:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
villapx
0

Untuk pengguna Zsh, tentukan di .zshenvfile Anda

export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
smac89
sumber
1
Downvoter mau menjelaskan diri sendiri?
smac89