Какие правильные места для:
- Глобальные переменные среды, предназначенные для воздействия на всех пользователей?
- Пользовательские переменные среды?
Какие правильные места для:
Чтобы добавить к ответу sagarchalise, я могу обобщить то, что ссылка предлагает в качестве подходящих мест для настроек.
/etc/environment /etc/profile или /etc/bash.bashrcСо страницы:
/etc/environment[...] специально предназначен для общесистемных настроек переменных среды. Это не файл сценария, а скорее состоит из выражений присваивания, по одному на строку. В частности, в этом файле хранятся общесистемные настройки локали и пути.
С помощью /etc/profile это очень похожий на Unix способ, но его функциональность значительно сокращена в Ubuntu. Он существует только для того, чтобы указывать на /etc/bash.bashrc и собирать заявки от /etc/profile.d.
В моей системе единственная интересная запись - запись в профиле.d - это /etc/profile.d/bash_completion.sh.
Страница Ubuntu рекомендует ~/.pam_environment, который загружается с помощью система PAM когда ваш сеанс запущен (TTY, GUI, SSH и т.д.). Это пользовательский эквивалент /etc/environment и использует тот же синтаксис. Ссылка предлагает альтернативы, если это не сработает:
~/.profile для большинства раковин. Этот файл также может быть применен дисплейным менеджером к вашему сеансу GUI, но это не обязательно относится ко всем дисплейным менеджерам или серверам отображения (X11 vs Wayland) или сеансам.И специфичный для bash:
~/.bash_profile или ~./bash_login - Если один из них существует, bash выполняет его вместо ~/.profile когда bash запускается как оболочка входа в систему. Баш предпочтет ~/.bash_profile к ~/.bash_login. [...] По умолчанию эти файлы не будут влиять на графический сеанс".~/.bashrc - "... может быть, это самое простое место для установки переменных". Я думаю вики-страница сообщества, посвященная переменным среды поможет вам разобраться
У тебя есть:
/etc/profile: общесистемный файл .profile для оболочки Bourne (sh(1)) и совместимых с Bourne оболочек (bash(1), ksh(1), ash(1), ...).
который в Lucid и Maverick работает
/etc/profile.d/*.shесли присутствует, и если оболочка пользователя является bash:
/etc/bash.bashrcДля пользовательской среды существует запутанный массив, специфичный для оболочки, и считается ли он "оболочкой входа в систему". Если оболочка bash:
~/.bash_profile The personal initialization file, executed for login shells ~/.bashrc The individual per-interactive-shell startup fileдля sh/dash:
$HOME/.profileдля zsh я даже не собираюсь пытаться чтобы разобраться в этом.
Как рекомендовано на https://help.ubuntu.com/community/EnvironmentVariables:
Глобальные переменные среды, предназначенные для воздействия на всех пользователей, должны входить /etc/environment.
Пользовательские переменные среды должны быть установлены в ~/.pam_environment.
Избегайте файлов profile и rc для настройки переменных среды в Ubuntu. Они причинили мне больше головной боли, чем того стоят.
Однако это легче сказать, чем сделать ;)
Вполне возможно, что вы можете столкнуться с тем же пробелом в конфигурации, который существовал для меня. Смотрите обходной путь для зашифрованного дома ниже.
~/.pam_environment:PATH DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/binIDEA_JDK DEFAULT=${HOME}/Applications/jdkПочему такой уродливый статический путь? ${PATH} для меня это не сработало бы. Я несколько раз замуровывал свой логин, пытаясь обойти это, поэтому я придерживаюсь уродливой статической копии значений по умолчанию :)
В версиях Ubuntu до версии Precise 12.04 Beta 2 включительно, если вы используете зашифрованный домашний каталог, вам необходимо будет изменить /etc/pam.d/common-session чтобы заставить его загрузиться ~/.pam_environment. Это решение, по-видимому, работает для более ранних версий, но я его не тестировал.
Похоже, это проблема с зашифрованными домашними каталогами. Я добавил
требуемая сессия pam_env.so
в конце /etc/pam.d/common-session и теперь ~/.pam_environment считывается. В другой системе без зашифрованных домашних каталогов (также 10.04) обходной путь не требуется. Возможно, в моем случае система пытается прочитать ~/.pam_environment до того, как он будет расшифрован.
Адаптировано из моего ответа о суперпользователе: https://superuser.com/a/408373/66856