почему дисплей x11 не работает через логин ssh?

22

Я вошел на удаленный сервер и пытаюсь отобразить приложение x (например, firefox). но появляется сообщение об ошибке. ниже мои попытки открыть Firefox

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ exit
logout
Connection to 143.248.146.204 closed.

Black@Black-PC ~
$ ssh -Y kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ 

Я использовал -X, -Y, потому что где-то читал, что эти две опции связаны с учетными данными, относящимися к X11, и эти переключатели сделают эту работу за меня. Даже без ключей -X, -Y моя попытка не удалась.

Что означает ошибка «нет отображения»?

PS Странная вещь в том, что если я подключаюсь к удаленному серверу через PUTTY и повторяю команду 'firefox', она работает?!?! (Firefox отображается на локальном компьютере)

PS Мой локальный компьютер - Windows 7, поэтому я использую Xming в фоновом режиме, чтобы разрешить отображение X11. Что касается попытки, написанной в верхней части, команды были набраны на терминале Cygwin.

kwagjj
источник
Вы пытались отображать что-то локально с вашего терминала Cygwin? Например, вы можете найти локальную утилиту X, такую ​​как xclock, и запустить ее, чтобы посмотреть, что произойдет. Если вы не можете отобразить локально, удаленный дисплей не будет работать. Вам также может понадобиться X-сервер для Cygwin.
unxnut
1
@unxnut, как вы указали, моя DISPLAYпеременная не установлена. поэтому я настроил его с помощью export DISPLAY=:0.0' and executed xclock`, и появился xclock. Но когда я вошел в систему на удаленном сервере через ssh и попытался xclockснова, он говоритError: Can't open display:
kwagjj

Ответы:

16

Убедитесь, что в вашей среде cygwin установлена ​​переменная DISPLAY:

export DISPLAY=:0.0

после соединения с SSH проверьте, знает ли эта оболочка правильную переменную DISPLAY с помощью:

echo $DISPLAY
jensd
источник
4
Я установил переменную DISPLAY в терминале cygwin на локальном компьютере, а затем ssh'ed на удаленный сервер и набрал текст echo $DISPLAY. Но все равно переменная DISPLAY на удаленном сервере не имеет значения ..
kwagjj
2
Error: Can't open display: :0.0
Ахмед
2
Сделайте это:export DISPLAY=localhost:0
trogne
18

Я только столкнулся с этой проблемой, соединяющейся с безголовым сервером RHEL7.

Вам необходим пакет xorg-x11-xauth, установленный на вашем хосте, чтобы переменная DISPLAY была установлена ​​и была должным образом авторизована.

Надеюсь, я кого-то сэкономил.

Майк С
источник
3
именно то, что я искал. Очень признателен!
Джош-Каин
1
Отличный ответ! Другие решения (настройка DISPLAY вручную через экспорт) приведет к незашифрованной передаче между клиентом и сервером! В Debian Squeeze это был пакет "xauth", который нужно было установить, чтобы все работало. После повторного входа в ssh -Xсистему echo $DISPLAYвозвращается URL + порт и вызов xterm &открытого терминала в локальном окне.
Jpsy
7

Спасибо @jensd, @unxnut за помощь. на основе ваших комментариев я смог выяснить проблему.

Решение потребовало двух шагов:

  1. переменная DISPLAY должна быть правильно установлена.
  2. при подключении к удаленному серверу ключ -X должен быть включен

в моих предыдущих попытках отсутствует одно или оба из этих двух условий.

В любом случае, для более поздних пользователей, которые видят это здесь, есть примеры, чтобы показать вам, что я пытаюсь сказать.

Случай 1

моя локальная машина не будет иметь установленную переменную DISPLAY. И тогда я сделаю ssh на удаленном сервере с ключом -X и затем попробую выполнить xclock.

Black@Black-PC ~
$ echo $DISPLAY

## the blank means that DISPLAY variable has not been specified##
Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:23:13 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep $DISPLAY
DISPLAY: Undefined variable.

как видите, ошибка Error: Can't open display:отображается на удаленном сервере терминала.

Вариант 2

на этот раз на локальной машине я укажу переменную DISPLAY. Но когда я ssh'ing, я не буду включать ключ -X. Результатом будет сбой:

Black@Black-PC ~
$ export DISPLAY=:0.0

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:33:32 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep DISPLAY
[kwagjj@James5 ~]$ 

в начале вы можете видеть, что я правильно установил переменную DISPLAY. Но даже в этом случае после ssh'ing (без ключа -X) xclock не выполняется.

* Здесь setenv | grep DISPLAYможно увидеть другой результат (сравните с case1). в случае 2 результат просто пуст. с другой стороны, результат case1 для этой командной строки DISPLAY: undefined variable... Я не уверен, как это различие вызвано, но я догадываюсь, что это связано с тем, выполнили ли вы условие 1 или 2 ,

Вопрос 3

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

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
Last login: Tue Jun 24 22:37:27 2014 from 
[kwagjj@James5 ~]$ xclock &
[1] 9174
[kwagjj@James5 ~]$ setenv | grep DISPLAY
DISPLAY=localhost:11.0
[kwagjj@James5 ~]$

с этой настройкой xclockработает !! вот скриншот, чтобы доказать, что я не вру. введите описание изображения здесь xclock успешно показывается на моей локальной машине.

Опять же, проверьте результат setenv | grep DISPLAYв этом случае. Это сейчас показывает DISPLAY=localhost:11.0. Из того, что я знаю, это связано с MIT-MAGIC-COOKIE в файле .Xauthority, но так как я не знаю много об этом, я не буду идти дальше.

Вывод: из трех приведенных выше случаев мы можем подтвердить, что для правильного отображения удаленного X Windows, -Xнеобходимо правильно установить и переменную 1. DISPLAY локальной машины, и 2. переключатель ssh . Конечно, удаленный сервер должен разрешить пересылку X11.

kwagjj
источник