X bağlantısının SSH üzerinden iletilmesini istiyorsanız, onu hem sunucu hem de istemci tarafında etkinleştirmeniz gerekir. (Dağılımına bağlı olarak, etkin olabilir ya da varsayılan olarak devre.) Sunucu tarafında, sahip olduğundan emin olun X11Forwarding yesiçinde /etc/sshd_config(veya /etc/ssh/sshd_configveya her yerde yapılandırma dosyasıdır). İstemci tarafında, -Xseçeneği sshkomuta iletin veya içine ForwardX11yazın ~/.ssh/config.
Eğer kaçarsan ssh -X localhost, görmelisin ki $DISPLAY(muhtemelen) localhost:10.0. Kontrast :0.0, SSH ile bağlı olmadığınız zamanki değerdir. ( .0Parça atlanabilir; bu bir ekran numarasıdır, ancak birden çok ekran nadiren kullanılır.) Karşılaşmanız muhtemel iki tür X ekranı vardır:
- Yerel görüntüler, daha önce hiçbir şey olmadan
:.
- TCP, önce bir ana bilgisayar adıyla görüntülenir
:.
İle ssh -X localhost, X sunucusuna her iki ekrandan da erişebilirsiniz, ancak uygulamalar farklı bir yöntem kullanır: :NUMBERsunucuya yerel soketler ve paylaşılan hafıza HOSTNAME:NUMBERüzerinden erişir , oysa sunucuya TCP üzerinden erişir, bu da bazı uzantıları daha yavaş ve devre dışı bırakır.
Çerez olarak adlandırılan ve normalde dosyadaki sahnelerin arkasında saklanan bir X sunucusuna erişmek için bir yetkilendirme şekline ihtiyacınız olduğunu unutmayın ~/.Xauthority. Farklı bir kullanıcı hesabına erişmek için ssh kullanıyorsanız veya dağıtımınız çerezleri farklı bir dosyaya koyarsa, DISPLAY=:0bunun SSH oturumunda çalışmadığını görebilirsiniz (ancak ssh -Xsunucuda etkinleştirilmişse çalışacaktır; bulaşmak için gereken XAUTHORITYyaparken ssh -X). Bu bir problemse, ortam değişkenini ayarlamanızXAUTHORITY veya diğer kullanıcı çerezlerini edinmeniz gerekir .
Asıl sorunuzu cevaplamak için:
Yerel göstergeler, içindeki bir sokete karşılık gelir /tmp/.X11-unix.
(cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)
Uzak göstergeler 6000'in üzerindeki TCP portlarını açmaya karşılık gelir; M makinesindeki N ekran numarasına erişilmesi, M makinesindeki 6000 + N TCP bağlantı noktasına bağlanarak yapılır.
netstat -lnt | awk '
sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 {
print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000)
}'
(Bu madde işaretinin geri kalan kısmı sadece akademik ilgi alanına girmiştir.)
Başka bir makineden, nmap -p 6000-6099 host_namenormal aralıktaki açık TCP portlarını araştırmak için kullanabilirsiniz . Bugünlerde X sunucularının, özellikle geridöngü arabiriminin dışında bir TCP soketinde dinlenmesi nadirdir.
Açıkçası, başka bir uygulama genellikle X sunucuları tarafından kullanılan aralıktaki bir bağlantı noktasını kullanıyor olabilir. Hangi programın bağlantı noktasının açık olduğunu kontrol ederek bir X sunucusunun dinleyip dinlemediğini anlayabilirsiniz.
lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
Bu, belirsiz bir şey gösterirse sshd, bunun bir X sunucusu mu yoksa bir tesadüf mü olduğunu kesin olarak bilemezsiniz.
( DISPLAY=:0 yourapp & ).