O GNOME e o KDE possuem "gerenciadores de exibição", GDM e KDM, respectivamente, que fazem grande parte disso. Os propósitos de um gerenciador de exibição são, basicamente, executar um servidor X11 (o Xorg atualmente, o Xfree86 ou o servidor X original anterior) em todas as exibições físicas e apresentar telas de login nelas. Xdm é provavelmente o mais antigo.
Os gerenciadores de exibição modernos foram estendidos para executar vários servidores X11 no mesmo local - para cada sessão de usuário, mais um para a tela de login (o "saudador"). Apenas uma dessas sessões está ativa a qualquer momento e controla o hardware gráfico; os outros desistem. [1]
No Linux, a função "console virtual" é usada para isso - é tecnicamente possível alternar entre as sessões usando o
Geralmente há outro daemon, geralmente o ConsoleKit ou o 'systemd-logind', que faz o trabalho de acompanhar o que os usuários estão logados, para todos os tipos de texto e sessões gráficas (tty, ssh, X11, Wayland, & c).
A sessão em si não precisa realmente fazer muito; isso depende apenas de 'logind' e, às vezes, de um gerenciador de exibição específico.
-
Se você deseja exibir uma lista de usuários (como o Unity), os daemons 'logind' ou ConsoleKit podem ser usados via DBus para obter uma lista de usuários logados e ativar a sessão escolhida. A sessão atual deve se travar depois de fazê-lo (por exemplo, executando o protetor de tela; o GNOME e o KDE têm o bloqueio de tela integrado no próprio gerenciador de janelas).
-
No GNOME, não há lista de usuários, apenas um único item de menu "Switch Users". Isso usa
libgdmgreeter
para ativar a "sessão de login" (a sessão que possui a tela de login) usando 'logind' ou ConsoleKit; se não houver uma "sessão de login" em execução, o libgdmgreeter contata o GDM sobre o DBus para iniciar um novo. Acho que isso pode ser feito executando o comandogdmflexiserver
.
[1] Voluntariamente, na implementação atual do Linux, pelo menos; Há planos para torná-lo mais rigoroso para que um componente do sistema realmente revogue o acesso. Da mesma forma, se as sessões executam o PulseAudio, ele abre mão voluntariamente do acesso a dispositivos de áudio. Com o ALSA simples, não há nada que o faça, portanto, o acesso de áudio com a troca de sessão é um jogo de sorte. Ou seja, mesmo que as sessões inativas não consigam abrir os dispositivos de áudio depois que o logind fizer o seu trabalho, elas ainda podem reproduzir som através de dispositivos abertos anteriormente, e nada pode forçar a fechá-las ainda ( até que o kernel ganhe revoke()
support).
[2] Os consoles virtuais do Linux estão disponíveis apenas na 0ª "sede"; se você tivesse mais monitores e teclados conectados, eles poderiam ter seus próprios servidores X11 - procure as demos multiseat do Fedora 19 - mas eu acho que não podem ter comutação de sessão. Mas agora há muito desenvolvimento na tentativa de fazer o multiterminal funcionar, entre outras coisas.