Прапор -X (X11 Forwarding) не працює в 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

1
Це може бути очевидним, але я не можу точно сказати з вашого посту - чи є у вас фактично встановлений X-сервер у Windows, наприклад, слідкуючи за bitvise.com/ssh-x11-forwarding ?

1
Так, у мене є Xming X - сервера ( straightrunning.com/xmingnotes )
abendigo

Ви - просто перевірити речі - спробували те ж саме з PuTTY? Якщо ні, то пропоную спробувати з цим і подивитися, чи працює він там.
полемон

1
так, це працює в шпаклівці.
абендіго

Я зараз перевіряю свою 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

Дякую, саме це мені не вистачало! Я вручу нагороду, як тільки мені дозволять.
абендіго

Зауважте, що я відповів на голосування Роайма (внизу), тому що він описує, чому так само, як просто давати відповідь.
Ажрей

2
Тож відповідь роайма пояснює, чому проблема виникла, але це не допомогло мені вирішити проблему. Я в своєму запитанні пояснив, що у мене запущені вікна. Відповідь yaegashi дала мені команду ввійти у вікна, які вирішили мою проблему. саме тому я вибрав цю відповідь.
абендіго

Я зареєстрував обліковий запис лише для того, щоб проголосувати цю відповідь. Я довго шукав Інтернет, перш ніж потрапити сюди.
Ріо Вінг

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).Визначення змінної середовища з допомогою set DISPLAY=дозволяє мені знову успішно ssh, але не працюючи з переадресацією X. Для мене немає сенсу, що встановлення DISPLAY повинно викликати програмне забезпечення таким чином запитувати мій пароль. github.com/PowerShell/Win32-OpenSSH/isissue/1088 github.com/PowerShell/Win32-OpenSSH/isissue/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

Дякую, у мене була така точна проблема! Я не знав, що: 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передаю.
roaima

1

З ssh в Windows10 та Xming, я, здається, отримую "хороші" (?) Результати з:

set DISPLAY=localhost:0

і створення об'єкта C: \ dev \ tty, наприклад, з

mkdir \dev
echo x > \dev\tty

та використання ssh -Y(не ssh -X).


Дивіться також / замість цього або / або github.com/PowerShell/Win32-OpenSSH/isissue/1088 github.com/PowerShell/Win32-OpenSSH/isissue/966
Пол Сабо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.