Де слід визначати змінну XDG_CONFIG_HOME?


41

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

Я спробував оголосити це в / etc / environment як

XDG_CONFIG_HOME="$HOME/.config"

але це не спрацювало, оскільки, здається, $ HOME не визначено, коли /etc/environmentбуде розібраний.

Єдина документація, яку я міг знайти в Інтернеті, була для Gentoo, де вона була заявлена ​​в /etc/env.d/90xsession

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

Відповіді:


24

В Arch Linux це визначається за /etc/profileдопомогою /etc/profile.dскрипту.

Для Debian / Ubuntu, якщо є /etc/profile.d- створити аналогічний сценарій всередині; якщо такого каталогу не існує - відредагуйте /etc/profileitsef.

export XDG_CONFIG_HOME="$HOME/.config"

/etc/environmentФайл аналізується pam_env, який розглядає його як просте ім'я = значення завдання. Однак він також має /etc/security/pam_env.conf, що підтримує змінне розширення і може бути використаний для цієї мети.


Історія недоступна
яструб

3
Його вже немає в /etc/profileАрці, і згадується лише один раз /etc/profile.d/locale.sh.
phil pirozhkov

1
Посилання мертве ...
ManuelSchneid3r

54

Не потрібно його визначати ніде, якщо ви не хочете змінити типовий засіб.

Специфікація базового каталогу XDG чітко говорить:

Якщо $XDG_CONFIG_HOMEабо не встановлено, або порожньо, $HOME/.configслід використовувати за замовчуванням рівний .

Тож зайвим буде визначити це значення за замовчуванням. Усі сумісні програми вже використовуватимуться$HOME/.config

Але, якщо ви дійсно хочете змінити значення за замовчуванням в системі Debian / Ubuntu, найкраще місце:

  • Для загальносистемної зміни, яка стосується всіх користувачів: /etc/profile
  • Тільки для вашого користувача: ~/.profile

1
downvoter радо пояснити, що не так у відповіді, і бажано допомогти її покращити
MestreLion

1
Ця відповідь теоретично прекрасна, але теоретично є багато програмного забезпечення, яке не відповідає XDG Base Directory Specification, а чотири мільйони помилок, пов'язані з цим незнанням.
ManuelSchneid3r

5
@ ManuelSchneid3r Дуже правда, але для такого програмного забезпечення XDG_CONFIG_HOMEвсе одно мало значення, якщо він є.
MestreLion

2
Можливо, існує програмне забезпечення, яке сліпо використовує, XDG_CONFIG_HOMEне дотримуючись специфікацій, припускаючи, що це стандартна функція Linux або навіть Unix, а не частина сторонньої специфікації.
Орел-Око

3
@mcnesium Я кажу, що це, ймовірно, не може зашкодити. Хоча якщо це можливо, було б краще виправити додаток і надіслати виправлення вгору.
Орел-око

5

Я виявив, що це найкраще працює для встановлення змінних середовища через PAM. Для сучасних дисків Linux це означає /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 вирішив проблему для декількох додатків, які поводилися таким чином.


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}"

1
Дайворт прагнете пояснити себе?
smac89
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.