¿Cómo interactúa X11 con el núcleo?

14

Según tengo entendido para la interacción basada en texto con el kernel de Linux, un programa llamado initcomienza getty(o agetty) que se conecta a uno de los dispositivos TTY /devy solicita un nombre de usuario. Después de esto, loginse ejecuta un programa llamado que solicita la contraseña del usuario y, si es correcto, inicia el shell preferido del usuario (por ejemplo, basho csh). En este punto, bash interactúa con el núcleo a través del dispositivo TTY.

¿Cómo funciona este proceso de inicio de sesión para X11? ¿X11 interactúa con el núcleo a través de un TTY?

allsey87
fuente

Respuestas:

15

El shell utiliza un dispositivo TTY (si está conectado a uno) para obtener la entrada del usuario y producir salida, y no mucho más. El hecho de que un shell esté conectado a un TTY está determinado por getty(y preservado por login); la mayoría de las veces al shell no le importa si está conectado a un TTY o no. Su interacción con el núcleo ocurre a través de llamadas al sistema.

Un servidor X11 no conoce los inicios de sesión (como un shell). El proceso de inicio de sesión en X11 funciona de dos maneras:

  • o el usuario inicia sesión en el terminal y luego inicia X (normalmente usando startx);
  • o un servidor X se inicia con un "administrador de pantalla" que solicita al usuario un nombre de usuario y contraseña (o cualquier información de autenticación requerida).

La forma en que los servidores X11 obtienen entrada y producen salida es muy diferente en comparación con un shell. En el lado de entrada, X sabe acerca de los dispositivos que los shells no, comenzando con los ratones; típicamente maneja a aquellos directamente con sus propios controladores. Incluso para los teclados, X tiene sus propios controladores que complementan el manejo del núcleo (por lo que entiendo, en Linux, por ejemplo, X usa el controlador TTY para leer la entrada sin formato del teclado, pero luego lo interpreta usando su propio controlador). En el lado de salida, X impulsa los dispositivos de visualización directamente, con o sin la ayuda del núcleo, y sin pasar por un dispositivo TTY.

Servidores X11 en muchos sistemas hacen dispositivos de uso de TTY embargo, para sincronizar con el kernel: en los sistemas que soportan terminales virtuales, X necesita para “reservar” la VT se está ejecutando en, y el cambio de empuñadura VT. Hay algunas otras sutilezas en el camino; así, en Linux, X modifica el TTY para deshabilitar GPM (un programa que permite el uso de ratones en modo texto). X también puede compartir un VT ...

En algunas estaciones de trabajo en el pasado, no había mucha sincronización explícita con el núcleo; si no ejecutó xconsole, podría terminar con los mensajes del núcleo que se muestran en "modo de texto" en la parte superior de su pantalla X11.

Stephen Kitt
fuente
2

El kernel no tiene absolutamente ningún concepto de inicio de sesión o de quién inició sesión; lo único que le importa es que haya procesos que se ejecutan con una determinada ID de usuario (¡quién es ese tampoco es asunto del kernel!). Un programa de inicio de sesión, ya sea getty en un terminal o un administrador de pantalla X11, se ejecuta como root y luego usa setuid () y llamadas relacionadas para configurar un entorno para cualquier UID que sugiera el solucionador local (NSS y libc, tampoco negocios del kernel) para usar para el usuario que acaba de autenticarse.

rackandboneman
fuente