Чому дисплей x11 не працюватиме через sh-логін?


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.


Ви намагалися відобразити щось локально зі свого терміналу 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

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
саме те, що я шукав. Цінується!
josh-cain

1
Чудова відповідь! Інші рішення (встановлення DISPLAY вручну за допомогою експорту) призведе до незашифрованої передачі між клієнтом і сервером! У Debian Squeeze пакет "xauth" потрібно було встановити, щоб все працювало. Після повторного входу ssh -Xдля echo $DISPLAYповернутого URL + порту та виклику xterm &відкритого терміналу у локальному вікні.
Jpsy

7

Дякую @jensd, @unxnut за допомогу мені. на основі ваших коментарів я зміг розібратися в проблемі.

Для рішення потрібні два етапи:

  1. змінну DISPLAY слід правильно встановити.
  2. коли ssh'ing на віддалений сервер, перемикач -X повинен бути включений

у моїх попередніх спробах бракує однієї або обох цих двох умов.

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

випадок1

на моїй локальній машині не буде встановлено змінної DISPLAY. І тоді я сш на віддалений сервер з перемикачем -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. Але коли я сшу, я не вмикаю перемикач -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можна побачити інший результат (порівняйте зі випадком1). у випадку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 обидві 1. Змінна DISPLAY локальної машини та 2. ssh- -Xперемикач повинні бути правильно встановлені. Звичайно, віддалений сервер повинен дозволяти перенаправлення X11.

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