Як запустити графічний додаток на віддаленому сервері під час входу через SSH?


14

Я намагаюся запустити geditз терміналу SSH в Windows, підключеного до екземпляра Amazon EC2, на якому працює сервер Ubuntu 12.04, і я отримую цю помилку:

Cannot open display:

Як це виправити?

Відповіді:


14

Оскільки ви використовуєте Windows на своїй стороні, вам знадобиться SSH-клієнт, який запускає локальний сервер X в Windows, щоб віддалено запускати графічні програми з сервера на екрані.

З досвіду я рекомендую безкоштовний MobaXTerm, який має цю функціональність. Скачайте його та спробуйте:

введіть тут опис зображення

Якщо ви отримуєте якісь помилки, це тому, що іноді може бути встановлено мінімальне зображення сервера, щоб дозволити переадресацію X в нього. У такому випадку, будь ласка, прокоментуйте, і я допоможу вам це вирішити; Я робив це з великою кількістю мінімальних VPS, що працюють під управлінням Ubuntu / Debian.


17

Отже, ви підключаєтесь від домашнього ПК (назвемо його вашою машиною ) до сервера (назвемо його сервером ) через ssh ? Ви хочете запустити програму з графічним вікном на сервері через свою машину? Якщо це правильно, то будь ласка, читайте далі.

Давайте покличемо програму для запуску, geditале процес однаковий для всіх. Залежно від того, де ви хочете побачити графічне вікно, перейдіть до правого заголовка.

Вікно на екрані машини

Якщо ви хочете побачити і використовувати вікно gedit на віддаленій машині, але запустити його на сервері, ви хочете, щоб ваш сеанс оболонки виглядав так:

user@remote-machine:~$ ssh -X user@server
Last login: Tue Aug 14 13:47:04 2012 from clientXX
*******************************************************************************
M O T D (Message Of The Day)
*******************************************************************************
user@server:~$ gedit .bash_aliases 

** (gedit:7851): WARNING **: Could not load theme icon gtk-home: Icon 'gtk-home' not present in theme

(gedit:7851): Gtk-WARNING **: Attempting to store changes 

Не заперечуйте застереженнями, вони нормальні - на екрані віддаленої машини з’явиться вікно gedit, як воно виглядатиме на сервері. Трюк полягає у використанні "-X" -опції, оскільки ssh -Xце дозволяє X-тунелювання та встановлює DISPLAYзмінну право.

Це передбачає, що ви використовуєте клієнт SSH, який підтримує X11, і що на вашому сервері працює X-сервер (деякі без потреби в GUI не запускають X-сервер). Особливо на вікнах це може бути проблемою , так як більшість вікон термінальні програми не мають X. Як izx заявив MobaXTerm є одним з багатьох клієнтів SSH для вікон, має X-сервер , хоча.

Однак для сервера, якому не вистачає X11, вам доведеться його встановити.

На екрані сервера

Ви також можете запустити екземпляр на екрані свого сервера, зателефонувавши таким чином gedit:

ssh user@server
DISPLAY=:0.0 gedit

Вам потрібно замінити правильне значення замість того, :0.0щоб отримати його на правому X-екрані (важливо лише, якщо до вашого сервера підключено декілька екранів або якщо воно дещо своєрідне в його конфігурації).

Тут найпоширенішим сценарієм, коли це не спрацювало б, якби Серверу не вистачало X11-Сервера, але він не мав би монітор, підключений до нього або не має графічного інтерфейсу користувача, і ви б цього не читали: D.

Трохи теорії

Я не фахівець в цьому, але, як я думаю , що це працює, що кожен фізичний екран, тобто кожен монітор , підключений до окремого комп'ютера отримує біжить число у вигляді 0.0, 1.0, 2.0, ...

Це число присвоюється X-Window-System aka X11. Це шар для забезпечення мережевого та базового графічного інтерфейсу, на якому Unity, Gnome, KDE тощо можуть будуватися.

Ви можете бачити, скільки дисплеїв має дана машина та які цифри використовуються, запустивши for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; doneна відповідній машині. Ви можете використовувати екрани хостів з будь-якої машини в одній мережі, встановивши DISPLAYвідповідну зміну відповідно до DISPLAY=hostname:0.0. Ssh робить це для вас розумним чином, якщо ви надаєте -Xможливість.

* Примітка: я припускаю, що існує кращий спосіб, ніж цей цикл for.

Якщо все інше не вдається

Використовуйте текстовий редактор оболонки. vi, vim, nanoІ emacsє найбільш поширеними і буде встановлений і працює , по крайней мере один з них. З них nanoє найпростішим і найбільш пояснювальним.


@coding crow: Якщо ви SSHing з Windows, це залежить від того, чи буде це працювати. Деякі клієнти не спілкуються з X11 і, отже, не переадресують X - для деяких, хоча це просто добре. Якщо не працює, змініть SSH-клієнт для Windows або використовуйте nano, vim або emacs як химерні запропоновані у своїй відповіді.
con-f-use

Так, я перемогла голосування, побачила це у своєму профілі і запитала, чому немає коментарів чи нічого. Не так важливо не було з тобою стосунку, просто дивувався - радий, що ти вирішила проблему, і я можу тут трохи допомогти.
con-f-use

Я змінив forпетлевий bit..it тепер буде показувати адресу відображення тільки наприклад :0 :0.0. Не соромтеся повернутись назад, якщо ви думаєте, що це не те, що ви хочете ..
heemayl

0

Про те, що говорилося про використання .

В основному у вас є термінал через SSH, а Gedit - це програма GUI. Відповідь con-f-use змусить його працювати з клієнтською сесією Linux GUI.

Іншим варіантом буде використання такого редактора, який не використовується GUI, наприклад, nano, Vi або багатьох інших.

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