
Estoy muy ( zsh
)/algo ( bash
) familiarizado con la secuencia de inicialización del shell cuando el usuario inicia sesión a través de una interfaz de texto.
Pero ¿qué pasa en el caso de un "inicio de sesión gráfico", IOW, cuando el usuario inicia sesión a través de una interfaz gráfica (por ejemplo, a través del llamado "administrador de pantalla" en Linux, o el inicio de sesión estándar en OS X)?
Estoy particularmente interesado en aquellos archivos ( .zprofile
,, ) que se supone que se obtienen únicamente para "shells de inicio de sesión" .zlogin
. .profile
Cuando el inicio de sesión se realiza a través de una interfaz de texto, esto equivale más o menos a acceder "exactamente una vez por sesión".
Cuando el inicio de sesión se realiza a través de una interfaz gráfica, no me queda claro que, para empezar, exista alguna vez un "shell de inicio de sesión". E incluso si .zprofile
et al. de alguna manera se obtienen en algún momento como parte de la secuencia de inicio de sesión gráfica, no me queda claro cómo las configuraciones (por ejemplo, variables de entorno exportadas) resultantes del origen de estos archivos afectan el resto de la sesión.
Por ejemplo, ¿estas configuraciones afectan el entorno que ven las aplicaciones que se inician automáticamente en el momento de iniciar sesión? ¿O por aplicaciones que el usuario inicia más tarde haciendo clic en los iconos del escritorio?
De hecho, ¿qué pasa con las configuraciones que ocurren en .zshenv
o en .zshrc
/ .bashrc
1 ? ¿Tienen algún impacto en el entorno visto por las aplicaciones "iniciadas automáticamente" y/o "iniciadas con un clic"?
Si la respuesta a cualquiera de las dos últimas preguntas es algo así como "no de forma predeterminada", la pregunta de seguimiento sería: ¿cómo se puede garantizar que las configuraciones realizadas en (al menos) .zprofile
/ .profile
y posiblemente también .zlogin
se transmitan al entorno visto por todas las aplicaciones "iniciadas automáticamente" y "iniciadas con un clic"?
Estoy interesado en las respuestas a estas preguntas para dos shells zsh
y bash
dos sistemas operativos, Linux y OSX.
1 asumiendo que .zshrc
/ .bashrc
se obtienen como parte de la zsh
/ bash
secuencia de inicialización incorporada para shells "interactivos", en lugar de ser obtenidos explícitamente por .zprofile
/ .profile
.
Respuesta1
Los archivos de configuración del Shell entran en juego sólo cuando se invoca el Shell. No hay nada mágico en ellos. Cualquier proceso puede cambiar su entorno. La mayoría solo lo lee, pero cualquier programa que ejecute otro puede tener motivos para alterar el entorno primero.
todo comienza conen eso, o cualquier pid 1 que esté en su sistema. Inicia el servidor X, que inicia el administrador de pantalla, que proporciona el mensaje de inicio de sesión. La secuencia que inicia X11 no necesita incluir un shell de inicio de sesión; Por ejemplo,en esopodría llamar a fork(2) y exec(2) en /usr/bin/startx. Sin iniciar sesión, no .profile
. El servidor X hereda sólo el entorno exportado poren eso.
¿Cómo es el entorno del servidor X? Puede extraer el entorno de un proceso con ps(1). Más fácil, pero no definitivo, es utilizarsshnombre de host/usr/bin/env(dóndenombre de hostes el nombre de la máquina que aloja el servidor X11). Similar a lo que suele ocurrir con el servidor X, sshd se ejecutaambientesin crear un shell de inicio de sesión.
Luego llegamos a lo que hace su administrador de pantalla cuando inicia sesión. Bifurca un proceso, cambia el uid de (probablemente) raíz al suyo e inicia un administrador de sesión. Para más detalles, lo recomiendo a su amigable manual.
A partir de ese momento, el gestor de sesión ha establecido su entorno, sea cual sea el medio. Los procesos que crea (intérpretes de comandos u otras aplicaciones al "hacer clic" en ellos) heredan su entorno. El administrador de sesión puede proporcionar una manera de definir valores de variables de entorno adicionales por ícono, y el proceso en el que se inicia el elemento en el que se hace clic puede (como lo hace un shell) alterar su entorno al inicio, tal vez mediante un archivo de configuración.
Está todo ahí. Para comprender cómo el medio ambiente llega a ser lo que es, "sólo" hay que seguir la cadena de procesos que lo crearon y comprender lo que cada uno le hizo al medio ambiente. Desafortunadamente, esa cadena no sólo varía según el sistema operativo, la distribución y la configuración de la máquina y del usuario, sino que tampoco está particularmente bien documentada ni equipada. Buena suerte, por ejemplo, al encontrar documentación que indique qué variables de entorno se configurarán antes de, digamos, que se inicie sshd, o al encontrar un cliente X11 que muestre el entorno del administrador de sesión.