
Pelo que entendi, para interação baseada em texto com o kernel Linux, um programa chamado init
inicia getty
(ou agetty
) que se conecta a um dos dispositivos TTY abaixo /dev
e 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, bash
ou 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.