Як виправити помилку "не вдається відкрити дисплей" під час відкриття програми 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.