Tentando iniciar um processo de GUI em uma segunda máquina

1

Plano de fundo :

Estou ajudando a criar um mural de mídia a partir de computadores / telas sobressalentes para que uma universidade local use o processing.org/java para distribuir renderizações em várias máquinas. No entanto, ainda é buggy e eu preciso reiniciar os clientes ocasionalmente.

Problema :

Atualmente estou tendo problemas para descobrir como reiniciar o aplicativo cliente java remotamente do servidor. Nota: os clientes estão conectados diretamente a telas duplas - em vez de renderizar sem cabeça

Investigação :

Eu recriei um ambiente semelhante no AWS / EC2, onde posso fazer com que o modelo cliente-servidor funcione, mas não consigo iniciar o cliente gui remotamente. Eu continuo recebendo:

Can't open Display.

Questão específica :

Atualmente, uso o seguinte do servidor:

ssh ubuntu@guiclient1 "export DISPLAY=:0; cd ~/wallclient/; xclock &"

Extra :

Eu monitora o mesmo desktop do guiclient1 usando o x2go. Eu não fiz nenhuma configuração xauth / xhost específica - como ainda não vi nenhum problema relacionado a isso.

O que devo estar configurando de forma diferente? Eu não encontrei muita ajuda on-line - não quero fazer o encaminhamento de porta para o servidor, que é o que a maioria das perguntas responde.

Obrigado

    
por velniukas 30.12.2011 / 14:36

1 resposta

0

Para conexão direta em X pela rede

X tem um modelo de permissão para permitir que clientes remotos {*} usem uma exibição específica. Leia a página de manual para xhost , mas a versão curta é

server$ xhost remote_client

para permitir que remote_client interativamente use sua tela.

Em seguida, no cliente que você acabou de executar

client$ xeyes

ssh direto

Conectar-se através de um ssh é outro assunto. Você deve usar o -X ou -Y ou definir os valores correspondentes em .ssh / config ( ForwardX11 for -X). Seu cliente ssh deve então definir o valor apropriado para DISPLAY e você não deve mexer com isso.

server$ ssh -X client
client(by ssh)$ printenv DISPLAY
localhost:10.0
client(by ssh)$ xeyes

Tunneling ssh

Abra o túnel através do firewall com algo como

server$ ssh -X -L 1111:client:22 user@firewall

então em outro shell

server$ ssh -X -p 1111 user@localhost
client(by ssh)$ printenv DISPLAY
localhost:10.0
client(by ssh tunnel)$ xeyes

(observe o -X novamente) para abrir um shell executando em destination . Assim como na conexão ssh direta, sua variável DISPLAY deve ser definida para você.

{*} Aqui eu sigo a tradição X de dizer que o computador no qual a exibição ocorre é o servidor porque torna sua exibição disponível para vários programas em execução no cliente mahcines.

Isto provavelmente parecerá ao contrário, já que você provavelmente está acostumado com a máquina em que você está trabalhando, sendo o "cliente" e o que está no armário, sendo o "servidor".

    
por 30.12.2011 / 16:02