Jak uruchomić aplikację graficzną na zdalnym serwerze po zalogowaniu przez SSH?

14

Próbuję uruchomić geditz terminala SSH w systemie Windows, podłączonego do instancji Amazon EC2 z systemem Ubuntu 12.04 Server i otrzymuję ten błąd:

Cannot open display:

Jak to naprawić?

Gaurav Agarwal
źródło

Odpowiedzi:

14

Ponieważ korzystasz z systemu Windows po swojej stronie, potrzebujesz klienta SSH, który obsługuje lokalny serwer X w systemie Windows, aby uruchamiać aplikacje graficzne z serwera zdalnie na ekranie.

Z doświadczenia polecam darmowy MobaXTerm, który ma tę wbudowaną funkcjonalność. Pobierz i wypróbuj:

wprowadź opis zdjęcia tutaj

Jeśli wystąpią jakiekolwiek błędy, dzieje się tak, ponieważ czasami minimalny obraz serwera może nie zostać skonfigurowany, aby umożliwić przekazywanie do niego X. W takim przypadku prosimy o komentarz, a pomogę ci rozwiązać; Zrobiłem to z wieloma minimalnymi VPS z systemem Ubuntu / Debian.

ish
źródło
17

Więc łączysz się z komputera domowego (nazwijmy to swoją maszyną ) do serwera (nazwijmy go serwerem ) przez ssh ? Chcesz uruchomić program z oknem graficznym na serwerze za pośrednictwem komputera? Jeśli jest to poprawne, to czytaj dalej.

Wywołajmy program, aby rozpocząć, geditale proces jest taki sam dla wszystkich. W zależności od tego, gdzie chcesz zobaczyć okno graficzne, przejdź do prawego nagłówka.

Okno na ekranie urządzenia

Jeśli chcesz zobaczyć okno gedit i korzystać z niego na zdalnym komputerze, ale zacznij na serwerze, chcesz, aby sesja powłoki wyglądała tak:

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 

Nie przejmuj się ostrzeżeniami, są one normalne - okno gedit wyskakuje na ekranie twojego komputera zdalnego tak, jakby wyglądało na serwerze. Sztuką jest użycie opcji „-X”, ponieważ ssh -Xumożliwia tunelowanie X i ustawia DISPLAYzmienną we właściwy sposób.

Zakłada się, że używasz klienta SSH, który obsługuje X11 i że twój serwer ma uruchomiony serwer X (niektóre bez potrzeby używania GUI nie obsługują serwera X). Szczególnie w systemie Windows może to stanowić problem, ponieważ większość programów terminalowych systemu Windows nie ma X. Jak stwierdził Izx , MobaXTerm jest jednym z wielu klientów SSH dla systemu Windows, który ma X-Server.

Jednak w przypadku serwera pozbawionego X11 należy go zainstalować.

Na ekranie serwera

Możesz także uruchomić instancję na ekranie swojego serwera, wywołując gedit w następujący sposób:

ssh user@server
DISPLAY=:0.0 gedit

Musisz jednak zastąpić odpowiednią wartość, :0.0aby uzyskać ją na właściwym ekranie X (ważne tylko, jeśli do twojego serwera podłączonych jest wiele ekranów lub jeśli jest to dość specyficzne w konfiguracji).

Oto najczęstszy scenariusz, w którym to nie zadziałałoby, gdyby na serwerze nie było serwera X11, ale nie miałby do niego monitora lub graficznego interfejsu użytkownika i nie czytałbyś tego: D.

Trochę teorii

Nie jestem ekspertem w tym, ale sposób, myślę, że działa to, że każdego ekranu fizycznego, tj Każdy monitor podłączony do pojedynczego komputera dostaje uruchomiony numer w formie 0.0, 1.0, 2.0, ...

Ten numer jest przypisywany przez X-Window-System znany również jako X11. Jest to warstwa zapewniająca sieć i podstawowy interfejs graficzny, na których mogą bazować Unity, Gnome, KDE i tym podobne.

Możesz zobaczyć, ile wyświetlaczy ma dany komputer i jakie liczby są używane, uruchamiając for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; donena danym komputerze. * Następnie każdy komputer skonfigurowany do udostępniania ekranów i działający na serwerze X ma nazwę hosta. Możesz użyć ekranów hostów z dowolnego komputera w tej samej sieci, ustawiając odpowiednio DISPLAYzmienną DISPLAY=hostname:0.0. Ssh robi to dla ciebie w rozsądny sposób, jeśli podasz taką -Xopcję.

* Uwaga: Przypuszczam, że istnieje lepszy sposób niż ta pętla for.

Jeśli wszystko inne zawiedzie

Użyj edytora tekstu powłoki. vi, vim, nanoI emacssą najbardziej powszechne i przynajmniej jeden z nich zostanie zainstalowany i działa. Z nich nanojest najłatwiejszy i najbardziej zrozumiały.

dezorientować
źródło
@coding crow: Jeśli korzystasz z SSHing z Windows, to od klienta zależy, czy to zadziała. Niektórzy klienci nie komunikują się z X11, a zatem nie ma przekierowania X - dla niektórych jednak po prostu działa dobrze. Jeśli nie działa, zmień klienta SSH dla Windows lub użyj nano, vim lub emacs, jak sugerował Xyious w swojej odpowiedzi.
con-f-use
Tak, dostałem głos negatywny, zobaczyłem to w moim profilu i zastanawiałem się, dlaczego nie ma komentarza ani nic takiego. Nie tak ważne, że nie miałem z tobą do czynienia, po prostu się zastanawiałem - cieszę się, że problem został rozwiązany i mogłem tu pomóc.
con-f-use
forTrochę zmodyfikowałem pętlę. Teraz pokaże tylko adres wyświetlany np :0 :0.0. Cofnij się, jeśli myślisz, że to nie to, czego chcesz ..
heemayl
0

Co powiedziało con-f-use .

Zasadniczo masz terminal przez SSH, a Gedit to program GUI. Odpowiedź con-f-use sprawi, że będzie działał z sesji klienta GUI systemu Linux.

Inną opcją byłoby użycie edytora innego niż GUI, takiego jak nano, Vi lub wiele innych.

xyious
źródło