-X флаг (пересылка X11) не работает в Windows

16

Я использую Open SSH (OpenSSH_6.6.1p1, OpenSSL 1.0.1i 6 августа 2014 г.) в Windows 8.1. Пересылка X11 не работает. Переменная окружения DISPLAY не установлена.

Например, если я использую BitVise или Putty для подключения и запускаю env, я вижу:

[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

Если я вместо этого использую 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
источник
1
Может быть очевидным, но я не могу точно сказать из вашего поста - на самом ли деле у вас установлен X-сервер в Windows, например, после bitvise.com/ssh-x11-forwarding ?
1
Да, у меня есть Xming X - сервера ( straightrunning.com/xmingnotes )
abendigo
Вы - просто для проверки - пробовали то же самое с PuTTY? Если нет, я предлагаю попробовать и посмотреть, работает ли он там.
Полемон
1
да, это работает в замазке.
abendigo
Я проверяю свою Windows VM прямо сейчас. Это может быть так же просто, как проверить, какие переменные PuTTY устанавливает, чтобы это работало. Я добавлю ответ через пару часов.
Полемон

Ответы:

16

Вы установили DISPLAY переменную среды на клиенте? Я не уверен, какую оболочку вы используете, но с производной оболочки Bourne (например, bash) попробуйте:

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

Или, если вы используете cmd.exe:

set DISPLAY=127.0.0.1:0
ssh -X marko@vm
yaegashi
источник
Спасибо, это именно то, чего мне не хватало! Я присужду награду, как только мне позволят.
abendigo
Обратите внимание, что я проголосовал за ответ Роаймы (ниже), потому что он описывает почему, а также просто дает ответ.
Ажрей
2
Так что ответ Роймы объясняет, почему возникла проблема, но это не помогло мне решить проблему. Я объяснил в своем вопросе, что у меня запущены окна. Ответ yaegashi дал мне команду войти в окна, которые решили мою проблему. вот почему я выбрал этот ответ.
Абендиго
Я зарегистрировал аккаунт только для того, чтобы проголосовать за этот ответ. Я долго искал в интернете, прежде чем попасть сюда.
Rio Wing
3
Это решение не работает для меня. set DISPLAY=anythingс последующим ssh -X user@remoteвозвратом CreateProcessW failed error:2 ssh_askpass: posix_spawn: No such file or directory Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).Unsetting переменной окружения с помощьюset DISPLAY= позволяет мне снова успешно выполнить ssh, но без работы X forwarding. Для меня не имеет никакого смысла, что настройка DISPLAY должна заставить программное обеспечение запрашивать мой пароль таким образом. github.com/PowerShell/Win32-OpenSSH/issues/1088 github.com/PowerShell/Win32-OpenSSH/issues/1088
Павел Комаров
14

Когда вы запускаете, ssh -X remotehostи вы получаете DISPLAY=localhost:10удаленный хост. sshпрослушивает этот порт и перенаправляет трафик обратно в вызывающую систему, используя его исходное значение DISPLAYдля определения адреса сервера.

Вполне вероятно, что в вашей локальной системе у вас есть DISPLAY=:0. Или, если вы этого не сделали, это то, что он по умолчанию. Это указывает локальной системе использовать сокет домена UNIX для связи с дисплеем. К сожалению, Xmingв Windows не установлен этот сокет домена UNIX, поэтому вашssh пересылка X11 завершается с ошибкой такого рода:

$ 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

Исправить - по крайней мере, насколько это возможно Xming- довольно просто. Измените DISPLAYпеременную так, чтобы она ссылалась на прослушивающий сокет TCP, а не на сокет домена UNIX.

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

Возможно, вам придется адаптировать свою Xmingконфигурацию для прослушивания на локальном TCP-порту 6000. Вот как я начинаю Xming:

Xming.exe :0 -clipboard -multiwindow

И вот подтверждение того, что Xmingпрослушивает порт tcp / 6000:

$ netstat -na | grep ':6000 .*LISTEN'
  TCP    0.0.0.0:6000           0.0.0.0:0              LISTENING
roaima
источник
Спасибо, у меня была именно эта проблема! Я не знал, что: 0 означает, что соединение сделано через сокет. Я всегда думал, что это просто сокращение для localhost: 0.
Андреас
У меня была та же проблема с Bash для Ubuntu для Windows и Xming, и это решило ее! Я просто должен был установить DISPLAY на localhost:0.
Бен Ричардс
Любая идея, почему DISPLAY=:0прекрасно работает на WSL + XMing для xeyes, но не для ssh -X? Отличается ли ssh -Xинтерпретация $ DISPLAY от других локальных клиентов X11? Отвечают ли другие клиенты X11 автоматически, localhost:0но ssh -Xнет?
Маркус Кун
На man Xнем написано, что пустое имя хоста в DISPLAY =: 0 означает «Будет выбран наиболее эффективный локальный транспорт». Так может быть, ssh -Xиспользует другой алгоритм, чтобы сделать это по сравнению с сказать xeyes?
Маркус Кун,
@MarkusKuhn Возможно, WSL + Xming отличается от Cygwin + Xming. Я вижу, что я сейчас использую DISPLAY=:0и ssh -Xотправляю это счастливо.
Ройма