Как исправить ошибку «невозможно открыть дисплей» при открытии программы X после ssh с включенной переадресацией X11?

112

После запуска приложения X11 (XQuartz 2.3.6, xorg-server 1.4.2-apple56) на моем Mac (OS X 10.6.8), открытия терминала в X11 и его запуска xhost +, я перехожу на свою виртуальную машину ssh -YUbuntu 10.04 (работающую на VMware). Fusion). Когда я бегу gedit .bashrc(например), я получаю:

(gedit:9510): Gtk-WARNING **: cannot open display: 

set | grep DISPLAY ничего не возвращает

Но если я ssh -Yв мою машину Ubuntu 11.04, gedit .bashrcработает. echo $DISPLAYвозвращает "localhost: 10.0".

Я пытался, export DISPLAY=localhost:10.0пока sshed в мою виртуальную машину, а затем работает gedit .bashrc, но я получаю:

(gedit:9625): Gtk-WARNING **: cannot open display: localhost:10.0

Что может отличаться в конфигурации двух разных машин Ubuntu, что объясняет, почему один работает, а другой нет?

Обновление: как предложено Zoredache в комментарии ниже, я бежал sudo apt-get install xbase-clients, но у меня все еще остается та же проблема.

Дэрил Спитцер
источник
2
Есть ли в Ubuntu 10.04 соответствующие инструменты для X11? Установите клиенты xbase, если они еще не установлены.
Зоредаче
Я установил его, но все еще есть та же проблема. (См. Выше.)
Дэрил Спитцер
3
Возможно, попробуйте передать опцию -vv в ssh при подключении, это выводит подробные отладочные сообщения, при подключении вы должны увидеть несколько комментариев о переадресации X11.
Зоредаче
1
@jcrawfordor Вы проверили X11Forwardingна Ubuntu, и что вы xbase-clientsустановили, и что вы можете запускать Xapps на Mac на терминале , с которого вы устанавливаете ssh-соединение. (Убедитесь , что $DISPLAYустановлен на терминале запуска SSH с .
Manwe
1
В моем случае это был только вопрос обновления версии MacOS для
XQuartz

Ответы:

48

Проверьте sshd_config сервера (обычно /etc/ssh/sshd_config) и убедитесь, что опция X11Forwarding включена со строкой

X11Forwarding yes

Если X11Forwarding не указан, по умолчанию на компьютерах Debian, которые я могу проверить, по умолчанию нет.

DerfK
источник
4
После настройки другой виртуальной машины Ubuntu я обнаружил, что мне нужно установить xbase-клиенты и включить X11Forwarding. Обновите свой ответ, чтобы включить оба, и я приму его.
Дэрил Спитцер
1
Интересно. По крайней мере, на новой установке 10.04, которую я сделал сегодня утром, X11Forwarding был включен по умолчанию. Ребята из Ubuntu, должно быть, снова возятся с настройками по умолчанию.
Зоредаче
29
@DerfK, в моей системе "X11Forwarding yes" уже было там, я все еще получаю ошибку, (gedit: 8381): Gtk-WARNING **: не могу открыть дисплей: в таких случаях
AJ
1
В Debian вам, возможно, придется установить пакет xauth, а затем снова войти в систему.
конт
$ ssh username @ hostname -Y это сработало для меня
MarcoZen
61

От xhost +: Как исправить ошибку «Cannot Open Display» при запуске графического интерфейса на удаленном сервере :

Ответ : Вы можете исправить ошибку «не могу открыть дисплей», выполнив процедуру xhost, упомянутую в этой статье.

Разрешить клиентам подключаться с любого хоста с помощью xhost +

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

$ xhost +

контроль доступа отключен, клиенты могут подключаться с любого хоста

Включить пересылку X11

При выполнении ssh используйте опцию -X для включения пересылки X11.

$ ssh username@hostname -X

Включите надежную пересылку X11, используя опцию -Y,

$ ssh username@hostname -Y

Откройте приложения GUI на этом хосте

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

Если вы по-прежнему получаете сообщение об ошибке «Не удается открыть дисплей», установите переменную DISPLAY, как показано ниже.

$ export DISPLAY='IP:0.0'

Примечание. IP - это IP-адрес локальной рабочей станции, на котором вы хотите отобразить приложение с графическим интерфейсом.

harrymc
источник
12
+1 за примечание, что IP = -
PCoder
3
Для тех, у кого есть подобные проблемы в OS X, также убедитесь, что у вас установлен XQuartz, иначе ни одно из этих исправлений не поможет. (Вопрос OP показывает, что у него есть XQuartz, так что это больше примечание для тех, у кого были такие же проблемы, как и у меня)
Долан Антенуччи
3
Обратите внимание, что работа xhost +очень небезопасна и не должна использоваться! Как упоминал Стефан Рогин, злоумышленник может затем с хоста подключиться к вашей XSession, прочитать все, что вы печатаете, или даже изменить экран, который вы видите.
Юрислав
последний export Display=IP:0.0сделал это для меня
Джавадба
18

У меня была эта проблема при входе в Ubuntu VM из Mac OS X, а также - по некоторым причинам он не похож на «localhost» в отображаемой переменной. Так что установите IP вручную, как предлагает harrymc:

export DISPLAY="127.0.0.1:10.0"

Тогда программы X11 должны быть в порядке. Не похоже, что нужно указывать ОС, что localhost и 127.0.0.1 эквивалентны, но это работает, по крайней мере.

раскрутить
источник
Это сработало для меня. Есть идеи, почему localhost не работает?
Алекс
2
БИНГО! Я застрял в этой проблеме в течение некоторого времени ... Я подключился по SSH и не смог запустить программы Gtk (обычный X11, как "xeyes", работал, однако). ОТОБРАЖЕНИЕ было правильно. На самом деле, разрешение «localhost» не было! Если я установлю вручную DISPLAY = 127.0.0.1: 10.0 или DISPLAY = :: 1: 10.0, это сработает. Редактирование / etc / hosts, кажется, не имеет никакого эффекта; и DNS правильно настроен (отчет о корреляции «dig localhost» и 127.0.0.1, и :: 1). Таким образом, это похоже на ошибку во всех случаях, когда разрешение DNS для соединений X11 в Gtk (gtk? gdk? glib? other?).
Пабло Саратчага
1
При установке Debian для Beagle Bone Black файл / etc / host не был установлен для чтения кем-либо, кроме root. Это вызвало симптомы, о которых здесь сообщают. Сделал / etc / hosts доступным для чтения всем, и он работал нормально.
Даниэль
13

У меня была эта проблема с моим сервером CentOS KVM, мне не хватало программы "xauth".

Joril
источник
1
Это помогло мне в моей минимальной установке Debian, большое спасибо!
bin
9

Если у вас возникла эта проблема через некоторое время при запуске с -Xarg. или просто ForwardX11в / etc / ssh / ssh_config, затем запустите $ ssh username@hostname -Y, чтобы включить надежную пересылку X11 , не знаю точную причину, но я предполагаю, что -Xсрок действия некоторых функций истекает через некоторое время, возможно, для повышения безопасности.

Вот что я нашел в Интернете:

Если вы используете ssh -X remotemachine, то удаленный компьютер считается ненадежным клиентом. Таким образом, ваш локальный клиент отправляет команду на удаленный компьютер и получает графический вывод. Если ваша команда нарушает некоторые настройки безопасности, вы получите сообщение об ошибке.

Но если вы используете ssh -Y remotemachine, удаленный компьютер считается доверенным клиентом. Этот последний вариант может открыть проблемы безопасности. Потому что другой графический (X11) клиент может прослушивать данные с удаленной машины (делать снимки экрана, делать кейлогинг и другие неприятные вещи), и даже можно изменить эти данные.

Если вы хотите узнать больше об этих вещах, я предлагаю прочитать справочную страницу Xsecurity или спецификацию расширения X Security. Кроме того, вы можете проверить параметры ForwardX11 и ForwardX11Trusted в вашем / etc / ssh / ssh_config.

источники:

Стефан Рогин
источник
6

Только что протестировано на моем Mac, другие системы могут быть в порядке :

  1. Разрешить клиентам подключаться с любого хоста с помощью xhost +

    $ xhost +

  2. Вы должны иметь среду, которая поддерживает дисплей X11

    [Mac System] Установите X11 для Mac https://www.xquartz.org/

  3. Вы должны позволить вашему ssh-серверу пересылать x11 дисплей

    обновите /etc/ssh/sshd_configи установите X11Forwarding yes, затем перезапустите ваш ssh-сервер

  4. Вы должны позволить вашему сеансу SSH пересылать x11 с -Xпараметром

    $ ssh -X user @ ip

  5. Как открыть приложение X11 в PyCharm?
    • откройте сеанс ssh с поддержкой дисплея X11 (не забудьте сохранить этот сеанс)
    • запустить echo $DISPLAYв этой сессии SSH
    • установить DISPLAYпеременную окружения для вашего PyCharm
цвет
источник
1
Почему это отличается или почему оно должно быть предпочтительнее, чем любой другой ответ? Пожалуйста, объясните, если вы можете с простым редактированием . Ты можешь это сделать!!
Сок Pimp IT
@ McDonald's Спасибо, обновлено с более подробной информацией.
Цвет
4

При запуске UXTERM или XTERM просто выдайте

export $DISPLAY 

Переменная будет там. Затем просто установите его и экспортируйте.

Oracle2066
источник
4

Я должен был добавить /etc/ssh/sshd_configследующее:

X11UseLocalhost no

Скорее тогда установив это "да". Странно, если по умолчанию «НЕТ». Пользователи, использующие замазку с XMing под Windows. Я использую прямой SSH над Fedora. Иногда это начало давать нам

error can't open display localhost

Перезагрузка сервера обычно исправляет это, но это глупо. Сделал вышеописанное, перезапустил службу sshdна сервере и предустановил новые соединения, снова заработал нормально.

Луиджи
источник
2

Я также имел эту проблему с Solaris 10 и обнаружил, что слушатель не был настроен.

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop  options/tcp_listen = true
Дуг Сомерс
источник
1

На CentOS 6.5 я внезапно потерял удаленный доступ к X-программам после работы с / etc / hosts. Тот же признак пустой переменной $ DISPLAY (не помогает установка / экспорт вручную).

Запись 127.0.0.1, указывающая на фактическое имя хоста, необходима; на самом деле, порядок, похоже, тоже актуален (поставь последний и он не сработает ...)

[root@poseidon /etc]$ cat hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
::1     localhost6.localdomain6 localhost6
127.0.0.1 poseidon.mycampus.edu poseidon
1XX.XXX.XXX.208 poseidon.mycampus.edu poseidon

После исправления этой проблемы xeyes, xclock и другие тестовые игрушки X снова работают, поэтому мой нужный virt-manager также вернулся в строй.

Дэвид Рамирес
источник
1

Я только что нашел хороший сбой в моей настройке, который предотвращал переадресацию x: мой брандмауэр блокировал все соединения от localhost, таким образом препятствуя достижению туннеля

Pelle
источник
1

Если вы используете Konsole, просто переключитесь на другой эмулятор терминала, такой как Xfce Terminal, и попробуйте снова с помощью root.

Оливер Декант
источник
1

открыть терминал $ ssh username @ hostname -X

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

export DISPLAY = "127.0.0.1:10.0" все должно работать.

Кенни Гичухи
источник
Благодарю. Работает для моего особого случая, когда DISPLAY='localhost:10.0'не работает.
XPT
1

Эта настройка работает для меня:

Локальный (64-битный Cygwin в Windows 10) DISPLAY=:0

Сервер (Amazon EC2 RHEL 7.6) DISPLAY=:10.0

Эти настройки были найдены путем нажатия «X меню приложений на: 0» на панели задач и выбора «Системные инструменты»> «Терминал».

qwr
источник
0

После большого разочарования я обнаружил, что запись для имени хоста сервера в его файле / etc / host была неправильной.

iceburn_pt
источник