Próbuję uruchomić gedit
z 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ć?
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:
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.
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ąć, gedit
ale proces jest taki sam dla wszystkich. W zależności od tego, gdzie chcesz zobaczyć okno graficzne, przejdź do prawego nagłówka.
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 -X
umożliwia tunelowanie X i ustawia DISPLAY
zmienną 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ć.
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.0
aby 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.
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}"; done
na 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 DISPLAY
zmienną DISPLAY=hostname:0.0
. Ssh robi to dla ciebie w rozsądny sposób, jeśli podasz taką -X
opcję.
* Uwaga: Przypuszczam, że istnieje lepszy sposób niż ta pętla for.
Użyj edytora tekstu powłoki. vi
, vim
, nano
I emacs
są najbardziej powszechne i przynajmniej jeden z nich zostanie zainstalowany i działa. Z nich nano
jest najłatwiejszy i najbardziej zrozumiały.
for
Trochę 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 ..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.
źródło