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

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, что этот набор переменных не установлен.
Мацей Печотка

Ответы:

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 Localization Guide . Глава 3 о настройке локали.

Обычно пользователи устанавливают переменную LANG только на глобальном уровне. Этот пример для немецкого языка Unicode:

Листинг 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более универсальны.
PBM
Также это для системы, а не для пользователя. Я предпочитаю хранить системные настройки отдельно от пользовательских настроек.
Мацей Пехотка