Вопрос или проблема
Как я понимаю, различия между ~/.profile
, ~/.bash_profile
и /etc/profile
следующие:
~/.profile
считывается оболочками входа конкретного пользователя при запуске, если не существует оболочно-специфичного конфигурационного файла, такого как~/.bash_profile
или~/.zprofile
.~/.bash_profile
считывается оболочками входа Bash конкретного пользователя при запуске./etc/profile
считывается всеми оболочками входа всех пользователей при запуске.
Когда я вхожу в Ubuntu через дисплейный менеджер, запускается окружение рабочего стола вместо оболочки входа. Поэтому я ожидаю, что эти три файла инициализации оболочки не выполняются. Однако, к моему удивлению, они выполняются.
Для тестирования я заполнил три файла следующим образом:
~/.profile
:
export FROM_PROFILE="Hello from ~/.profile"
echo ~/.profile выполнен
~/.bash_profile
:
export FROM_BASH_PROFILE="Hello from ~/.bash_profile"
echo ~/.bash_profile выполнен
/etc/profile
:
export FROM_ETC_PROFILE="Hello from /etc/profile"
echo /etc/profile выполнен
Затем я перезагрузил систему. Я сам не считывал файлы.
Теперь, когда я открываю терминальное окно в окружении рабочего стола, переменные окружения из ~/.bash_profile
и /etc/profile
доступны в оболочке:
Вывод определенных переменных окружения в терминальное окно
Если я удалю ~/.bash_profile
, переменная окружения из ~/.profile
будет доступна:
Вывод определенных переменных окружения в терминальное окно
Но это не оболочка входа, что также видно из того, что выводы команд echo не отображаются. Значит, скрипты были выполнены ранее, но где? Даже преимущество ~/.bash_profile
перед ~/.profile
было соблюдено. Похоже, что все работает так, как если бы я вошел через терминал, но я этого не делал.
Ответ или решение
Когда вы входите в систему Ubuntu через графический интерфейс, кажется, что логика загрузки оболочки и конфигурация среды не подразумевает выполнения файлов ~/.profile
, ~/.bash_profile
и /etc/profile
. Однако это не совсем так, и давайте разберёмся, почему именно эти файлы исполняются во время графической авторизации, и как они взаимодействуют с вашим рабочим окружением.
Логика выполнения конфигурационных файлов
-
Типы оболочки:
~/.bash_profile
предназначён для логин-оболочек Bash. Эта оболочка загружается, когда пользователь входит в систему через терминал.~/.profile
исполняется, когда отсутствует оболочка специфична для терминала, такая как~/.bash_profile
или~/.zprofile
. То есть, если вы не указали~/.bash_profile
, то~/.profile
будет использован для настройки окружения./etc/profile
— это глобальный файл конфигурации, применяемый ко всем логин-оболочкам для всех пользователей системы.
-
Графический вход в систему:
Хотя вы входите в систему через графический интерфейс, сессия X11 или Wayland, инициируемая менеджером дисплея, фактически создает логин-сессию. Это означает, что в момент вашей авторизации система рассматривает это как вход в систему с пользователем, тем самым загружая логин-оболочку, и, как следствие, исполняя указанные конфигурационные файлы. -
Процесс инициализации:
- После успешного входа управляющий дисплеем (например, LightDM или GDM) запускает вашу сессию.
- На этом этапе выполняется скрипт, который может вызывать
bash
как часть процесса запуска. Это произойдёт вне зависимости от того, какая оболочка настроена по умолчанию, будь то Bash, Zsh или другая. - В этот момент система инициирует логин-оболочку, в результате чего исполняются все скрипты, относящиеся к логин-сессии.
Примечания о тестировании
Во время тестирования, когда вы заполняли файлы ~/.profile
, ~/.bash_profile
и /etc/profile
, вы заметили, что они действительно исполняются даже при открытии терминала в графическом окружении. Это подтверждается следующими моментами:
- Когда вы получили доступ к переменным среды
FROM_PROFILE
,FROM_BASH_PROFILE
иFROM_ETC_PROFILE
, это стало возможным благодаря тому, что переменные были экспортированы в окружение. То есть, система явно передала эти переменные в сессию, которая была создана при графическом входе. - Если вы удалите
~/.bash_profile
, но сохраните~/.profile
, переменные из~/.profile
станут доступными. Это значит, что если~/.bash_profile
отсутствует, система ищет следующий возможный файл для исполнения, что как раз и объясняет последовательность выполнения.
Итоги
Таким образом, даже во время графической авторизации происходит ряд действий, которые обеспечивают выполнение настроек для вашей сессии. Это взаимодействие между управлением дисплеем, процессами и конфигурационными файлами оболочки укрепляет работу системы, позволяя пользователям эффективно использовать свои окружения в графических интерфейсах.
Данная схема служит подтверждением того, что даже при использовании графических интерфейсов операционная система остаётся верной принципам управления логин-сессиями. Понимание этой логики даст вам возможность лучше настраивать вашу систему под личные предпочтения, оптимизируя работу с окружением Ubuntu.