Prawidłowe ustawienie środowiska


15

Używam zsh i gdm do uruchamiania gnome. Jakiś czas temu odkryłem, że zmienne nie są ustawione poprawnie. Na przykład LANG / LC_ALL są niepoprawne ( ""zamiast en_GB.UTF-8).

Podzieliłem .zshrcna .zshrci .profile. W tym ostatnim ustawiam zmienne środowiskowe, ale jak mogę ustawić zmienne przed rozpoczęciem sesji? Próbowałem kilku opcji ( .xinitrc, .xsessionrc), ale żadna nie wydawała się działać.

Edytuj Aby wyjaśnić - użyłem .profilei ręcznie pozyskałem go .zshrc. To i tak nie zmienia pytania.


Czy .profilew ogóle nie jesteś załadowany, czy też coś innego nadpisuje zmienne regionalne? (Spróbuj ustawić jakąś inną zmienną, jak export MACIEJ_PROFILE=yessię upewnić. set -xW .profilemoże być dobrym sposobem, aby sprawdzić, co jest wykonywane i po .profile, czy to w ogóle czytać.) Nie ma sensu w zaopatrywaniu .profileod .zshrc.
Gilles „SO- przestań być zły”

Czy to problem w oknach terminali czy gdzie indziej? Czy po uruchomieniu otrzymujesz żądane ustawienia regionalne ssh localhost zsh? Co ssh localhost bash? Jeśli bash jest w porządku, ale nie zsh, być może włożyłeś coś /etc/zshenvlub ~/.zshenv(co jest prawie zawsze złym pomysłem).
Gilles „SO- przestań być zły”

Nie, powłoka działa OK (przed i po podziale). Problem polega na tym, gnome-sessionże nie ma tej zmiennej.
Maciej Piechotka,

Odpowiedzi:


21

Prostym sposobem jest wynalezienie wehikułu czasu, odwiedzanie różnych osób, które opracowały pliki startowe powłoki i powiedzenie im, aby wyraźnie rozróżniały trzy rzeczy:

  • konfiguracja sesji, np. zmienne środowiskowe;
  • uruchamianie sesji, tj. np. uruchamianie powłoki wiersza poleceń lub menedżera okien lub uruchamianie startx;
  • inicjalizacja powłoki, np. aliasy, monity, powiązania klawiszy.

Nie jest trudno uzyskać sesję vs. powłokę w sposób przenośny: inicjalizacja czasu logowania przechodzi w .profile(lub .zprofile, lub .login), inicjalizacja powłoki wchodzi w .bashrclub .zshrc. Wcześniej pisałem o .bash_profile, zsh vs. inne powłoki , więcej o przenośności (głównie o bash) , więcej o tym, kto czyta.profile .

Pozostającym problemem jest rozróżnienie między konfiguracją sesji a uruchomieniem sesji. W większości przypadków ~/.profilejest wykonywany podczas logowania i może podwoić się jako jedno i drugie, ale są wyjątki:

  • Jeśli twoja powłoka logowania to (t) csh lub zsh ~/.logini ~/.zprofilejest pozyskiwana zamiast ~/.profile. Ditto dla bash i ~/.bash_profile, ale to łatwo rozwiązać poprzez pozyskiwanie ~/.profileod ~/.bash_profile.
  • Jeśli logujesz się w menedżerze wyświetlania (xdm, gdm, kdm,…), to, czy twój ~/.profileodczyt zostanie odczytany, zależy od wersji programu, twojej dystrybucji (Linux lub innej) oraz od wybranego rodzaju sesji.
    • Jeśli liczysz na to, że menedżer ekranu uruchomi dla ciebie sesję, .profilemusisz ustawić zmienne środowiskowe, ale nie rozpocząć sesji (np. Menedżer okien).
    • Tradycyjny plik konfiguracyjny dla sesji X to ~/.xsessionzarówno konfiguracja sesji, jak i uruchamianie sesji. Tak więc plik może być zasadniczo . ~/.xsession; . ~/.xinitrc. Niektóre dystrybucje źródłowe ~/.profilewcześniej ~/.xsession. Współczesne dystrybucje pochodzą tylko ~/.xsessionwtedy, gdy wybierzesz „niestandardową” sesję z menedżera wyświetlania, a taka sesja nie zawsze jest dostępna.
    • Twój menedżer sesji może mieć własny sposób ustawiania zmiennych środowiskowych. (Jest to opcjonalna część środowiska pulpitu, wybrana przez Ciebie w pliku konfiguracyjnym lub przez wybranie typu sesji podczas logowania; nie mylić jej ze skryptami uruchamiania sesji dostarczonymi przez menedżera wyświetlania, które są wykonywane przez użytkownika, ale wybierane ogólnosystemowo. Tak, to bałagan).

Podsumowując, ~/.profilejest właściwym miejscem dla zmiennych środowiskowych. Jeśli nie jest czytany, spróbuj go pobrać ~/.xsession(i uruchomić stamtąd programy X) lub poszukaj metody specyficznej dla systemu (która może zależeć od twojej dystrybucji, ewentualnego menedżera wyświetlania, typu sesji, jeśli menedżer wyświetlania, i środowiska pulpitu lub menedżer sesji).


.xsessionbył plik, którego szukałem.
Maciej Piechotka,

1
Zdecydowanie zgadzam się ze wszystkim oprócz twojego streszczenia. Nie sądzę, że ustaliłeś ten punkt. Jeśli masz .profileźródła .bashrclub podobne, możesz niezawodnie ustawić zmienne środowiskowe .bashrcdla nie tylko sesji logowania, ale dla nowych powłok, które wymagają różnych ustawień, np. Jeśli zaczynasz xtermod gnome-terminali chcesz inaczej dircolors.
Mikel

@Mikel Jeśli ustawisz zmienne środowiskowe, zastąpią .bashrcone poprzednie ustawienia. Na przykład, jeśli uruchomiłeś instancję Screen lub Tmux z określonymi zmiennymi środowiskowymi, wszystko, co ustawisz .bashrc, zastąpi te ustawienia. LS_COLORSjest szczególnym przypadkiem, ponieważ tak naprawdę jest to ustawienie na terminal; idealnie powinien być ustawiony przez emulator terminala, a ustawienie go w pliku rc powłoki jest najlepszym rozwiązaniem.
Gilles 'SO - przestań być zły'

1

W dokumentacji Gentoo znajduje się artykuł Przewodnik po lokalizacji systemu Linux w Gentoo . Rozdział 3 dotyczy ustawiania ustawień regionalnych.

Najczęściej użytkownicy ustawiają zmienną LANG tylko na poziomie globalnym. Ten przykład dotyczy niemieckiego ustawienia narodowego Unicode:

Listing 3.1: Ustawianie domyślnych ustawień regionalnych systemu /etc/env.d/02locale

LANG="en_GB.UTF-8"

W moim Gentoo LANGjest ustawiony w tym pliku i wszystko działa poprawnie ...

pbm@tauri ~ $ cat /etc/env.d/02locale 
LANG="pl_PL.UTF-8"

pbm@tauri ~ $ locale
LANG=pl_PL.UTF-8
LC_CTYPE="pl_PL.UTF-8"
LC_NUMERIC="pl_PL.UTF-8"
LC_TIME="pl_PL.UTF-8"
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY="pl_PL.UTF-8"
LC_MESSAGES="pl_PL.UTF-8"
LC_PAPER="pl_PL.UTF-8"
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT="pl_PL.UTF-8"
LC_IDENTIFICATION="pl_PL.UTF-8"
LC_ALL=

Uważaj, że część, którą zacytowałeś, jest w porządku, ale przewodnik zaleca także ustawienie zmiennej środowiskowej .bashrc, która jest niepoprawna (zobacz moją odpowiedź, aw szczególności superuser.com/questions/217431 ).
Gilles 'SO - przestań być zły'

Dzięki za tak szczegółowe informacje ... :) Nigdy nie korzystałem z tej części .bashrc - ustawienia w env.dsą bardziej uniwersalne.
pbm

Dotyczy to również systemu zamiast użytkownika. Wolę oddzielić ustawienia systemowe od ustawień użytkownika.
Maciej Piechotka,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.