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 através de 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 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 senha (ou qualquer 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 com um shell. No lado da entrada, X conhece dispositivos que os projéteis não possuem, começando com ratos; normalmente gerencia aqueles 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 entradas brutas do teclado, mas depois interpreta isso usando seu próprio driver). No lado da saída, as unidades X exibem os dispositivos diretamente, com ou sem a ajuda do kernel e sem passar por um dispositivo TTY.
Servidores x11 em muitos sistemas de fazer dispositivos uso TTY, porém, para sincronizar com o kernel: em sistemas que suportam os terminais virtuais, X precisa de “reserva” o VT que está sendo executado, e comutação alça VT. Existem algumas outras sutilezas ao longo do caminho; assim, no Linux, o X ajusta o TTY para desativar o GPM (um programa que permite o uso de mouses no 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 executou xconsole
, poderá terminar com as mensagens do kernel exibidas no "modo de texto" na parte superior da tela do X11.