Como o X11 interage com o kernel/realiza login

Como o X11 interage com o kernel/realiza login

Pelo que entendi, para interação baseada em texto com o kernel Linux, um programa chamado initinicia getty(ou agetty) que se conecta a um dos dispositivos TTY abaixo /deve solicita um nome de usuário. Depois disso, loginé executado um programa chamado que solicita a senha do usuário e, se estiver correta, inicia o shell preferido do usuário (por exemplo, bashou csh). Neste ponto, o bash interage com o kernel através do dispositivo TTY.

Como funciona esse processo de login para o X11? O X11 interage com o kernel através de um TTY?

Responder1

O shell usa um dispositivo TTY (se estiver conectado a um) para obter a entrada do usuário e produzir saída, e nada mais. O fato de um shell estar conectado a um TTY é determinado getty(e preservado por login); na maioria das vezes, o shell não se importa se está conectado a um TTY ou não. Sua interação com o kernel aconteceatravés dachamadas do sistema.

Um servidor X11 não conhece logins (assim como um shell). O processo de login no X11 funciona de duas maneiras:

  • ou o usuário efetua login no terminal e inicia o X (normalmente usando startx);
  • ou um servidor X é iniciado com um “gerenciador de exibição” que solicita ao usuário um login e uma senha (ou qualquer informação de autenticação necessária).

A forma como os servidores X11 obtêm entrada e produzem saída é muito diferente em comparação com um shell. No lado da entrada, X conhece dispositivos que os shells não conhecem, começando pelos mouses; normalmente ele os gerencia diretamente com seus próprios drivers. Mesmo para teclados, o X possui seus próprios drivers que complementam o manuseio do kernel (pelo que entendi, no Linux, por exemplo, o X usa o driver TTY para ler a entrada bruta do teclado, mas depois a interpreta usando seu próprio driver). No lado da saída, os drives X exibem dispositivos diretamente, com ou sem a ajuda do kernel, e sem passar por um dispositivo TTY.

Servidores X11 em muitos sistemasfazerentretanto, use dispositivos TTY para sincronizar com o kernel: em sistemas que suportam terminais virtuais, o X precisa “reservar” o VT em que está sendo executado e lidar com a comutação de VT. Existem algumas outras sutilezas ao longo do caminho; assim, no Linux, o X ajusta o TTY para desabilitar o GPM (um programa que permite o uso de mouses em modo texto). X também pode compartilhar um VT...

Em algumas estações de trabalho no passado, não havia muita sincronização explícita com o kernel; se você não executar o xconsole, poderá acabar com mensagens do kernel exibidas em “modo de texto” na parte superior da tela do X11.

Responder2

O kernel não tem absolutamente nenhum conceito de login ou de quem está logado - tudo o que importa é que existam processos em execução sob um determinado ID de usuário (quem também não é da conta do kernel!). Um programa de login, seja getty em um terminal ou um gerenciador de exibição X11, é executado como root e então usa setuid() e chamadas relacionadas para configurar um ambiente para qualquer UID sugerido pelo resolvedor local (coisas NSS e libc - também não é negócio do kernel) para usar para o usuário que acabou de autenticar.

informação relacionada