
Как установить постоянную переменную среды для каждого пользователя независимо от используемой оболочки ( bash
, zsh
и fish
)?
решение1
EDIT: согласноКакой наилучший способ настройки переменных окружения, не зависящий от дистрибутива/оболочки?, лучшее решение для этого -~/.pam_environment
EDIT: вернулся к хакерскому решению, поскольку ~/.profile
не все оболочки его читают:
Все исходники оболочек /etc/profile
.
Это означает, что в /etc/profile
, вы можете поместить строку типа
. $HOME/.custom-profile
Затем вы можете добавить свои переменные ~/.custom-profile
для каждого пользователя
решение2
Все оболочки считывают разные файлы профилей пользователей (zsh: ~/.profile, bash: ~/.bash_profile, csh имеет только файл rc и т. д.). Поэтому вам придется изменить всех этих потенциальных кандидатов.
Однако большинство оболочек, как минимум, возвращаются к чтению ~/.profile (спасибо @terdon за указание на это!), так что именно там вы можете разместить свои экспорты.
Поскольку «вход в систему» обычно осуществляется процессом, имеющим возможность изменять свои uid и gid (обычно это менеджер входа в систему, работающий от имени root), именно эти программы должны определить среду для порожденной программы (например, оболочку).
Но: существует более одного менеджера входа (ваш GDM/lightdm/KDM/... визуальный менеджер входа, getty, logind/loginct, ssh, getty...), и они считывают конфигурацию из разных файлов, так что здесь тоже нет единого пути.