Ao usar ssh -X
é o executável copiado e executado localmente ou é executado na máquina host. Como é chamado X11 Encaminhamento, isso me faz pensar que a janela é desenhada na minha máquina, mas funcionando no host.
O executável é executado na máquina remota e exibido (desenhado) na máquina local. O que ssh -X remote
faz é iniciar um servidor proxy x11 na máquina remota. Se você fizer echo $DISPLAY
Na máquina remota, você deve ver algo como localhost:21.0
. Isso está dizendo ao programa em execução na máquina remota para enviar comandos de desenho para o servidor X11 com o ID 21. Isso encaminha esses comandos para o servidor X11 real em execução na máquina local, que se desenha na tela local. Este encaminhamento acontece em uma conexão SSH criptografada, então eles não podem ser (facilmente) ouvidos.
Ao contrário do Windows, Mac OS, etc, X11 foi projetado desde o início para executar programas em uma rede, sem precisar de coisas como desktop remota. Por um tempo, os clientes finos X11 eram populares. É basicamente um computador despojado que executa apenas um servidor X11. Todos os programas são executados em algum servidor de aplicativos em algum lugar.
O aplicativo é executado remotamente, exceto os componentes X (i.e. Renderizando os comandos X, etc) que estão sendo executados localmente. Cada aplicativo cliente geralmente usa o servidor X local para exibir a interface do usuário. Nesse caso, os comandos são enviados através do canal SSH criptografado da máquina remota para sua máquina local e são exibidos lá.
Configuração $DISPLAY
é apenas metade do acordo embora. Para poder autenticar os clientes no lado do servidor, ssh
também utiliza xauth
para criar um novo cookie de autenticação. Ver xauth list
e ~/.Xauthority
.
A chave pode ser perceber que o servidor X é uma única coisa que fornece gráficos a um usuário e todos os diferentes programas que deseja que os gráficos precisam ser x clientes e se conectarem a um servidor. A interface entre programas de clientes e o servidor X foi projetada a partir do início para suportar conexões com programas remotos, não apenas aqueles na máquina local.
Em uma rede suficientemente louca, um programa poderia ser executado em qualquer lugar e exibir seus gráficos em qualquer outro lugar ...