-X sinalizador (encaminhamento X11) não parece funcionar no Windows

16

Estou usando o Open SSH (OpenSSH_6.6.1p1, OpenSSL 1.0.1i 6 de agosto de 2014) no Windows 8.1. O encaminhamento X11 não parece estar funcionando. A variável de ambiente DISPLAY não parece estar definida.

Por exemplo, se eu usar o BitVise ou o Putty para conectar e executar o env, vejo:

[marko@vm:~]$ env
XDG_SESSION_ID=6
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=192.168.1.174 61102 22
SSH_TTY=/dev/pts/0
USER=marko
MAIL=/var/mail/marko
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=/home/marko
LANG=en_CA.UTF-8
NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
SHLVL=1
HOME=/home/marko
LANGUAGE=en_CA:en
LOGNAME=marko
SSH_CONNECTION=192.168.1.174 61102 192.168.1.64 22
XDG_RUNTIME_DIR=/run/user/1000
DISPLAY=localhost:10.0
_=/usr/bin/env

Se eu usar o OpenSSH (ssh -X marko @ vm):

[marko@vm:~]$ env
XDG_SESSION_ID=8
TERM=cygwin
SHELL=/bin/bash
SSH_CLIENT=192.168.1.174 61150 22
SSH_TTY=/dev/pts/1
USER=marko
MAIL=/var/mail/marko
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
PWD=/home/marko
LANG=en_CA.UTF-8
NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
SHLVL=1
HOME=/home/marko
LANGUAGE=en_CA:en
LOGNAME=marko
SSH_CONNECTION=192.168.1.174 61150 192.168.1.64 22
XDG_RUNTIME_DIR=/run/user/1000
_=/usr/bin/env
abendigo
fonte
1
Pode ser óbvio, mas não posso ter certeza da sua postagem - você realmente tem um servidor X instalado no Windows, por exemplo, seguindo bitvise.com/ssh-x11-forwarding ?
1
Sim, eu tenho o Xming X Server ( straightrunning.com/xmingnotes )
abendigo 3/15/15
Você - apenas para testar as coisas - tentou o mesmo com o PuTTY? Caso contrário, sugiro tentar com isso e ver se funciona lá.
Polemon
1
sim, funciona em massa.
Abendigo
Estou verificando minha VM do Windows agora. Pode ser tão simples quanto verificar que tipo de variáveis ​​o PuTTY define para que isso funcione. Vou adicionar uma resposta em algumas horas.
Polemon

Respostas:

16

Você definiu DISPLAYvariável de ambiente no cliente? Não tenho certeza de qual shell você está usando, mas com o derivado Bourne (como o bash), tente:

export DISPLAY=127.0.0.1:0
ssh -X marko@vm

Ou se você estiver usando o cmd.exe:

set DISPLAY=127.0.0.1:0
ssh -X marko@vm
yaegashi
fonte
Obrigado, é exatamente isso que estava faltando! Eu concederei a recompensa assim que me for permitido.
Abendigo
Observe que votei com o voto positivo da resposta de roaima (abaixo) porque ela descreve o porquê e também fornece uma resposta.
Azhrei 11/06
2
Portanto, a resposta de roaima explica por que o problema ocorreu, mas não me ajudou a resolvê-lo. Expliquei na minha pergunta que estava executando o Windows. A resposta de yaegashi me deu um comando para entrar no Windows que resolveu meu problema. foi por isso que selecionei esta resposta.
Abendigo 07/07/2015
Registrei uma conta apenas para votar nesta resposta. Eu pesquisei na internet por muito tempo antes de chegar aqui.
Rio Wing
3
Esta solução não funciona para mim. set DISPLAY=anythingseguido por ssh -X user@remoteretornos CreateProcessW failed error:2 ssh_askpass: posix_spawn: No such file or directory Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).Desativar a variável de ambiente set DISPLAY=permite que eu faça o ssh com êxito novamente, mas sem trabalhar no encaminhamento do X. Não faz sentido para mim que a configuração de DISPLAY deva fazer com que o software solicite minha senha dessa maneira. github.com/PowerShell/Win32-OpenSSH/issues/1088 github.com/PowerShell/Win32-OpenSSH/issues/1088
Pavel Komarov
14

Quando você executa ssh -X remotehoste é DISPLAY=localhost:10apresentado ao host remoto. sshescuta nessa porta e encaminha o tráfego de volta ao sistema de chamada, usando seu valor original de DISPLAYpara determinar o endereço do servidor.

É provável que você tenha no seu sistema local DISPLAY=:0. Ou, se você não tiver, é o que está sendo padronizado. Isso instrui o sistema local a usar o soquete de domínio UNIX para se comunicar com a tela. Infelizmente Xmingno Windows não configura esse soquete de domínio UNIX, portanto, o sshencaminhamento do X11 falha com esse tipo de erro:

$ export DISPLAY=:0
$ ssh -X remotehost xlogo
connect /tmp/.X11-unix/X0: No such file or directory
Error: Can't open display: localhost:10.0

A correção - pelo menos na medida do possível Xming- é bastante simples. Modifique a DISPLAYvariável para referenciar um soquete TCP de escuta em vez de um soquete de domínio UNIX.

$ export DISPLAY=localhost:0
$ ssh -X remotehost xlogo

Talvez você precise adaptar sua Xmingconfiguração para escutar na porta TCP local 6000. Aqui está como eu começo Xming:

Xming.exe :0 -clipboard -multiwindow

E aqui está uma evidência para confirmar que Xmingestá escutando na porta TCP / 6000:

$ netstat -na | grep ':6000 .*LISTEN'
  TCP    0.0.0.0:6000           0.0.0.0:0              LISTENING
roaima
fonte
Obrigado, eu tive esse problema exato! Eu não sabia que: 0 significa que a conexão é feita através de um soquete. Eu sempre pensei que era apenas uma abreviação de localhost: 0.
Andreas Raster
Eu tive o mesmo problema com o Bash para Ubuntu para Windows e Xming, e isso resolveu! Eu apenas tive que definir DISPLAY para localhost:0.
Ben Richards
Alguma idéia de por que DISPLAY=:0funciona bem no WSL + XMing para xeyes, mas não para ssh -X? Será que ssh -Xinterpretar $ DISPLAY de forma diferente de outros clientes locais X11? Outros clientes X11 retornam automaticamente para, localhost:0mas ssh -Xnão são?
Markus Kuhn
No man Xque diz que o nome do host vazia em DISPLAY =: 0 significa "O transporte local mais eficiente será o escolhido." Então pode ser ssh -Xusa um algoritmo diferente para fazer isso em comparação com dizer xeyes?
Markus Kuhn
@ MarkusKuhn talvez o WSL + Xming seja diferente do Cygwin + Xming. Vejo que agora estou usando DISPLAY=:0e o ssh -Xencaminha com alegria.
roaima 28/09