О связи между инициализацией оболочки и настольными приложениями после «графического входа»

О связи между инициализацией оболочки и настольными приложениями после «графического входа»

Я очень ( zsh)/несколько ( bash) знаком с последовательностью инициализации оболочки, когда пользователь входит в систему через текстовый интерфейс.

Но как быть со случаем «графического входа», когда пользователь входит в систему через графический интерфейс (например, через так называемый «дисплейный менеджер» в Linux или стандартный вход в систему OS X)?

Меня особенно интересуют те файлы ( .zprofile, .zlogin, .profile), которые должны быть получены только для "оболочек входа". Когда вход осуществляется через текстовый интерфейс, это более или менее эквивалентно получению "ровно один раз за сеанс".

Когда вход в систему происходит через графический интерфейс, мне не ясно, есть ли вообще "оболочка входа". И даже если .zprofileи т. д. каким-то образом в какой-то момент берутся из графической последовательности входа в систему, мне не ясно, как настройки (например, экспортированные переменные среды), полученные в результате получения этих файлов, влияют на остальную часть сеанса.

Например, влияют ли эти настройки на среду, которую видят приложения, которые автоматически запускаются при входе в систему? Или приложения, которые пользователь запускает позже, нажимая на значки на рабочем столе?

Кстати, а как насчет настроек, которые происходят в .zshenv, или в .zshrc/ .bashrc1 ? Они как-то влияют на среду, которую видят "автозапускаемые" и/или "запускаемые по щелчку" приложения?

Если ответ на любой из последних двух вопросов будет примерно таким: «не по умолчанию», то следующим вопросом будет: как можно гарантировать, что настройки, выполненные в (как минимум) .zprofile/ .profile, а возможно также и .zlogin, будут переданы в среду, видимую всеми «автоматически запускаемыми» и «запускаемыми по щелчку» приложениями?

Меня интересуют ответы на эти вопросы для двух оболочек, zshи bash, и двух операционных систем, Linux и OSX.


1 , предполагая, что .zshrc/ .bashrcявляются частью встроенной последовательности инициализации zsh/ bashдля «интерактивных» оболочек, а не явно являются источником .zprofile/ .profile.

решение1

Файлы конфигурации оболочки вступают в игру только при вызове оболочки. В них нет ничего магического. Любой процесс может изменить свое окружение. Большинство только читают его, но любая программа, которая исполняет другую, склонна сначала иметь причину изменить окружение.

Все начинается св этом, или любой другой pid 1 в вашей системе. Он запускает X-сервер, который запускает менеджер отображения, который предоставляет приглашение на вход. Последовательность, которая запускает X11, не обязательно должна включать оболочку входа; например,в этомможет вызвать fork(2) и exec(2) на /usr/bin/startx. Нет входа, нет .profile. X-сервер наследует только среду, экспортированнуюв этом.

Как выглядит среда X-сервера? Вы можете извлечь среду процесса с помощью ps(1). Проще, но не окончательно, использоватьсшимя хоста/usr/bin/env(гдеимя хоста(имя машины, на которой размещен сервер X11). Подобно тому, что обычно происходит с сервером X, sshd выполняетокружающая средабез создания оболочки входа.

Затем мы переходим к тому, что делает ваш дисплейный менеджер, когда вы входите в него. Он разветвляет процесс, меняет uid с (вероятно) root на ваш и запускает менеджер сеансов. За подробностями рекомендую вам ваше дружелюбное руководство.

С этого момента менеджер сеансов устанавливает свою среду, какими бы средствами это ни было. Процессы, которые он создает — интерпретаторы команд или другие приложения, «щелкнув» по ​​ним, — наследуют его среду. Менеджер сеансов может предоставить способ определения дополнительных значений переменных среды для каждого значка, а процесс, который запускает щелкнувший элемент, может (как это делает оболочка) изменить свою среду при запуске, возможно, с помощью файла конфигурации.

Все это есть. Чтобы понять, как среда становится тем, чем она является, вам "просто" нужно проследить цепочку процессов, которые ее создали, и понять, что каждый из них сделал со средой. К сожалению, эта цепочка не только различается в зависимости от ОС, дистрибутива и конфигурации машины и пользователя, но и не особенно хорошо документирована или инструментирована. Удачи, например, в поиске документации, в которой указано, какие переменные среды будут установлены перед запуском, скажем, sshd, или в поиске клиента X11, который отображает среду менеджера сеансов.

Связанный контент