Acho que você já percebeu que é necessário algum tipo de "servidor". Cada cliente (ambiente de área de trabalho, gerenciador de janelas ou programa em janelas) precisa compartilhar a exibição com todos os outros, e eles precisam exibir as coisas sem conhecer os detalhes do hardware ou saber quem mais está usando a exibição. Assim, o servidor X11 fornece a camada de abstração e compartilhamento que você mencionou, fornecendo uma interface IPC.
O X11 provavelmente poderia ser executado em canais nomeados, mas há duas grandes coisas que os pipes nomeados não podem fazer.
- Os pipes nomeados só se comunicam em uma direção.
- Se dois processos começarem a colocar dados no final de "envio" de um canal nomeado, os dados serão misturados.
Na verdade, a maioria dos clientes X conversa com o servidor usando um canal nomeado "novo e aprimorado" chamado soquete do domínio UNIX. É muito parecido com um pipe nomeado, exceto que permite que os processos falem em ambas as direções e controla quem disse o quê. Esses são os mesmos tipos de coisas que a rede precisa fazer, e assim os soquetes de domínio UNIX usam a mesma interface de programação que os soquetes TCP / IP que fornecem comunicações de rede.
Mas a partir daí, é muito fácil dizer "E se eu executasse o servidor em um host diferente do cliente?" Basta usar um soquete TCP em vez do soquete UNIX e voila: um protocolo de desktop remoto que antecede o Windows RDP por décadas. Eu posso ssh
para quatro hosts remotos diferentes e executar synaptic
(gerenciador de pacotes gráfico) em cada um deles, e todas as quatro janelas aparecem no display do meu computador local.