Як виправити помилку "не вдається відкрити дисплей" під час відкриття програми X після ssh'ing з включеним переадресацією X11?


111

Після запуску програми X11 (XQuartz 2.3.6, xorg-сервер 1.4.2-apple56) на моєму Mac (ОС X 10.6.8), відкриття терміналу в X11 і запуску xhost +, я потім перейду ssh -Yдо свого Ubuntu 10.04 VM (працює на VMware Злиття). Коли я запускаю 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коли прошився до моєї віртуальної машини, а потім працював gedit .bashrc, але отримую:

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

Що може бути різним у конфігурації двох різницьких машин Ubuntu, які б пояснили, чому одна працює, а інша ні?

Оновлення: Як запропонував Зоредач у коментарі нижче, я побіг sudo apt-get install xbase-clients, але у мене продовжують виникати ті ж проблеми.


2
Чи встановлено у коробці Ubuntu 10.04 належні інструменти для X11? Встановіть xbase-клієнтів, якщо вони ще не встановлені.
— Zoredache

Я встановив його, але все ще маю ту саму проблему. (Див. Вище).
— Дарил Спітцер

3
Можливо, спробуйте передати опцію -vv в ssh під час підключення. Це друкує багатослівні повідомлення про налагодження, ви маєте побачити кілька коментарів щодо переадресації X11 під час з'єднання.
— Zoredache

1
@jcrawfordor Ви перевірили наявність убуту X11Forwarding, і що ви xbase-clientsвстановили, і ви можете запустити Xapps на mac на терміналі, з якого ви здійснюєте ssh-з'єднання. (Переконайтеся , що $DISPLAYвстановлено на терміналі запуску SSH з .
— Manwe

1
У моєму випадку це було лише питанням модернізації версії MacOS
— XQuartz

Відповіді:


47

Перевірте sshd_config на сервері (як правило /etc/ssh/sshd_config) і переконайтеся, що параметр X11Forwarding включений за допомогою рядка

X11Forwarding yes

Якщо X11Forwarding не вказано, за замовчуванням немає на машинах Debian, які я маю можливість перевірити.


4
Після налаштування іншого Ubuntu VM я виявив, що мені потрібно встановити xbase-клієнти та включити X11Forwarding. Оновіть свою відповідь, щоб вона включала обидва, і я прийму її.
— Дарил Спітцер

1
Цікаво. Принаймні, при новій установці 10.04, яку я зробив сьогодні вранці, X11Forwarding було включено за замовчуванням. Хлопці з Ubuntu знову повинні зіпсуватись із замовчуванням.
— Zoredache

28
@DerfK, в моїй системі є «X11Forwarding так» вже до сих пір я отримую повідомлення про помилку , як, (Gedit: 8381): Gtk-WARNING **: не можу відкрити дисплей: в таких випадках
— AJ

1
На Debian вам, можливо, доведеться встановити пакет xauth, а потім увійти знову.
— конт

$ ssh username @ hostname -Y це працювало для мене
— MarcoZen

60

Від xhost +: Як виправити помилку "Не вдається відкрити дисплей" під час запуску GUI на віддаленому сервері :

Відповідь : Ви можете виправити помилку "не вдається відкрити дисплей", дотримуючись процедури xhost, зазначеної в цій статті.

Дозвольте клієнтам підключитися з будь-якого хоста за допомогою xhost +

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

$ xhost +

контроль доступу відключений, клієнти можуть підключатися з будь-якого хоста

Увімкнути переадресацію X11

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

$ ssh username@hostname -X

Увімкніть надійне перенаправлення X11 за допомогою параметра -Y,

$ ssh username@hostname -Y

Відкрийте програми GUI у цьому хості

Відкривши ssh-з'єднання з віддаленим хостом, як пояснено вище, ви можете відкрити будь-яку програму GUI, яка відкриє його без жодних проблем.

Якщо ви все ще отримуєте помилку "не вдається відкрити дисплей", встановіть змінну DISPLAY, як показано нижче.

$ export DISPLAY='IP:0.0'

Примітка: IP - IP локальної робочої станції, де ви хочете відобразити програму GUI.


11
+1 зауважте, що IP = IP-адреса локальної робочої станції, де ви хочете отримати GUI
— PCoder

3
Для тих, хто має подібні проблеми в OS X, також переконайтеся, що ви встановили XQuartz, інакше жодне з цих виправлень не допоможе. (Питання ОП показує, що він має XQuartz, тому це більше побічна записка для тих, хто має подібні проблеми, як і я)
— Dolan Antenucci

3
Зауважте, що біг xhost +дуже незахищений і його не слід використовувати! Як згадував Стефан Рогін, зловмисник може потім від хоста підключитися до вашої XSession, прочитати все, що ви вводите, або навіть змінити екран, який ви бачите.
— Джиріслав

останній export Display=IP:0.0зробив це для мене
— javadba

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", працював). DISPLAY був правильним. Насправді, резолюції "localhost" не було! Якщо я встановив DISPLAY = 127.0.0.1: 10.0, або DISPLAY = :: 1: 10.0, він працює. Редагування / etc / hosts, здається, не впливає; і DNS правильно налаштований ("викопати localhost" звіт про коректність, як 127.0.0.1, так і :: 1) Отже, здається, це помилка в будь-якій роздільній здатності DNS для з'єднань X11 в Gtk (gtk? gdk? glib? other?).
— Пабло Саратхага

1
При встановленні Debian для Beagle Bone Black, / etc / host не був встановлений для читання будь-ким, окрім root. Це спричинило симптоми, про які тут повідомлялося. Зроблено / тощо / хостів, щоб усі читали, і це працювало чудово.
— Даніель

13

У мене була ця проблема з моїм сервером CentOS KVM, мені не вистачало програми "xauth".


1
Це допомогло мені у моїй мінімальній установці debian, дуже дякую!
— binOr

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 користувач @ ip

  5. Як відкрити додаток X11 у PyCharm?
    • відкрити ssh-сеанс, що підтримує X11-дисплей (не забудьте зберегти цей сеанс)
    • запустити echo $DISPLAYв цьому сеансі ssh
    • встановити DISPLAYзмінну середовища для вашого PyCharm

1
Чому це різниця або чому слід віддавати перевагу будь-якій іншій відповіді? Будь ласка, поясніть, чи можете ви за допомогою простого редагування . Ти можеш це зробити!!
— Pimp Juice IT

@ McDonald's спасибі, оновлено більше деталей.
— Колір

4

Під час запуску UXTERM або XTERM просто видайте

export $DISPLAY 

Змінна буде там. Потім просто встановіть його та експортуйте.


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-менеджер також повернувся в лінію.


1

Щойно я знайшов приємну іконку в моїй програмі, яка перешкоджала переадресації x: Мій брандмауер блокував усі з'єднання з localhost, тим самим запобігаючи тунелю


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" на панелі завдань та вибравши Система Інструменти> Термінал


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.