Попытка заставить X11 работать через SSH: соединение отклонено сервером

Использование Cygwin/X11
Запустите команду в локальном Xterm для SSH:

xterm -e ssh -Y -v -l MyUser myserver.mydomain.com &

После входа в систему я бегу

setenv DISPLAY myclient.mydomain.com:0.0

Когда я пытаюсь запустить Xterm, я получаю:

Xlib: соединение с "myclient.mydomain.com:0.0" отклонено сервером
Xlib: протокол не указан

xterm Xt error: не удается открыть дисплей: myclient.mydomain.com:0.0

На другом сервере у меня нет проблем с запуском новых окон xterm без запуска setenv.
"echo $DISPLAY" на этом сервере возвращает "localhost:11.0"

Если я пытаюсь использовать это на другом сервере, я получаю следующее:

$ setenv DISPLAY localhost: 11.0
$ xterm
xterm Xt error: не удается открыть дисплей: localhost:11.0

Я полагаю, что упускаю что-то довольно простое, но я не уверен, что это такое.


РЕДАКТИРОВАТЬ:
Пробовал не устанавливать $DISPLAY:

Вот результаты

$ echo $DISPLAY
DISPLAY: неопределенная переменная.
$ xlogo
Ошибка: не удается открыть дисплей:

До сих пор не работает:-(


РЕДАКТИРОВАТЬ Снова: выше было на прямой логин. Я не удалил $DISPLAY и не изменил его перед попыткой запуска xlogo

5 ответов

Не устанавливайте дисплей на удаленной стороне. Используя параметр -Y в SSH, он настроит слушателя на (удаленной) локальной стороне, который будет туннелирован обратно на локальную сторону.

Вы должны быть в состоянии сделать это:

local$ ssh -Y user@remote
remote$ xlogo

... и Xlogo появится.

Редактировать: это предполагает, что отображение сначала настраивается в локальной системе, то есть:

local$ xlogo

... должен работать до того, как вы выполните ssh, так как ssh просто подключает пересылку назад к тому, что исходный сеанс считает правильным отображением. Это полезно, так как вы можете проводить свой дисплей через несколько сеансов SSH:

local$ ssh remote
remote$ ssh further
further$ xlogo

...должно сработать.

Вы должны использовать X11 R5. С этой ревизией ваши окна X11 должны быть запущены на сервере. Затем выполните следующие команды:

printenv | grep 'X11'
printenv | grep 'ssh'

если вы обнаружите, что Windows X11 работает, то -

xterm -e 'ssh remote.machine.domain
xhost + remote.machine.domain
setenv DISPLAY local.machine.domain:0.0
xterm &

Когда вы выполняете вышеуказанные команды, если xterm выдает GUI, тогда ага, ваша среда X11 настроена для работы с ssh. Если нет, проверьте, установлена ​​ли последняя версия X11.

Если это не работает, напишите мне. Я посмотрю в журналах. Хорошо!.

Дэвид в значительной степени прибил половину уравнения - механизм ssh автоматически позаботится о настройке аутентификации xauth и определении вашего дисплея, поэтому не отменяйте это вручную, устанавливая переменную DISPLAY самостоятельно.

Другая проблема заключается в том, что некоторые ssh -демоны на стороне назначения настроены так, чтобы запретить перенаправление X, даже если вы вежливо спросите.

ssh -v сообщит вам, если сервер не разрешит пересылку X; Вы также можете посмотреть на sshd_config, чтобы увидеть, запрещает ли он перенаправление X.

От man ssh:

-X   Enables X11 forwarding. This can
     also  be specified on a per-host
     basis in a configuration file.

Вы должны сделать после входа в систему

echo $DISPLAY

Вероятно, вы получите что-то вроде "localhost: 11.0". Это означает, что ssh автоматически перенаправит любое соединение, идущее на локальный дисплей 11, на ваш сервер X11 на ноутбуке. Итак, просто запустите свою программу.

Когда вы изменяете DISPLAY, вы указываете программе подключаться напрямую к вашему ноутбуку (без шифрования). Чтобы это работало, вы должны разрешить это на своем ноутбуке (сделать что-то вроде "xhost +myclient.mydomain.com).

Кроме того, когда вы выполняете команду "ssh -Y", на сервере X-сервер должен прослушивать TCP-порт 6000+n, где n - это номер дисплея, назначенный вашему доверенному соединению. Вы можете проверить, выполнив:

netstat -l -t 

затем проверьте, есть ли что-нибудь открытое после порта 6000 (например, 6011). Если по какой-либо причине ДИСПЛЕЙ установлен неправильно (возможно, на вашем коллегном компьютере?), Попробуйте сделать следующее:

setenv DISPLAY localhost:11.0
Другие вопросы по тегам