Модуль pam_env PAM позволяет вам устанавливать их как в, так /etc/environment
и в ~/.pam_environment
зависимости от того, хотите ли вы его для всех пользователей (для всей системы) или только для вашего пользователя (для всей сессии).
Общесистемные переменные среды
Параметры переменных среды, которые влияют на систему в целом (а не только на конкретного пользователя), не следует помещать ни в один из многих сценариев системного уровня, которые выполняются при загрузке системы или сеанса рабочего стола, а в
/etc/environment
- Этот файл специально предназначен для общесистемных настроек переменных среды. Это не файл сценария, а скорее состоит из выражений присваивания, по одному на строку. В частности, этот файл хранит общесистемные настройки языка и пути.
Переменные среды сеанса
Настройки переменных среды, которые должны влиять только на конкретного пользователя (а не на систему в целом), должны быть установлены в:
~/.pam_environment
- Этот файл специально предназначен для настройки среды пользователя. Это не файл сценария, а скорее состоит из выражений присваивания, по одному на строку.
Примечание: использование .pam_environment
требует повторного входа в систему для инициализации переменных. Перезапуска только терминала недостаточно для использования переменных.
Смотрите больше в вики Ubuntu по переменным окружения .
~/.pam_environment
решением состоит в том, что по умолчанию модуль pam_env не читает его, если дистрибутив не настроит его иначе. На Fedora 20 это не читается например.~/.xsession
загрузит переменные окружения для приложений X См. Unix.stackexchange.com/questions/47359/what-is-xsession-foruser_envfile=filename
. Моя проблема с pam_env заключается в том, что переменная HOME может быть недоступна в зависимости от приложения PAM. Что ограничивает его использование только абсолютными переменными./etc/X11/Xsession.d/
... или в соответствии с этим каталогом, в зависимости от вашего Linux (?). Я написал немного об этом здесь .Концепция заключается в том, что после входа в систему менеджер дисплеев запускает «Xsession» и получает (!) Все в этом каталоге в алфавитном порядке. Вы можете просто добавить скрипт, который изменяет PATH. Xsession, безусловно, будет вашим DE, и обычно все процессы являются дочерними для этого Xsession, поэтому наследуют среду PATH.
источник
/etc/X11/Xsession.d/40x11-common_xsessionrc
исходные глобальные переменные среды. Этот скрипт будет получать что-либо в $ HOME / .xsessionrc, если файл присутствует. Это позволяет пользователю устанавливать глобальные переменные среды для своего сеанса X, например информацию о локали.Процесс наследует среду от родительского процесса, который его запускает. Чтобы изменить переменную PATH или другие значения среды в дочернем элементе, мы можем установить переменную в значение в родительском элементе и экспортировать переменную, если мы находимся в оболочке, а затем запустить дочерний процесс. Дочерний также может прочитать один или несколько файлов инициализации, чтобы изменить свою среду при запуске.
Итак, есть еще два вопроса, чтобы получить ответ:
Что такое дерево наследования родитель / потомок, которое приводит к процессу, на который вы хотите повлиять PATH или изменение среды?
Какие файлы инициализации используются / считываются / получены из соответствующих процессов в этом дереве?
Вот часть вывода ps (1), чтобы показать, что я подразумеваю под деревом наследования:
Обратите внимание на графические последовательности \ _ и номера PIP / PPID (идентификатор процесса и родительский идентификатор). PID 1855 был запущен (какой-то ребенок?) 1497, который был запущен в 1481, который был запущен PID 1, который был запущен процессом-предком 0.
Выполните аналогичную трассировку наследования для процесса, на который вы хотите повлиять, выясните, какие файлы инициализации являются релевантными, и внесите изменения в PATH где-то в этом дереве, возможно, с помощью чего-то похожего на:
источник
ps
для определения родительского процесса входа в систему GUI?