Supondo que você tenha dois hosts:
- hostA tem a exibição que você deseja usar
- o hostB tem o aplicativo que você deseja executar
Primeiro, você efetua login no hostA e executa xhost +hostB
para permitir que o monitor do hostA seja acessado pelo hostB. Em seguida, efetue login no hostB, execute DISPLAY=hostA:0 ; export DISPLAY
e inicie o aplicativo.
Observe também: estas são conexões X11 completamente não-criptografadas de estilo antigo, que geralmente são desabilitadas por padrão nas distribuições modernas do Linux. Se você quiser usar estes comandos, você pode primeiro ter que fazer algo no hostA para configurar seu servidor X11 para escutar conexões de entrada através do protocolo TCP, e não apenas sobre soquetes UNIX locais.
(Por muito tempo, isso foi feito adicionando uma opção -nolisten TCP
na linha de comando do servidor X, e você precisaria remover essa opção para usar conexões X11 não criptografadas. Os servidores Xorg X modernos podem mudar o sentido destes opções: talvez seja necessário adicionar uma opção -listen TCP
explícita para ativar conexões X11 não criptografadas não locais.
Em um sistema Linux / Unix, DISPLAY=:0.0
refere-se a uma exibição X11 que pode ser acessada usando o soquete UNIX /tmp/.X11-unix/X0
, portanto, é o primeiro servidor X11 local (e geralmente apenas). Em um sistema Windows, esse mecanismo não existe.
O mecanismo do soquete UNIX é usado somente quando está disponível na arquitetura do sistema local e a parte do nome do host da variável DISPLAY é uma string vazia. Se um nome de host estiver listado, mesmo que seja "localhost", será usada uma conexão TCP.
Se uma conexão TCP for usada, DISPLAY=hostname:X.Y
refere-se a um servidor X11 que atende em hostname
na porta TCP (X + 6000).
Quando você inicia um servidor X11 baseado no Windows - talvez um comercial como o Reflection X, ou um gratuito como VcXsrv ou o clássico Xming , por padrão, ele começará a escutar na porta TCP 6000 assim que for iniciado. As versões modernas podem usar como padrão a escuta em localhost
apenas por segurança; a alternativa clássica é ouvir em todos os endereços IP que o sistema possui.
A maneira moderna e segura de usar o X11 é o encaminhamento X11 baseado em SSH. Quando você inicia um cliente SSH com o encaminhamento X11 ativado, ele se conectará ao servidor X11 local no host do cliente SSH usando qualquer mecanismo disponível. Ele passará essa conexão para qualquer host ao qual você se conectar usando um sub-canal seguro na conexão SSH.
Em seguida, o daemon sshd
no host remoto começará a escutar em uma porta TCP livre (geralmente no intervalo 6010+), configura um DISPLAY=localhost:X.0
(onde X = número de porta escolhido - 6000) e também coopera com o cliente SSH para configurar automaticamente xauth
cookies para você, se exigido pelo servidor X11 no lado do cliente SSH.
No que diz respeito ao servidor X11 no host do cliente, o tráfego X11 de entrada vem do processo do cliente SSH local, portanto, o comando xhost
normalmente não é necessário no host do cliente SSH.
O resultado: você não precisa definir DISPLAY
manualmente, nem o comando xhost
. Apenas certifique-se de que seu servidor X11 local esteja em execução, ative o encaminhamento X11 no seu SSH cliente, conecte-se ao host remoto com o SSH e inicie qualquer programa GUI X11. As janelas desse programa apenas aparecerão no seu display local. Apenas funciona.
Isso pode ser algo de uma revelação para alguém que está acostumado com o estilo clássico de configurar conexões X11.
Mais de 15 anos atrás, mostrei isso para um administrador de banco de dados velho e rabugento, que ocasionalmente precisava ir à sala do servidor para instalar o Oracle, pois os firewalls não permitiam as conexões clássicas X11 não criptografadas.
Ele me abraçou.