Bagaimana cara memperbaiki kesalahan "tidak dapat membuka tampilan" saat membuka program X setelah ssh'ing dengan penerusan X11 diaktifkan?

111

Setelah meluncurkan aplikasi X11 (XQuartz 2.3.6, xorg-server 1.4.2-apple56) di Mac saya (OS X 10.6.8), membuka terminal di X11 dan berjalan xhost +, saya kemudian ssh -Yke Ubuntu 10,04 VM (berjalan di VMware Fusi). Ketika saya menjalankan gedit .bashrc(misalnya), saya mendapatkan:

(gedit:9510): Gtk-WARNING **: cannot open display: 

set | grep DISPLAY tidak mengembalikan apa pun.

Tetapi jika saya ssh -Yke mesin Ubuntu 11.04 saya, gedit .bashrcberfungsi. echo $DISPLAYmengembalikan "localhost: 10.0".

Saya mencoba export DISPLAY=localhost:10.0sambil sshed ke VM saya dan kemudian berjalan gedit .bashrc, tetapi saya mendapatkan:

(gedit:9625): Gtk-WARNING **: cannot open display: localhost:10.0

Apa yang bisa berbeda dalam konfigurasi dua perbedaan mesin Ubuntu yang akan menjelaskan mengapa satu bekerja dan yang lainnya tidak?

Pembaruan: Seperti yang disarankan oleh Zoredache dalam komentar di bawah, saya berlari sudo apt-get install xbase-clients, tetapi saya terus memiliki masalah yang sama.

Daryl Spitzer
sumber
2
Apakah kotak Ubuntu 10,04 memiliki alat yang tepat untuk X11 diinstal? Instal xbase-klien, jika belum diinstal.
Zoredache
Saya menginstalnya tetapi masih memiliki masalah yang sama. (Lihat di atas.)
Daryl Spitzer
3
Mungkin mencoba meneruskan opsi -vv ke ssh ketika Anda terhubung, ini mencetak pesan debug verbal, Anda akan melihat beberapa komentar tentang penerusan X11 saat menghubungkan.
Zoredache
1
@ jcrawfordor Anda telah memeriksa X11Forwardingdi ubuntu, dan bahwa Anda telah xbase-clientsmenginstal dan bahwa Anda dapat memulai Xapps pada mac di terminal tempat Anda membuat koneksi ssh. (Periksa yang $DISPLAYdiatur pada terminal Anda menjalankan ssh dari .
Manwe
1
Dalam kasus saya itu hanya masalah meningkatkan versi XQuartz dari MacOS
Waruna Ranasinghe

Jawaban:

47

Periksa sshd_config server (biasanya /etc/ssh/sshd_config), dan pastikan opsi X11Forwarding diaktifkan dengan garis

X11Forwarding yes

Jika X11Forwarding tidak ditentukan, defaultnya adalah tidak pada mesin Debian yang saya miliki untuk memeriksa.

DerfK
sumber
4
Saya menemukan setelah menyiapkan VM Ubuntu lain, bahwa saya perlu menginstal xbase-klien dan mengaktifkan X11Forwarding. Perbarui jawaban Anda untuk memasukkan keduanya dan saya akan menerimanya.
Daryl Spitzer
1
Menarik. Setidaknya pada instalasi baru 10,04 yang saya lakukan pagi ini X11Forwarding diaktifkan secara default. Orang-orang Ubuntu harus bermain-main dengan default lagi.
Zoredache
28
@DerfK, dalam sistem saya "X11Forwarding yes" sudah ada saya masih mendapatkan kesalahan, (gedit: 8381): Gtk-WARNING **: tidak dapat membuka tampilan: dalam kasus seperti itu
AJ
1
Pada Debian Anda mungkin harus menginstal paket xauth, lalu masuk kembali.
comte
$ ssh username @ hostname -Y ini bekerja untuk saya
MarcoZen
60

Dari xhost +: Cara Memperbaiki Kesalahan "Tidak Dapat Membuka Layar" Saat Meluncurkan GUI di Remote Server :

Jawaban : Anda dapat memperbaiki kesalahan "tidak dapat membuka tampilan" dengan mengikuti prosedur xhost yang disebutkan dalam artikel ini.

Izinkan klien untuk terhubung dari host mana pun menggunakan xhost +

Jalankan perintah berikut untuk menonaktifkan kontrol akses, yang dengannya Anda dapat mengizinkan klien untuk terhubung dari host mana pun.

$ xhost +

kontrol akses dinonaktifkan, klien dapat terhubung dari host mana pun

Aktifkan penerusan X11

Saat melakukan ssh, gunakan opsi -X untuk mengaktifkan penerusan X11.

$ ssh username@hostname -X

Aktifkan penerusan X11 yang tepercaya, dengan menggunakan opsi -Y,

$ ssh username@hostname -Y

Buka aplikasi GUI di host itu

Setelah membuka koneksi ssh ke host jarak jauh seperti yang dijelaskan di atas, Anda dapat membuka aplikasi GUI yang akan membukanya tanpa masalah.

Jika Anda masih mendapatkan kesalahan "tidak dapat menampilkan tampilan", atur variabel DISPLAY seperti yang ditunjukkan di bawah ini.

$ export DISPLAY='IP:0.0'

Catatan: IP adalah IP workstation lokal tempat Anda ingin aplikasi GUI ditampilkan.

harrymc
sumber
11
+1 untuk Catatan bahwa IP = adalah IP workstation lokal tempat Anda ingin mendapatkan GUI
PCoder
3
Bagi mereka yang memiliki masalah serupa pada OS X, pastikan juga Anda menginstal XQuartz, jika tidak, tidak ada perbaikan yang membantu. (Pertanyaan OP menunjukkan ia memiliki XQuartz, jadi ini lebih merupakan catatan tambahan bagi mereka yang memiliki masalah yang sama seperti saya)
Dolan Antenucci
3
Perhatikan bahwa menjalankan xhost +sangat tidak aman dan tidak boleh digunakan! Seperti yang disebutkan Stefan Rogin, penyerang kemudian dapat dari host terhubung ke XSession Anda, membaca semua yang Anda ketik, atau bahkan mengubah layar yang Anda lihat.
jirislav
yang terakhir export Display=IP:0.0melakukannya untuk saya
javadba
18

Saya mengalami masalah ini saat masuk ke VM Ubuntu dari Mac OS X juga - sepertinya tidak seperti 'localhost' di variabel tampilan karena beberapa alasan. Jadi atur IP secara manual, seperti yang disarankan harrymc:

export DISPLAY="127.0.0.1:10.0"

Maka program X11 harus baik-baik saja. Sepertinya tidak perlu untuk memberi tahu OS bahwa localhost dan 127.0.0.1 adalah setara, tetapi setidaknya berfungsi.

putar
sumber
Ini berhasil untuk saya. Tahu mengapa localhost tidak berfungsi?
Alex
2
BINGO! Saya telah terjebak oleh masalah itu untuk beberapa waktu ... Saya terhubung dengan SSH dan tidak dapat meluncurkan program GTK (X11 polos, seperti "xeyes", bekerja). DISPLAY benar. Sebenarnya, resolusi "localhost" tidak! Jika saya atur secara manual DISPLAY = 127.0.0.1: 10.0, atau DISPLAY = :: 1: 10.0 tidak berfungsi. Mengedit / etc / hosts tampaknya tidak berpengaruh; dan DNS dikonfigurasikan dengan benar ("gali localhost" laporkan laporan 127.0.0.1 dan :: 1) Jadi, sepertinya ada bug dalam apa pun yang dilakukan resolusi DNS untuk koneksi X11 di Gtk (gtk? gdk? glib? other?).
Pablo Saratxaga
1
Pada instalasi Debian untuk Beagle Bone Black, / etc / host tidak disetel untuk dibaca oleh siapa pun kecuali root. Ini menyebabkan gejala yang dilaporkan di sini. Membuat / etc / hosts dapat dibaca oleh semua, dan itu berfungsi dengan baik.
Daniel
13

Saya punya masalah dengan server CentOS KVM saya, saya kehilangan program "xauth".

Joril
sumber
1
Ini membantu saya keluar pada instalasi minimal debian saya, terima kasih banyak!
binOr
9

Jika Anda memiliki masalah ini setelah beberapa saat ketika berjalan dengan -Xarg. atau hanya ForwardX11di / etc / ssh / ssh_config, kemudian jalankan $ ssh username@hostname -Y, untuk mengaktifkan penerusan X11 yang tepercaya , tidak tahu penyebab pastinya, tetapi saya menduga -Xbeberapa fitur akan kedaluwarsa setelah beberapa waktu, mungkin untuk meningkatkan keamanan.

Inilah yang saya temukan online:

Jika Anda menggunakan ssh -X remotemachine, mesin remote diperlakukan sebagai klien yang tidak terpercaya. Jadi klien lokal Anda mengirim perintah ke mesin jarak jauh dan menerima output grafis. Jika perintah Anda melanggar beberapa pengaturan keamanan Anda akan menerima kesalahan sebagai gantinya.

Tetapi jika Anda menggunakan ssh -Y remotemachine, mesin remote diperlakukan sebagai klien tepercaya. Opsi terakhir ini dapat membuka masalah keamanan. Karena klien grafis (X11) lainnya dapat mengendus data dari mesin jarak jauh (membuat tangkapan layar, melakukan keylogging dan hal-hal buruk lainnya) dan bahkan dimungkinkan untuk mengubah data tersebut.

Jika Anda ingin tahu lebih banyak tentang hal-hal itu saya sarankan membaca halaman manual Xsecurity atau spesifikasi ekstensi X Security. Selanjutnya Anda dapat memeriksa opsi ForwardX11 dan ForwardX11Trusted di / etc / ssh / ssh_config Anda.

sumber:

Stefan Rogin
sumber
6

Baru Diuji Di Mac Saya, Sistem Lain Mungkin OK :

  1. Izinkan klien untuk terhubung dari host mana pun menggunakan xhost +

    $ xhost +

  2. Anda harus memiliki lingkungan yang mendukung tampilan X11

    [Sistem Mac] Instal X11 untuk mac https://www.xquartz.org/

  3. Anda harus membiarkan ssh-server Anda meneruskan x11 ditampilkan

    perbarui /etc/ssh/sshd_configdan atur X11Forwarding yes, kemudian mulai ulang server ssh Anda

  4. Anda harus membiarkan sesi ssh Anda maju x11 ditampilkan dengan -Xparameter

    $ ssh -X user @ ip

  5. Bagaimana cara membuka aplikasi X11 di PyCharm?
    • buka sesi ssh yang mendukung tampilan X11 (ingat untuk menjaga sesi ini)
    • jalankan echo $DISPLAYdi sesi ssh itu
    • setel DISPLAYvariabel lingkungan untuk PyCharm Anda
Warna
sumber
1
Mengapa ini berbeda atau mengapa harus lebih disukai daripada jawaban yang lain? Tolong jelaskan jika Anda bisa dengan edit sederhana . Kamu bisa melakukannya!!
Pimp Juice,
@ McDonald's Terima kasih, diperbarui dengan detail lebih lanjut.
Warna
4

Saat menjalankan UXTERM atau XTERM hanya masalah

export $DISPLAY 

Variabel akan ada di sana. Kemudian atur dan ekspor.

Oracle2066
sumber
4

Saya harus memasukkan /etc/ssh/sshd_configyang berikut ini:

X11UseLocalhost no

Alih-alih mengaturnya "ya". Aneh jika standarnya adalah "TIDAK" Pengguna menggunakan dempul dengan XMing di bawah Windows. Saya menggunakan ssh langsung di atas Fedora. Kadang-kadang itu mulai memberi kita

error can't open display localhost

Reboot server biasanya akan memperbaikinya tetapi ini bodoh. Lakukan di atas, restart layanan sshdpada server dan koneksi baru presto bekerja dengan baik lagi.

Luigi
sumber
2

Saya juga punya masalah dengan Solaris 10 dan menemukan bahwa pendengar tidak diatur.

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop  options/tcp_listen = true
Doug Somers
sumber
1

Pada CentOS 6.5, saya tiba-tiba kehilangan akses X-program jarak jauh setelah bermain-main dengan / etc / hosts. Gejala yang sama dari variabel $ DISPLAY kosong (tidak ada pengaturan bantuan / ekspor secara manual).

Entri 127.0.0.1 yang menunjuk ke nama host aktual diperlukan; sebenarnya urutannya juga relevan (taruh terakhir & tidak akan berhasil ...)

[root@poseidon /etc]$ cat hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
::1     localhost6.localdomain6 localhost6
127.0.0.1 poseidon.mycampus.edu poseidon
1XX.XXX.XXX.208 poseidon.mycampus.edu poseidon

Setelah memperbaikinya, xeyes, xclock, dan mainan tes X lainnya berfungsi lagi, oleh karena itu manajer virt saya yang dibutuhkan juga kembali online.

David Ramirez
sumber
1

Saya baru saja menemukan cegukan yang bagus dalam pengaturan saya yang mencegah penerusan x: Firewall saya memblokir semua koneksi dari localhost, sehingga mencegah terowongan untuk dijangkau

Pelle
sumber
1

Jika Anda kebetulan menggunakan Konsole cukup beralih ke emulator terminal lain seperti Terminal Xfce dan coba lagi menggunakan root.

Oliver Dechant
sumber
1

buka terminal $ ssh username @ hostname -X

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

export DISPLAY = "127.0.0.1:10.0" semua harus bekerja.

Kenny Gichuhi
sumber
Terima kasih. Bekerja untuk kasus khusus saya ketika DISPLAY='localhost:10.0'tidak berfungsi.
xpt
1

Pengaturan ini berfungsi untuk saya:

Lokal (Cygwin 64 bit di Windows 10) DISPLAY=:0

Server (Amazon EC2 RHEL 7.6) DISPLAY=:10.0

Pengaturan ini ditemukan dengan mengklik "menu aplikasi X pada: 0" di taskbar dan memilih System Tools> Terminal

qwr
sumber
0

Setelah banyak frustrasi saya menemukan bahwa entri untuk nama host server di file / etc / host-nya salah.

iceburn_pt
sumber