Como o “swich user” funciona com Unix / Linux e X11?

1

No Unix / Linux + X11, você pode ter várias sessões de usuário (a) alterando janelas individuais usando su , sudo ou mesmo ssh ou (b) executando dois ambientes de área de trabalho usando algo como um menu "alternar usuário". Minha pergunta é: como (b) funciona? A questão vem em duas versões:

Versão prática: É fácil alternar usuários por meio de uma interface do usuário explícita em uma área de trabalho completa, como o Gnome ou o KDE. Mas como você faz isso a partir de um gerenciador de janelas alternativo? ( Impressionante no meu caso).

Versão teórica: Como o encanamento realmente funciona? Vários processos do servidor X compartilham o mesmo hardware? Ou as versões modernas do Xorg apenas suportam o conceito de várias sessões. Ou é outra coisa?

    
por Adrian Ratnapala 12.07.2013 / 09:20

1 resposta

2

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 Ctrl Alt F12345… , embora você não saiba qual tela X11 do usuário é executada em qual console virtual. [2]

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 comando gdmflexiserver .

[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.

    
por 12.07.2013 / 12:07