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 systemd
UID 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
login
lanzarí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
.
fuente
Respuestas:
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:
init se ejecuta, dependiendo de su distribución, versión y configuración
El sentido de todos estos programas es iniciar servicios como
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.
fuente
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.
fuente
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.
fuente