Como o X11 interage com o kernel / efetua login

14

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

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

    
por allsey87 26.04.2017 / 09:42

2 respostas

15

O shell usa um dispositivo TTY (se estiver conectado a um) para obter entrada do usuário e produzir saída, e não muito mais. O fato de um shell estar conectado a um TTY é determinado por 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 acontece via chamadas do sistema.

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

  • o usuário efetua login no terminal e, em seguida, inicia o X (geralmente 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 outra informação de autenticação necessária).

A maneira como os servidores X11 obtêm entrada e produzem saída é muito diferente em comparação a um shell. No lado da entrada, X conhece os dispositivos que as conchas não usam, começando com os mouses; normalmente gerencia esses diretamente com seus próprios drivers. Mesmo para teclados, o X tem 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 entrada bruta do teclado, mas interpreta isso usando seu próprio driver). No lado da saída, as unidades X exibem dispositivos diretamente, com ou sem a ajuda do kernel, e sem passar por um dispositivo TTY.

Os servidores X11 em muitos sistemas usam os dispositivos TTY, para sincronizar com o kernel: em sistemas que suportam terminais virtuais, o X precisa “reservar” o VT que está sendo executado e lidar com a comutação VT. . Existem algumas outras sutilezas ao longo do caminho; portanto, no Linux, X ajusta o TTY para desabilitar o GPM (um programa que permite o uso em modo texto de mouses). 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 executou xconsole , poderá acabar com as mensagens do kernel exibidas no "modo de texto" na parte superior da exibição do X11.

    
por 26.04.2017 / 10:47
2

O kernel não tem absolutamente nenhum conceito de login, ou de quem está logado - tudo o que importa é que existem processos rodando sob um certo ID de usuário (quem é esse também não é da conta do kernel!). Um programa de login, seja ele 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 que resolva localmente (coisas NSS e libc sugeridas) para usar para o usuário que acabou de ser autenticado.

    
por 26.04.2017 / 13:49