Правильно налаштоване середовище


15

Я використовую zsh та gdm для запуску gnome. Деякий час тому я виявив, що змінні встановлені неправильно. Наприклад, LANG / LC_ALL неправильні ( ""замість en_GB.UTF-8).

Я розділив .zshrcна .zshrcі .profile. В останньому я встановлюю змінні середовища, але як я можу встановити змінні перед початком сеансу? Я спробував кілька варіантів ( .xinitrc, .xsessionrc), але жоден, здавалося, не спрацював.

Редагувати Для уточнення - я використовував .profileі вручну отримував його .zshrc. Це жодним чином не змінює питання.


Ваш файл .profileвзагалі не завантажений чи щось інше замінює змінні мови? (Спробуйте встановити деяку іншу змінну , як , export MACIEJ_PROFILE=yesщоб переконатися. set -xВ .profileможе бути хорошим способом , щоб перевірити , що виконується під час і після .profile, якщо це читати взагалі.) Там немає сенсу в пошуку .profileз .zshrc.
Жил 'ТАК - перестань бути злим'

Це проблема в термінальних вікнах чи в інших місцях? Чи отримуєте ви бажані параметри локалі під час запуску ssh localhost zsh? Про що ssh localhost bash? Якщо bash добре, але не zsh, можливо, ви щось помістите /etc/zshenvабо ~/.zshenv(що, як правило, завжди погана ідея).
Жил "ТАК - перестань бути злим"

Жодна оболонка не працює в порядку (до і після розбиття). Проблема полягає в тому gnome-session, що цього сорту не встановлено.
Maciej Piechotka

Відповіді:


21

Найпростіший спосіб - винайти машину часу, відвідати різних людей, які створили файли запуску оболонки і сказати їм чітко розрізняти три речі:

  • налаштування сеансу, наприклад, змінні середовища;
  • запуск сеансу, тобто, наприклад, запуск оболонки командного рядка або менеджер вікон або запуск startx;
  • ініціалізація оболонки, наприклад, псевдоніми, підказки, прив'язки клавіш.

Отримати сеанс проти оболонки не надто важко переносним способом: ініціалізація часу входу переходить у .profile(або .zprofile, або .login), ініціалізація оболонки переходить у .bashrcабо .zshrc. Я раніше писав про .bash_profile, ЗШЕ проти інших оболонок , більше про переносимості ( в основному про БАШЕЄВ) , більш про те, хто читає.profile .

Залишилася проблема - це розрізняти налаштування сеансу та запуск сеансу. У більшості випадків ~/.profileвін виконується під час входу в систему і може подвоїтися як обидва, але є винятки:

  • Якщо оболонка для входу є (t) csh або zsh, ~/.loginа ~/.zprofileзамість неї використовується джерело ~/.profile. Те ж відноситься до Баш і ~/.bash_profile, але це легко вирішується пошуку ~/.profileз ~/.bash_profile.
  • Якщо ви входите в диспетчер дисплеїв (xdm, gdm, kdm, ...), чи ~/.profileчитається ваше , залежить від версії програми, від вашого розповсюдження (Linux чи іншим способом) та того, який тип сеансу ви виберете.
    • Якщо ви розраховуєте, що менеджер дисплеїв розпочне для вас сеанс, ви .profileповинні встановити змінні середовища, але не запускати сеанс (наприклад, менеджер вікон).
    • Традиційний файл конфігурації для X сеансів - ~/.xsessionце налаштування сеансу та запуск сеансу. Отже файл може бути по суті . ~/.xsession; . ~/.xinitrc. Деякі джерела розповсюдження ~/.profileраніше ~/.xsession. Сучасні дистрибутиви є джерелом лише ~/.xsessionтоді, коли ви вибираєте "спеціальний" сеанс із менеджера дисплеїв, і такий сеанс доступний не завжди.
    • У вашого менеджера сеансів може бути свій спосіб встановлення змінних середовища. (Це необов'язкова частина вашого робочого середовища, вибрана вами через файл конфігурації або шляхом вибору типу сеансу при вході в систему; не плутайте його зі сценаріями запуску сеансу, наданими менеджером дисплея, які виконуються під вашим користувачем, але вибирають на загальносистемній основі. Так, це безлад.)

Підсумовуючи це, ~/.profileє правильним місцем для змінних середовищ. Якщо він не прочитаний, спробуйте знайти його з ~/.xsession(і запустіть X програми звідти), або шукайте метод, що залежить від системи (який може залежати від вашого розповсюдження, диспетчера дисплея, якщо такий є, типу сеансу, якщо менеджер дисплея, і середовище робочого столу або керівник сеансу).


.xsessionбув файл, який я шукав.
Мацей П'єхотка

1
Я погоджуюся з усім, крім вашого резюме. Я не думаю, що ви встановили цю точку. Якщо ваші .profileджерела .bashrcчи подібні, ви можете надійно встановити змінні середовища .bashrcне тільки для сеансів входу в систему, але і для нових оболонок, які потребують різних налаштувань, наприклад, якщо ви починаєте xtermз gnome-terminalі хочете відрізнятись dircolors.
Мікель

@Mikel Якщо встановити змінні середовища .bashrc, вони замінять ваші попередні налаштування. Наприклад, якщо ви створили екземпляр Screen або Tmux з певними змінними середовища, все, що ви встановите, .bashrcбуде замінено ці налаштування. LS_COLORSце окремий випадок, оскільки це дійсно налаштування на один термінал; в ідеалі його слід встановити емулятором терміналу, а встановлення його у файлі rc-файлу оболонки - найкраще рішення.
Жил "ТАК - перестань бути злим"

1

У документації на Gentoo є стаття Посібник з локалізації Gentoo Linux . У розділі 3 йдеться про налаштування місцевості.

Найчастіше користувачі встановлюють лише змінну LANG на глобальній основі. Цей приклад для німецького локального унікоду:

Лістинг коду 3.1: Встановлення стандартної локальної системи в /etc/env.d/02locale

LANG="en_GB.UTF-8"

У моєму Gentoo LANGвстановлений цей файл і все працює належним чином ...

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=

Слідкуйте за тим, щоб цитована вами частина була в порядку, але посібник також рекомендує встановити змінну середовища в .bashrc, що невірно (див. Мою відповідь і, зокрема, superuser.com/questions/217431 ).
Жил "ТАК - перестань бути злим"

Дякую за таку детальну інформацію ... :) Я ніколи не використовував цю частину .bashrc - налаштування в env.dних більш універсальні.
пбм

Крім того, це по системі, а не за користувачем. Я вважаю за краще тримати параметри системи окремо від налаштувань користувача.
Maciej Piechotka
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.