Ini melengkapi jawaban lain dengan informasi spesifik dari Windows-Subsystem untuk Linux. The jawaban yang diterima adalah benar: Anda DISPLAY
variabel tidak dikonfigurasi dengan benar. Namun, tidak terlalu jelas mengapa hanya dari jawaban itu saja, jadi saya memperbaiki dengan jawaban ini.
Jika Anda menjalankan cygwin, atau Windows-Subsystem untuk Linux, dan server X11 Anda berbasis windows (misalnya VcXsrv
, atau XMing
), kemungkinan server X11 Anda mendengarkan pada port TCP (seperti 127.0.0.1
pada port TCP 6000-6010
) daripada pada soket domain Unix default ( /tmp/.X11-unix/X0
). Soket Unix tidak didukung dengan baik pada Windows saat ini, bahkan di dalam WSL. Berkomunikasi antara program-program di lingkungan seperti Linux dan program yang berjalan langsung pada host windows juga umumnya lebih mudah daripada soket IP.
Ketika Anda menjalankan aplikasi grafis secara lokal (yaitu dari lingkungan Cygwin atau WSL dari host Anda), dan DISPLAY
variabel Anda diatur ke default (yaitu DISPLAY=:0.0
), aplikasi pertama-tama akan mencoba untuk terhubung ke server X melalui soket Unix /tmp/.X11-unix/X0
. Ini akan gagal, tetapi sebagian besar aplikasi kemudian akan mundur ke koneksi TCP aktif localhost
, yang seharusnya berhasil mencapai server, dengan asumsi server X Anda dikonfigurasi dengan default.
Anda dapat mengonfirmasi bahwa ini terjadi dengan mencari connect()
panggilan di strace log dari serangkaian aplikasi grafis Anda. Itu umumnya akan terjadi sejak dini, sebelum jendela utama aplikasi muncul.
Perilaku mundur itu tidak terjadi ketika ssh mengarahkan koneksi dari sisi jarak jauh, sehingga Anda mendapatkan kesalahan itu. sshd
memang meneruskan koneksi ke sisi lokal, tetapi koneksi lokal klien ssh menemui jalan buntu karena gagal menjangkau server melalui soket Unix. Anda kemudian mendapatkan ENOENT
kesalahan.
Dalam kasus seperti itu, mengubah DISPLAY
variabel Anda untuk menggunakan sintaks TCP bukan :0.0
sintaks, dapat memperbaiki masalah:
DISPLAY=127.0.0.1:0 ssh remote some-gui-application
Seperti jawaban lain yang disebutkan, Anda juga dapat mengekspor variabel itu secara interaktif dari prompt shell Anda:
$ export DISPLAY=127.0.0.1:0
...
$ ssh remote some-gui-application
Anda juga dapat menyimpan pengaturan ini secara lebih permanen dengan menambahkan baris itu ke skrip inisialisasi profil shell login Anda (mis ~/.bash_profile
.).
Catatan: Beberapa shell memiliki skrip inisialisasi yang berbeda untuk sesi login dan non-login. Misalnya, dengan bash Anda bisa menulis baris itu ke skrip non-login, yaitu ~/.bashrc
alih-alih ~/.bash_profile
. Jika Anda melakukannya, berhati-hatilah untuk tidak menimpa nilai kustom apa pun yang mungkin telah ditetapkan oleh ssh. Itu akan menjadi kasus jika Anda melompat pertama ke host Anda melalui ssh dan kemudian melompat lagi ke host lain (sehingga bersarang forwarding X11 Anda).
strace -fo /tmp/trace ssh....
untuk memeriksa apakah ia mencoba menghubungkan soket domain Unix itu.