Традиционно местом для определения пользовательских переменных среды в системах Unix является ~/.profile
. Этот файл считывается оболочкой входа (т.е. программой, которая запускается при входе в систему и в которую можно вводить команды), при условии, что оболочка входа является Bourne-совместимой оболочкой.
Bash - это Bourne-совместимая оболочка. Когда он вызывается как оболочка входа в систему, он читает ~/.bash_profile
если этот файл существует, и ~/.profile
если ~/.bash_profile
не существует.
Как правило, если вы вводите свой пароль в текстовом режиме (например, в текстовой консоли или удаленно с помощью ssh), то оболочка, которую вы получаете, является оболочкой входа в систему.
Однако, если вы вводите свой пароль в графической программе и входите в графическую среду, это обходит обычную оболочку входа в систему. Возможность чтения .profile
в этом случае зависит от того, как настроен графический сеанс; например, он варьируется между дистрибутивами Linux, между дисплеями и между средами рабочего стола. Иногда одна из программ в цепочке явно вызывает оболочку входа; иногда одна из программ явно читает ~/.profile
; и иногда ничего этого не происходит, и ~/.profile
не читается.
Чтобы привести пример изменчивости, насколько я могу судить по беглому взгляду на сценарии, в Ubuntu 10.04: если вы входите в систему с помощью kdm или lxdm, ~/.bash_profile
читается, если она существует, и ~/.profile
противном случае; если вы входите в систему с помощью gdm, читается только ~/.profile
; если вы войдете в систему с помощью xdm, ~/.profile
не будет прочитан.
Все системы, которые я знаю, предоставляют какой-либо способ установки переменных среды для каждого пользователя. К сожалению, нет общего ответа.
Обратите внимание, что иногда вы увидите рекомендации по установке переменных среды в ~/.bashrc
или запуску оболочки входа в систему для каждого терминала в среде графического интерфейса. Оба плохие идеи; Одной из причин является проблема, с которой вы столкнулись, а именно то, что переменные среды были доступны только в программах, запускаемых через терминал, а не в программах, запускаемых непосредственно с помощью значка, меню или сочетания клавиш.