Bu, diğer cevapları Linux için Windows Subsystem'in özel bilgileriyle tamamlıyor. Kabul edilen cevap doğru: DISPLAY
değişkeniniz yanlış yapılandırılmış. Ancak tam olarak belli değil, neden bu cevabın tek başına bu durumda olduğu, bu yüzden bu cevabı düzeltiyorum.
Linux için cygwin veya Windows-Subsystem kullanıyorsanız ve X11 sunucunuz windows tabanlıysa (örn VcXsrv
. Veya XMing
), X11 sunucunuzun bir TCP portunda ( 127.0.0.1
TCP portlarında olduğu gibi) dinlemesi daha muhtemeldir 6000-6010
. varsayılan Unix alan soketi ( /tmp/.X11-unix/X0
). Unix soketleri, Windows'ta bu noktada WSL dahilinde bile iyi bir şekilde desteklenmemektedir. Linux benzeri ortamdaki programlar ile doğrudan Windows ana bilgisayarında çalışan programlar arasında iletişim kurmak, genellikle IP soketleri üzerinden daha kolaydır.
Grafik uygulamaları yerel olarak çalıştırdığınızda (örneğin, ana makinenizin Cygwin veya WSL ortamından) ve DISPLAY
değişkeniniz varsayılana (yani DISPLAY=:0.0
) ayarlandığında , uygulamalar ilk önce Unix soketi üzerinden X sunucusuna bağlanmaya çalışır /tmp/.X11-unix/X0
. Bu başarısız olur, ancak çoğu uygulama, localhost
X sunucunuzun varsayılan ayarlarla yapılandırıldığı varsayılarak, sunucuya ulaşmada başarılı olması gereken bir TCP bağlantısına geri döner.
Bunun connect()
bir grafiksel uygulamanızın strace loglarındaki çağrıları arayarak bunun olduğunu doğrulayabilirsiniz . Bunlar genellikle uygulamanın ana penceresi görünmeden önce daha erken olur.
Bu geri dönüş davranışı ssh uzak taraftan bir bağlantıyı yönlendirirken olmaz, bu yüzden bu hatayı alıyorsunuz. sshd
gerçekten bağlantıyı yerel tarafa iletiyor, ancak ssh istemcisinin yerel bağlantısı, sunucuya Unix soketi üzerinden ulaşamadığı için sona eriyor. Daha sonra ENOENT
hatayı alıyorsunuz .
Bu gibi durumlarda, DISPLAY
değişkeni sözdizimi yerine TCP sözdizimini kullanmak üzere değiştirmek :0.0
sorunu çözebilir:
DISPLAY=127.0.0.1:0 ssh remote some-gui-application
Bahsedilen diğer cevaplar gibi, bu değişkeni kabuk isteminizden etkileşimli olarak da aktarabilirsiniz:
$ export DISPLAY=127.0.0.1:0
...
$ ssh remote some-gui-application
Bu ayarı ayrıca oturum açma kabuğu profil başlatma komut dosyasına o satırı ekleyerek de daha kalıcı olarak saklayabilirsiniz ~/.bash_profile
.
Not: Bazı kabuklarda, oturum açma ve oturum açmayan oturumlar için farklı bir başlatma komut dosyası bulunur. Örneğin, bash ile bu satırı giriş yapılmayan komut dosyasına (örneğin ~/.bashrc
yerine) yazabilirsiniz ~/.bash_profile
. Bunu yaparsanız, ssh tarafından ayarlanmış olabilecek herhangi bir özel değeri geçersiz kılmamaya dikkat edin. Bu, ilk önce ssh ile ana bilgisayarınıza atlayıp ardından başka bir ana bilgisayara atlayıp (X11'inizi yönlendirme içine yerleştirirseniz) durum böyle olacaktır.
strace -fo /tmp/trace ssh....
Unix alan soketine bağlanmaya çalışıp çalışmadığını kontrol etmek için kullanırdım .