Bagaimana cara menjalankan aplikasi grafis pada server jauh ketika login melalui SSH?

14

Saya mencoba menjalankan geditdari terminal SSH di Windows, terhubung ke instance Amazon EC2 yang menjalankan Ubuntu 12.04 Server dan saya mendapatkan kesalahan ini:

Cannot open display:

Bagaimana saya memperbaikinya?

Gaurav Agarwal
sumber

Jawaban:

14

Karena Anda menggunakan Windows di sisi Anda, Anda akan memerlukan klien SSH yang menjalankan server X lokal pada Windows untuk menjalankan aplikasi grafis dari server dari jarak jauh di layar Anda.

Dari pengalaman, saya akan merekomendasikan MobaXTerm gratis yang memiliki fungsi ini bawaan . Silakan unduh dan cobalah:

masukkan deskripsi gambar di sini

Jika Anda mendapatkan kesalahan, itu karena kadang-kadang gambar server minimal mungkin tidak diatur untuk memungkinkan penerusan X ke dalamnya. Jika demikian, beri komentar dan saya akan membantu Anda menyelesaikannya; Saya telah melakukan ini dengan banyak VPS minimal yang menjalankan Ubuntu / Debian.

ish
sumber
17

Jadi Anda terhubung dari PC rumah Anda (sebut saja mesin Anda ) ke server (sebut saja server ) melalui ssh ? Anda ingin memulai program dengan jendela grafis di server melalui mesin Anda? Jika itu benar dari semua, baca terus.

Mari kita panggil program untuk memulai gedittetapi prosesnya sama untuk semua. Tergantung di mana Anda ingin melihat jendela grafis lewati ke arah kanan.

Jendela di layar mesin Anda

Jika Anda ingin melihat dan menggunakan jendela gedit di mesin jarak jauh Anda tetapi mulai di server, Anda ingin sesi shell Anda terlihat seperti ini:

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 

Jangan pedulikan peringatannya, itu normal - jendela gedit akan muncul di layar mesin jarak jauh Anda seperti yang terlihat di server. Caranya adalah dengan menggunakan opsi "-X" ssh -Xyang memungkinkan X-tunneling dan mengatur DISPLAYvariabel dengan benar.

Ini mengasumsikan bahwa Anda menggunakan klien SSH yang mendukung X11 dan bahwa server Anda menjalankan X-server (beberapa tanpa perlu GUI tidak menjalankan X-server). Terutama pada windows ini mungkin menjadi masalah karena kebanyakan jendela program terminal tidak memiliki X. Sebagai izx menyatakan MobaXTerm adalah salah satu dari banyak klien SSH untuk jendela yang memiliki X-Server sekalipun.

Untuk server yang kekurangan X11, Anda harus menginstalnya.

Di layar server

Anda juga dapat memulai instance di layar server Anda dengan memanggil gedit seperti ini:

ssh user@server
DISPLAY=:0.0 gedit

Anda harus mengganti nilai yang tepat alih-alih :0.0mendapatkannya di layar-X yang tepat (hanya penting jika beberapa layar terhubung ke server Anda atau jika itu agak aneh dalam konfigurasinya).

Di sini skenario yang paling umum untuk itu tidak berfungsi adalah jika Server tidak memiliki X11-Server tetapi daripada itu tidak akan memiliki monitor yang terhubung atau tidak memiliki antarmuka pengguna grafis dan Anda tidak akan membaca ini: D.

Sedikit teori

Saya bukan ahli dalam hal ini, tapi cara saya berpikir kerjanya adalah, bahwa setiap layar fisik, yaitu masing-masing monitor yang terhubung ke komputer individu mendapat sejumlah berjalan dalam bentuk 0.0, 1.0, 2.0, ...

Nomor ini diberikan oleh X-Window-System alias X11. Itu adalah lapisan untuk menyediakan jaringan dan antarmuka grafis dasar yang dapat dibangun oleh Unity, Gnome, KDE dan sejenisnya.

Anda dapat melihat berapa banyak tampilan yang dimiliki mesin dan angka apa yang digunakan dengan menjalankan for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; donepada mesin tersebut. * Kemudian setiap komputer yang dikonfigurasi untuk membuat layarnya tersedia dan menjalankan server X memiliki nama host. Anda dapat menggunakan layar host dari mesin apa pun di jaringan yang sama dengan mengatur DISPLAYvariabel Anda sesuai dengan DISPLAY=hostname:0.0. Ssh melakukan ini untuk Anda dengan cara yang masuk akal jika Anda memberikan -Xopsi.

* Catatan: Saya kira ada cara yang lebih baik daripada for-loop ini.

Jika semuanya gagal

Gunakan editor teks shell. vi, vim, nanoDan emacsadalah yang paling umum dan setidaknya salah satu dari mereka akan diinstal dan operasional. Dari mereka nanoadalah yang termudah dan paling jelas.

membingungkan
sumber
@coding crow: Jika Anda SSHing dari Windows, tergantung pada klien apakah itu akan berfungsi atau tidak. Beberapa klien tidak berkomunikasi dengan X11 dan dengan demikian tidak ada penerusan X - untuk beberapa meskipun hanya berfungsi dengan baik. Jika tidak berfungsi, ubah klien SSH untuk Windows atau gunakan nano, vim atau emacs seperti yang disarankan xyious dalam jawabannya.
con-f-use
Ya saya mendapat suara turun, melihatnya di profil saya dan bertanya-tanya mengapa tidak ada komentar atau apa pun. Tidak begitu penting tidak ada hubungannya dengan Anda, hanya bertanya-tanya - senang masalah Anda terpecahkan dan saya bisa sedikit membantu di sini.
con-f-use
Saya telah memodifikasi forloop sedikit .. sekarang hanya akan menampilkan alamat tampilan misalnya :0 :0.0. Jangan ragu untuk kembali jika Anda pikir itu bukan yang Anda inginkan ..
heemayl
0

Apa kata con-f-use .

Pada dasarnya Anda memiliki terminal melalui SSH dan Gedit adalah program GUI. Jawaban con-f-use akan membuatnya bekerja dari sesi klien GUI Linux.

Pilihan lainnya adalah menggunakan editor non GUI seperti nano, Vi atau banyak lainnya.

xyious
sumber