Как запустить графическое приложение на удаленном сервере при входе через SSH?

14

Я пытаюсь работать geditс терминала SSH в Windows, подключенного к экземпляру Amazon EC2 под управлением Ubuntu 12.04 Server, и получаю эту ошибку:

Cannot open display:

Как мне это исправить?

Гаурав Агарвал
источник

Ответы:

14

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

Исходя из опыта, я бы порекомендовал бесплатный MobaXTerm, в который встроена эта функциональность. Пожалуйста, загрузите его и попробуйте:

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

Если вы получаете какие-либо ошибки, это потому, что иногда минимальный образ сервера не может быть настроен для разрешения X-forwarding в него. В этом случае, пожалуйста, прокомментируйте, и я помогу вам решить; Я сделал это с множеством минимальных 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-сервер (некоторые без графического интерфейса не запускают 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 aka X11. Это слой для обеспечения сети и базового графического интерфейса, на котором могут основываться Unity, Gnome, KDE и тому подобное.

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

* Примечание: я полагаю, есть лучший способ, чем этот цикл for.

Если все остальное терпит неудачу

Используйте текстовый редактор оболочки. vi, vim, nanoИ emacsявляются наиболее распространенными и будет установлен и работает , по крайней мере один из них. Из них nanoсамый простой и понятный.

кон-е использование
источник
@coding crow: Если вы пользуетесь SSH из Windows, это зависит от клиента, будет ли это работать. Некоторые клиенты не общаются с X11 и, следовательно, не используют X-forwarding - для некоторых, хотя он просто отлично работает. Если не работает, измените SSH-клиент для Windows или используйте nano, vim или emacs, как предложено в ответе xyious.
con-f-use
Да, я получил отрицательный голос, увидел его в своем профиле и удивился, почему нет комментариев или чего-то еще. Не так важно не иметь с тобой ничего общего, просто удивлялся - рад, что твоя проблема решена, и я мог бы здесь немного помочь.
con-f-use
Я forнемного изменил цикл. Теперь он будет отображать только адрес дисплея, например :0 :0.0. Не стесняйтесь вернуться назад, если вы думаете, что это не то, что вы хотите ..
Heemayl
0

Что сказал контрафакт .

В основном у вас есть терминал через SSH, а Gedit - это программа с графическим интерфейсом. Ответ con-f-use заставит его работать из сеанса клиента Linux с графическим интерфейсом.

Другой вариант - использовать редактор без графического интерфейса, такой как nano, Vi или многие другие.

xyious
источник