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

42

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

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

XDG_CONFIG_HOME="$HOME/.config"

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

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

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

NOLFXceptMe
источник

Ответы:

24

В 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, который поддерживает расширение переменных и может быть использован для этой цели.

grawity
источник
Суть недоступна
ястреб
3
Его больше нет в /etc/profileArch, и упоминается только один раз /etc/profile.d/locale.sh.
Фил Пирожков
1
Ссылка мертва ...
ManuelSchneid3r
55

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

Спецификация XDG Base Directory четко гласит:

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

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

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

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

Я обнаружил, что лучше всего устанавливать переменные окружения через PAM. Для современных Linux distos это означает /etc/environmentили $HOME/.pam_environment(см. man pam_env). Вы также можете установить их, /etc/security/pam_env.confиспользуя специальный синтаксис. Вот как я устанавливаю свои переменные XDG в /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

Ранее я бы установил эти переменные в /etc/profile.d/custom.sh. Однако некоторые приложения запускаются до того, как этот файл будет прочитан. Переход на метод PAM решил проблему для нескольких приложений, которые вели себя таким образом.

carlwgeorge
источник
5
Примечание: это не соответствует значениям по умолчанию, указанным в Спецификации базового каталога XDG
Том Хейл,
2
@ TomHale Конечно, нет, весь смысл установки переменных заключается в переопределении значений по умолчанию. Если вы довольны значениями по умолчанию, тогда вам вообще не нужно устанавливать эти переменные.
Carlwgeorge,
1
Ubuntu 14.04 не устанавливает переменные каталога XDG по умолчанию - просто наличие спецификации не означает, что за ней следит дистрибутив.
Том Хейл,
2
Имеет значение, если я хочу, чтобы export LESSHISTFILE="$XDG_CACHE_HOME"/less/historyгде-то lessне было известно о спецификации, и настройки по умолчанию еще не установлены моим дистрибутивом.
Том Хейл,
2
@TomHale спецификация не определяет то, что операционная система должна установить переменные; он определяет переменные, которые, если они определены и не пустые, приложение должно использовать. И если переменная не определена или является пустой, приложение должно использовать путь по умолчанию, указанный в спецификации. Таким образом, ваш короткий пример не соответствует спецификации, так как он сначала не проверяет, что XDG_CACHE_HOMEопределено и не пусто. Вместо этого должно быть:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
villapx
0

Для пользователей Zsh определите это в своем .zshenvфайле

export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
smac89
источник
1
Даунвотер заботится, чтобы объяснить себя?
smac89