Documentación: Arquitectura de la sesión de Linux

20

Estoy buscando una buena documentación general que describa la pila de demonios y servicios involucrados en una sesión moderna de Linux. Aunque he leído varios documentos sobre dbus, y systemd, todavía no entiendo el panorama general.

En particular, estoy buscando respuestas a estas preguntas (no conteste las preguntas, solo deberían aclarar qué tipo de documentación estoy buscando):

  • Después de iniciar sesión, ¿qué proceso es la raíz de la sesión del usuario?

  • ¿Qué procesos deberían iniciarse y por qué? Estoy buscando una respuesta independiente del escritorio, sin importar si se inicia Gnome, KDE, FVWM o un shell simple.

  • ¿Qué papel juegan todos estos demonios? ¿Cuál de ellos correría solo, que dependería de otros? ¿Cuál debería comenzar quién, por qué y por cuánto tiempo? ¿Y quién debería mantener ese zoológico?

Yo te pido, porque he encontrado que tengo todo un zoológico de demonios ejecutándose justo después de arrancar: systemd-journald, systemd-udevd, dbus-daemon, systemd-logind. Pero no es suficiente: Aparte de éstos, Correr ultraligera PDF-espectador zathura más llena mi sesión con dbus-launch, dbus-daemon, at-spi2-registryd, y at-spi-bus-launcher, este último lanzamiento otra dbus-daemon. Ninguno de ellos ha estado allí antes, ninguno ha sido invitado, pero se quedarán en la casa, dándome una sensación espeluznante, hasta que cierre la sesión. Estoy seguro de que me falta algo aquí ...

Otro ejemplo: después de iniciar sesión, tengo un systemdUID en ejecución con mis usuarios, pero no tengo idea de lo que debería hacer (desde la versión 206 creo que se supone que no debo usar eso como administrador de sesión, ¿verdad?). Tiene un proceso secundario (sd-pam), sobre el cual no pude encontrar documentación.

¿Qué hacen? ¿Cuál es la idea detrás de esta configuración?

Para aclarar mi perspectiva: en "los viejos tiempos" era suficiente saber que loginlanzaría mi shell de inicio de sesión ( bash, ejecutándose ~/.profile), y desde ese punto podría continuar construyendo una sesión, dependiendo de las circunstancias, tal vez iniciando screen, o startx.

stefan
fuente
44
Esta pregunta no puede responderse porque cada distribución hace sus propias cosas. Peor aún, los entornos de escritorio KDE y GNOME difieren enormemente en lo que sucede después de que se inicia el sistema de ventanas X. Peor aún, las distribuciones cambian su forma de hacerlo: usted menciona systemd, que es relativamente nuevo. Ahora, si desea una respuesta independiente de la distribución, es "el kernel de Linux inicia init, y todo lo demás depende de cómo se configure init". Esta respuesta es tan superficial como amplia, mientras que por cada respuesta profunda tendrá que limitar su pregunta al menos a las versiones de distribución.
Thorsten Staerk
1
Por favor, divide tu pregunta. Por ejemplo, podría decirle que busque gnome-session y startkde como el proceso de "sesión raíz" que necesitaría más explicaciones.
Thorsten Staerk
1
@ thorsten-staerk: "no se puede responder porque cada distribución hace sus propias cosas" ¿Entonces estás diciendo que no puedo suponer qué demonios se están ejecutando? Realmente no puedo creer eso. Lo siento, pero dividir la pregunta no daría la respuesta que estoy buscando. Pero intentaré reformular "independiente del escritorio": estoy buscando el mínimo común denominador, o el conjunto mínimo de demonios en ejecución (y la justificación para cada uno de ellos), que se espera en una sesión. Cómo interactúan y cómo este conjunto cambia con diferentes tipos de sesión (¿hay un dbusd en una sesión de terminal? A través de SSH?)
stefan
1
Linux se ejecuta en dispositivos que no tienen más que una pantalla LCD. También se ejecuta en teléfonos móviles que no tienen una AppStore y tampoco una cámara. También se ejecuta en un Samsung Galaxy y en mainframes. Puede tener sentido, usar varios terabytes de RAM y puede caber en algunos kilobytes. Me temo que el mínimo común denominador de una sesión de Linux es Linux y usted tiene la "libertad de elección" que a veces es fea para elegir qué más necesita. Para una computadora de escritorio, intentaré enumerar los denominadores comunes más bajos, pero será mejor que hagas preguntas sobre dbus en lugar de "todo".
Thorsten Staerk

Respuestas:

8

Su pregunta me fascina tanto que la respondí en linuxintro . Aquí está la respuesta adaptada a su pregunta:

Cuando una PC típica con Linux como Fedora, SUSE o Ubuntu se inicia, los pasos serán los siguientes:

  1. BIOS ejecuta autocomprobación
  2. BIOS carga el sector de arranque y lo ejecuta
  3. Se ejecuta el cargador de arranque como grub o lilo
  4. Se muestra el menú de arranque (opcional)
  5. Kernel está cargado
  6. Se carga el disco RAM inicial
  7. Kernel es ejecutado
  8. Kernel ejecuta init
  9. init se ejecuta, dependiendo de su distribución, versión y configuración

    • SysV guiones de inicio o
    • systemd o
    • advenedizo

El sentido de todos estos programas es iniciar servicios como

  • dbus que permite la comunicación entre aplicaciones para que una aplicación pueda llamar funciones desde otra aplicación en ejecución. Esto es algo que generalmente no es visible para los usuarios, por ejemplo, una aplicación que llama al administrador de ventanas para poner su propia ventana en foco
  • inicio de sesión que permite a los usuarios iniciar sesión en los terminales CTRL_ALT_F *. El proceso de inicio de sesión como se ve en ps-A en el caso de systemd será systemd-logind (puede variar nuevamente según la distribución)
  • udev que tiene muchos nombres, por ejemplo, para mí lo encuentro con ps -A como systemd-udevd. Asigna, por ejemplo, el dispositivo maneja en / dev / a los dispositivos que conecta, por ejemplo, un disco USB
  • cron que ejecutará comandos basados ​​en una tabla de tiempo en / etc / crontab, y también tiene una función "@reboot" para iniciar comandos en el arranque.

10) el proceso de inicio de sesión, manejado por systemd esperará un inicio de sesión en un terminal virtual, normalmente se puede acceder presionando CTRL_ALT_F1

11) normalmente y de manera predeterminada, el proceso de inicio ahora iniciará el administrador de visualización, por ejemplo, kdm (administrador de visualización de KDE) o xdm

12) el administrador de pantalla ahora iniciará el sistema gráfico. Prácticamente no hay un sistema gráfico, pero Xorg (hildon es para dispositivos integrados).

13) el administrador de visualización le aconsejará al servidor Xorg que muestre una pantalla de inicio de sesión


Ahora el inicio está completo y la computadora espera a que el usuario inicie sesión.


14) en el registro de usuario en el administrador de pantalla se iniciará un entorno de escritorio como KDE, GNOME o XFCE4. El proceso raíz para la sesión KDE de un usuario se llamará startkde, el proceso raíz para GNOME se llamará gnome-session, el proceso raíz para XFCE4 se llamará xfce4-session

15) KDE normalmente inicia todos los archivos ejecutables desde ~ / .kde / Autostart y los archivos .desktop desde / etc / xdg / autostart (ver tareas de programación ).

16) Cuando el usuario ha iniciado sesión gráficamente y hace clic en un icono para abrir una consola, generalmente se ejecutará bash. Bash primero ejecutará .bashrc y luego

17) Cuando el usuario abre un shell de inicio de sesión, esto significa que debe iniciar sesión mediante contraseña o una clave autorizada. Puede hacerlo en la consola CTRL_ALT_F1 o enviando a una computadora, por ejemplo localhost. Luego se ejecutarán los scripts .sh de /etc/profile.d y .bashrc.

Thorsten Staerk
fuente
1
Esta es una buena descripción genérica de los pasos para iniciar un sistema Linux. El software específico (p. Ej., Grub, lilo, u-boot) cambia pero la función es la misma. Sospecho que está más interesado en el proceso de inicio, así que concéntrese en los pasos 8 y 9. sysvinit (/ etc / inittab) está bastante obsoleto a favor de systemd OR upstart. Ambos pueden ejecutar / monitorear servicios sysvinit.
dturvene
No hay llamadas a la aplicación a través de d-bus para enfocar su ventana. -
Robert Siemer
0

La respuesta es 42. Thorsten Staerk ya explicó el problema principal en los comentarios.

Para ayudarlo a obtener una visión general, debe saber que millones de voluntarios y empresas escriben y mantienen el software Linux y de código abierto. Por lo tanto, no es fácil mantenerse al día con el crecimiento.

Por otro lado, hay mucha documentación: las páginas de manual para cada pieza de software, una buena explicación de qué es D-Bus , las listas de correo del desarrollador, Google , etc. Así que tómate algunos años y lee todos los documentos de los paquetes que te interesan. Si lo necesitas más rápido, solo haz algunas buenas preguntas en Unix y Linux .

Buena suerte.

Comunidad
fuente
Saber todo sobre cómo operar una batidora eléctrica no me dice nada sobre cómo se hace el pastel. "Lea todos los documentos de paquetes que le interesan": esta es una respuesta bastante inútil. La documentación que mencionas me dijo qué hacen estas cosas. Pero quiero saber para qué se usan. “Solo haga algunas buenas preguntas”: mi pregunta es simple y directa: ¿dónde está la documentación?
stefan
1
Quizás deba aprender a pedir para obtener la respuesta que espera. En este caso, me gustaría señalarle una pregunta frecuente muy útil Cómo hacer preguntas de manera inteligente
0

Antes de dar mi versión de la respuesta, permítanme comenzar con un par de definiciones.

Linux == 'Un kernel del sistema operativo "Linux System ==" Algún tipo de sistema construido alrededor del kernel de Linux "Sesión en un sistema Linux ==" Algún conjunto de programas de usuario relacionados que se ejecutan en un sistema Linux "

Cuanto más se aleje del núcleo, es menos probable que dos "sistemas" tengan algo en común. Lo que significa que realmente no hay una definición sensata de una "sesión moderna de Linux"

Francamente, la expectativa de que debería haber algún tipo de documentación general del sistema que le brinde todos los componentes es una expectativa que no se cumplirá en la mayoría de las partes del mundo de código abierto. Los desarrolladores de código abierto están escribiendo programas para resolver (¡o volver a resolver!) Los problemas específicos que les interesan, por lo que solo documentarán esa parte, ¡si es así! :-)

Puede tener mejor suerte con los manuales disponibles con distribuciones comerciales de Linux, sin embargo, dada la naturaleza conservadora de la mayoría de ellos, ¡puede argumentar que sus lanzamientos no son "modernos"!

El consejo clave que daría es que, en un sentido muy general, los sistemas unix / linux son heirachical. Solía ​​decirle a la gente que me gustaban los sistemas nix porque podía comenzar con init y, a partir de ahí, entender todo lo que estaba sucediendo en un sistema. Systemd y sus amigos lo han cambiado un poco, pero el principio básico es el mismo: comience desde arriba y trabaje hacia abajo: los "programas que forman una sesión" son generalmente los que comenzaron desde el momento en que ingresa a la jerarquía. Entonces, si ingresa, probablemente obtendrá cualquiera que sea su shell predeterminado, ya que así es como funciona ssh. Si inicia sesión a través de una interfaz gráfica, obtendrá lo que inicia su administrador de inicio de sesión, ya que así es como funciona su administrador de inicio de sesión

Muchos de los marcos de escritorio hacen que esto sea un poco más difícil, al ejecutar varios demonios de servicio de nivel de usuario o sistema, y ​​a veces, estos se iniciarán a pedido cuando comience el primer programa que los necesite, observe las opciones de línea de comandos del programas que está ejecutando, hay opciones muy probables para detener este comportamiento y ejecutar la aplicación en modo "desnudo".

Desafortunadamente, esto significa que "leer la documentación de los programas individuales" es la única forma de entenderlo todo, y que no hay un "conjunto mínimo de demonios" para una sesión: existe la forma en que una distribución determinada funciona para una determinada método de inicio de sesión / acceso, y esa es la distribución, el escritorio y el método de inicio de sesión específico.

tjb63
fuente