Gdzie należy zdefiniować zmienną XDG_CONFIG_HOME?

41

Specyfikacja XDG mówi o XDG_CONFIG_HOMEzmiennej, ale nie określa, gdzie należy ją zdefiniować. Czy powinniśmy to zdefiniować /etc/X11/Xsession, czy też plik konfiguracyjny menedżera okien musi to zdefiniować?

Próbowałem zadeklarować to w / etc / environment jako

XDG_CONFIG_HOME="$HOME/.config"

ale to nie zadziałało, ponieważ wydaje się, że $ HOME nie jest zdefiniowane, kiedy /etc/environmentjest analizowane.

Jedyną dokumentacją, którą mogłem znaleźć w Internecie, była Gentoo, w której została zadeklarowana /etc/env.d/90xsession

Używam Ubuntu. Jakie byłoby ogólne rozwiązanie dla dystrybucji opartych na Debianie?

NOLFXceptMe
źródło

Odpowiedzi:

24

W Arch Linux jest to definiowane za /etc/profilepomocą /etc/profile.dskryptu.

W przypadku Debian / Ubuntu, jeśli istnieje /etc/profile.d- utwórz podobny skrypt w środku; jeśli taki katalog nie istnieje - edytuj /etc/profilego.

export XDG_CONFIG_HOME="$HOME/.config"

/etc/environmentPlik jest analizowany przez pam_env, który traktuje ją jako nazwa = wartość prostych zadań. Jednak ma również /etc/security/pam_env.conf, który obsługuje zmienną ekspansję i może być używany do tego celu.

grawitacja
źródło
Gist jest niedostępny
jastrząb
3
Nie ma go już w /etc/profileArch i jest tylko raz wspomniany /etc/profile.d/locale.sh.
phil pirozhkov
1
Link nie działa ...
ManuelSchneid3r
54

Nigdzie nie musisz go definiować, chyba że chcesz zmienić wartość domyślną.

Specyfikacja katalogu podstawowego XDG wyraźnie mówi:

Jeśli $XDG_CONFIG_HOMEnie jest ustawiony lub pusty, należy użyć wartości domyślnej równej $HOME/.config.

Dlatego nadmiarowe jest zdefiniowanie go do wartości domyślnej. Wszystkie zgodne aplikacje będą już korzystać$HOME/.config

Ale jeśli nie chcesz zmienić domyślną w systemie Debian / Ubuntu, najlepszym miejscem jest:

  • W przypadku zmiany ogólnosystemowej wpływającej na wszystkich użytkowników: /etc/profile
  • Tylko dla użytkownika: ~/.profile
MestreLion
źródło
1
downvoter może wyjaśnić, co jest nie tak z odpowiedzią, i najlepiej pomóc ją poprawić
MestreLion,
1
Teoretycznie odpowiedź jest w porządku, ale wokół jest mnóstwo oprogramowania, które nie jest zgodne ze specyfikacją katalogu bazowego XDG i quadtuordecillion błędów wynikających z tej niewiedzy.
ManuelSchneid3r
5
@ ManuelSchneid3r To prawda, ale dla takiego ustawienia oprogramowania XDG_CONFIG_HOMEi tak niewiele to zmieni, jeśli w ogóle.
MestreLion
2
Może istnieć oprogramowanie, które ślepo używa XDG_CONFIG_HOMEbez przestrzegania specyfikacji, zakładając, że jest to standardowa funkcja Linuksa, a nawet Uniksa, a nie część specyfikacji innej firmy.
Eagle-Eye,
3
@mcnesium Mówię, że prawdopodobnie nie zaszkodzi. Jeśli to możliwe, lepiej byłoby naprawić aplikację i wysłać poprawkę w górę.
Eagle-Eye,
5

Przekonałem się, że najlepiej jest ustawić zmienne środowiskowe za pomocą PAM. W przypadku nowoczesnych dystrybucji Linuksa oznacza to /etc/environmentlub $HOME/.pam_environment(patrz man pam_env). Możesz także ustawić je /etc/security/pam_env.confza pomocą specjalnej składni. Oto jak ustawiam moje zmienne 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

Wcześniej ustawiałem te zmienne w /etc/profile.d/custom.sh. Jednak niektóre aplikacje uruchamiają się przed odczytem tego pliku. Przejście na metodę PAM rozwiązało problem wielu aplikacji, które zachowywały się w ten sposób.

carlwgeorge
źródło
5
Uwaga: nie jest to zgodne z wartościami domyślnymi określonymi w specyfikacji katalogu podstawowego XDG
Tom Hale,
2
@TomHale Oczywiście, że nie, jedynym celem ustawienia zmiennych jest przesłonięcie wartości domyślnych. Jeśli jesteś zadowolony z wartości domyślnych, nie musisz wcale ustawiać tych zmiennych.
carlwgeorge
1
Ubuntu 14.04 nie ustawia domyślnie zmiennych katalogowych XDG - tylko dlatego, że istnieje specyfikacja, nie oznacza, że ​​jej dystrybucja podąża za nią.
Tom Hale,
2
Nie ma znaczenia, czy chcę, export LESSHISTFILE="$XDG_CACHE_HOME"/less/historygdzie lessnie rozpoznaje się specyfikacji, a moja dystrybucja nie określa jeszcze wartości domyślnych.
Tom Hale
2
@TomHale specyfikacja nie określa, na co system operacyjny powinien ustawić zmienne; definiuje zmienne, które, jeśli zdefiniowane i niepuste, powinna użyć aplikacja . A jeśli zmienna nie jest zdefiniowana lub jest pusta, aplikacja powinna użyć domyślnej ścieżki wymienionej w specyfikacji. Zatem twój krótki przykład nie jest zgodny ze specyfikacją, ponieważ najpierw nie sprawdza, czy XDG_CACHE_HOMEjest zdefiniowany i niepusty. Zamiast tego powinno być:export LESSHISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}"/less/history
villapx
0

Dla użytkowników Zsh, zdefiniuj to w swoim .zshenvpliku

export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
smac89
źródło
1
Downvoter chce się wytłumaczyć?
smac89