Где должна быть определена переменная XDG_CONFIG_HOME?

31122
NOLFXceptMe

Спецификация XDG говорит о XDG_CONFIG_HOMEпеременной, но не указывает, где она должна быть определена. Должны ли мы определить его в /etc/X11/Xsessionфайле конфигурации или в конфигурационном файле менеджера окон, который должен это определить?

Я попытался объявить его в / etc / environment как

XDG_CONFIG_HOME="$HOME/.config" 

но это не сработало, так как кажется, что $ HOME не определяется при /etc/environmentразборе.

Единственная документация, которую я мог найти в Интернете, была для Gentoo, где она была объявлена ​​в /etc/env.d/90xsession

Я использую Ubuntu. Каково будет общее решение для дистрибутивов на основе Debian?

34

3 ответа на вопрос

42
MestreLion

Вам не нужно нигде определять его, если вы не хотите изменить значение по умолчанию.

В спецификации XDG Base Directory четко сказано:

Если $XDG_CONFIG_HOMEлибо не установлено, либо пусто, $HOME/.configследует использовать значение по умолчанию, равное .

Поэтому избыточно определять его по умолчанию. Все совместимые приложения уже будут использовать$HOME/.config

Но, если вы действительно хотите изменить значение по умолчанию в системе Debian / Ubuntu, лучшее место:

  • Для общесистемного изменения, затрагивающего всех пользователей: /etc/profile
  • Только для вашего пользователя: ~/.profile
downvoter может объяснить, что не так с ответом, и желательно помочь улучшить его MestreLion 9 лет назад 1
Этот ответ, теоретически, является прекрасным, но есть много программного обеспечения, которое не соответствует спецификации XDG Base Directory и не может содержать миллионы ошибок, связанных с этим незнанием. ManuelSchneid3r 8 лет назад 1
@ ManuelSchneid3r Очень верно, но для такой настройки программного обеспечения `XDG_CONFIG_HOME` в любом случае мало что изменит, если таковая имеется. MestreLion 8 лет назад 5
Может существовать программное обеспечение, которое слепо использует `XDG_CONFIG_HOME`, не следуя спецификации, при условии, что это стандартная функция Linux или даже Unix, а не часть сторонней спецификации. Eagle-Eye 7 лет назад 1
@ Eagle-Eye, ты хочешь сказать, что мы * должны * определить `XDG_CONFIG_HOME` и т.д.? mcnesium 7 лет назад 0
@mcnesium Я говорю, что, наверное, не повредит. Хотя, если возможно, было бы лучше исправить само приложение и отправить исправление в апстрим. Eagle-Eye 7 лет назад 2
20
grawity

В Arch Linux это определяется с /etc/profileпомощью /etc/profile.dскрипта.

Для Debian / Ubuntu, если есть /etc/profile.d- создайте подобный скрипт внутри; если такой директории не существует - отредактируйте /etc/profileее.

export XDG_CONFIG_HOME="$HOME/.config" 

/etc/environmentФайл анализируется pam_env, который рассматривает его как простое присвоение имя = значение. Тем не менее, он также имеет /etc/security/pam_env.conf, который поддерживает расширение переменных и может быть использован для этой цели.

Суть недоступна hawk 10 лет назад 0
Он больше не находится в `/ etc / profile` в Arch, и упоминается только один раз из` / etc / profile.d / locale.sh`. phil pirozhkov 9 лет назад 3
Ссылка мертва ... ManuelSchneid3r 8 лет назад 1
2
carlwgeorge

I've found that it works best to set environment variables via PAM. For modern Linux distos, this means /etc/environment or $HOME/.pam_environment (see man pam_env). You can also set them in /etc/security/pam_env.conf using a special syntax. Here is how I set my XDG variables in /etc/security/pam_env.conf.

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

Previously I would set these variables in /etc/profile.d/custom.sh. However, some applications start before that file is read. Switching to the PAM method solved the issue for multiple applications that behaved this way.

Примечание: это не соответствует настройкам по умолчанию, указанным в [Спецификации базового каталога XDG] (https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html) Tom Hale 7 лет назад 3
@ TomHale Конечно, нет, весь смысл установки переменных заключается в переопределении значений по умолчанию. Если вы довольны настройками по умолчанию, тогда вам вообще не нужно устанавливать эти переменные. carlwgeorge 7 лет назад 0
Ubuntu 14.04 не устанавливает переменные каталога XDG по умолчанию - просто наличие спецификации не означает, что за ней следит дистрибутив. Tom Hale 7 лет назад 1
@TomHale Это не имеет значения, потому что спецификация XDG обеспечивает значения по умолчанию, когда переменные не установлены, поэтому * не * необходимо * устанавливать переменные XDG. Pauan 7 лет назад 0
Имеет значение, если я хочу `export LESSHISTFILE =" $ XDG_CACHE_HOME "/ less / history`, где` less` не знает спецификацию, а настройки по умолчанию еще не установлены моим дистрибутивом. Tom Hale 7 лет назад 2

Похожие вопросы