Где должна быть определена переменная XDG_CONFIG_HOME?
31074
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?
3 ответа на вопрос
42
MestreLion
Вам не нужно нигде определять его, если вы не хотите изменить значение по умолчанию.
Если $XDG_CONFIG_HOMEлибо не установлено, либо пусто, $HOME/.configследует использовать значение по умолчанию, равное .
Поэтому избыточно определять его по умолчанию. Все совместимые приложения уже будут использовать$HOME/.config
Но, если вы действительно хотите изменить значение по умолчанию в системе Debian / Ubuntu, лучшее место:
Для общесистемного изменения, затрагивающего всех пользователей: /etc/profile
Только для вашего пользователя: ~/.profile
downvoter может объяснить, что не так с ответом, и желательно помочь улучшить его
MestreLion 8 лет назад
1
Этот ответ, теоретически, является прекрасным, но есть много программного обеспечения, которое не соответствует спецификации XDG Base Directory и не может содержать миллионы ошибок, связанных с этим незнанием.
ManuelSchneid3r 7 лет назад
1
@ ManuelSchneid3r Очень верно, но для такой настройки программного обеспечения `XDG_CONFIG_HOME` в любом случае мало что изменит, если таковая имеется.
MestreLion 7 лет назад
5
Может существовать программное обеспечение, которое слепо использует `XDG_CONFIG_HOME`, не следуя спецификации, при условии, что это стандартная функция Linux или даже Unix, а не часть сторонней спецификации.
Eagle-Eye 6 лет назад
1
@ Eagle-Eye, ты хочешь сказать, что мы * должны * определить `XDG_CONFIG_HOME` и т.д.?
mcnesium 6 лет назад
0
@mcnesium Я говорю, что, наверное, не повредит. Хотя, если возможно, было бы лучше исправить само приложение и отправить исправление в апстрим.
Eagle-Eye 6 лет назад
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 9 лет назад
0
Он больше не находится в `/ etc / profile` в Arch, и упоминается только один раз из` / etc / profile.d / locale.sh`.
phil pirozhkov 8 лет назад
3
Ссылка мертва ...
ManuelSchneid3r 7 лет назад
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.
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 6 лет назад
3
@ TomHale Конечно, нет, весь смысл установки переменных заключается в переопределении значений по умолчанию. Если вы довольны настройками по умолчанию, тогда вам вообще не нужно устанавливать эти переменные.
carlwgeorge 6 лет назад
0
Ubuntu 14.04 не устанавливает переменные каталога XDG по умолчанию - просто наличие спецификации не означает, что за ней следит дистрибутив.
Tom Hale 6 лет назад
1
@TomHale Это не имеет значения, потому что спецификация XDG обеспечивает значения по умолчанию, когда переменные не установлены, поэтому * не * необходимо * устанавливать переменные XDG.
Pauan 6 лет назад
0
Имеет значение, если я хочу `export LESSHISTFILE =" $ XDG_CACHE_HOME "/ less / history`, где` less` не знает спецификацию, а настройки по умолчанию еще не установлены моим дистрибутивом.
Tom Hale 6 лет назад
2