SSH - Como fazer com que os aplicativos X sejam executados no cliente?

4

Eu tenho o problema inverso que a maioria das pessoas parece estar tendo. Se eu iniciar um aplicativo X enquanto estiver logado no ssh, ele será exibido na máquina do servidor (host) em vez do cliente (local). Este é o comando que eu uso

$ ssh -X -p 6623 [email protected]

Minha variável $ DISPLAY aparece correta no cliente.

$ echo $DISPLAY
:0

Eu quero que os aplicativos X do servidor sejam exibidos localmente no cliente (a máquina na qual estou fisicamente). Eu não sei o que está causando isso.

    
por Rucent88 03.02.2014 / 04:49

2 respostas

6

Por causa dessa conversa, digamos que há duas máquinas chamadas lappy e remotey . O sistema lappy é onde você executaria seus comandos ssh . O sistema ao qual você está se conectando é remotey .

1. Exibir GUIs de remotey em lappy

        lappy               .-,(  ),-.    
           __  _         .-(          )-.          remotey 
          [__]|=|  ---->(    network     )------> ____   __ 
          /::/|_|        '-(          ).-'       |    | |==|
                             '-.( ).-'           |____| |  |
                                                 /::::/ |__|

      NOTE: on lappy, 'ssh' to remotey, run GUI, see GUI on lappy

Os arquivos de configuração do seu shell provavelmente estão configurando a variável de ambiente DISPLAY=:0 . Você pode fazer o seguinte:

 $ grep DISPLAY $HOME/{.bash*,.profile*}

Se isso não retornar nada, o sistema em que você está se conectando provavelmente é o culpado. Dê uma olhada nesse diretório também.

 $ grep DISPLAY /etc/profile.d/* /etc/bash*

Se você preferir deixar isso, pode substituir esse comportamento instruindo ssh a redirecionar o tráfego X de volta ao seu sistema cliente, assim:

$ ssh -X user@remoteserver

Exemplo

Aqui eu tenho um servidor remoto que tem $DISPLAY sendo definido como :0 semelhante ao seu.

$ ssh -X skinner "echo $DISPLAY"
:0

Mas, não importa, ainda posso invocar aplicativos X e exibi-los remotamente para o meu sistema que está executando os comandos ssh . Eu nem preciso fazer o login, posso simplesmente executar GUIs diretamente assim:

$ ssh -X skinner xeyes

Como dica de bônus, você provavelmente desejará alterar quais códigos estão sendo usados, para ajudar a melhorar o desempenho do tráfego do X11 à medida que ele passa pelo seu túnel SSH.

$ ssh -c arcfour,blowfish-cbc -X skinner xeyes

2. Exibindo GUIs no remotey

        lappy               .-,(  ),-.    
           __  _         .-(          )-.          remotey 
          [__]|=|  ---->(    network     )------> ____   __ 
          /::/|_|        '-(          ).-'       |    | |==|
                             '-.( ).-'           |____| |  |
                                                 /::::/ |__|

      NOTE: on lappy, 'ssh' to remotey, run GUI, see GUI on remotey

Se você estiver usando SSH em remotey de lappy , mas quiser manter as GUIs exibidas em lappy , basta soltar a opção -X do seu ssh invoke.

$ ssh -p 6623 [email protected]

3. Eliminando $ HOME / .ssh / config

Muitas vezes, o diretório $HOME/.ssh de um usuário pode apresentar incógnitas sobre o que está acontecendo. Você pode silenciar temporariamente o uso do arquivo config neste diretório, assim quando estiver realizando testes.

$ ssh -F /dev/null -p 6623 [email protected]

4. Eliminando as configurações do shell remoto

Você pode usar o teste a seguir para desabilitar temporariamente os arquivos de configuração do shell em remotey da seguinte forma:

$ ssh -t -X -p 6623 [email protected] "bash --norc --noprofile"

Com o acima, nenhuma das configurações deve ser originada neste shell Bash, então você deve ser capaz de definir DISPLAY=:0 e, em seguida, exibir GUIs na área de trabalho do remotey.

Você pode usar o seguinte truque para ajudar a isolar o problema, primeiro removendo --noprofile e tentando este comando:

$ ssh -t -X -p 6623 [email protected] "bash --norc"

seguido por este comando:

$ ssh -t -X -p 6623 [email protected] "bash --noprofile"

A primeira versão informará se o problema está em /etc/bashrc & $HOME/.bashrc cadeia de arquivos de configuração, enquanto a segunda versão informará se o problema está no arquivo de configuração $HOME/.bash_profile .

    
por 03.02.2014 / 05:01
2

O principal problema aqui é o :0 na última linha:

$ ssh -X -p 6623 [email protected]
$ echo $DISPLAY
:0

Isso sugere que algo no servidor ssh está sobrescrevendo sua variável de ambiente DISPLAY depois que o sshd a define. Já que você tem um servidor X rodando lá na tela :0 , qualquer requisição que os clientes X façam naquele computador estão indo para o servidor X local (isto é, o servidor ssh). Se você rodou o servidor ssh-server X (sic!) Em uma tela diferente, você obteria

$ xclock
Error: Can't open display: :1

Existem muitos lugares onde as coisas podem dar errado, para iniciantes eu sugeriria modificar seu comando de conexão para invocar um shell sem qualquer inicialização. Lembre-se de usar a opção -t para forçar a alocação tty. Para BASH, o comando pode ser assim:

$ ssh -X -p 6623 -t [email protected] /bin/bash --norc --noprofile 

Em seguida, verifique o valor de DISPLAY .

    
por 03.02.2014 / 12:13