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 yes
içinde /etc/sshd_config
(veya /etc/ssh/sshd_config
veya her yerde yapılandırma dosyasıdır). İstemci tarafında, -X
seçeneği ssh
komuta iletin veya içine ForwardX11
yazı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. ( .0
Parç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: :NUMBER
sunucuya 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=:0
bunun SSH oturumunda çalışmadığını görebilirsiniz (ancak ssh -X
sunucuda etkinleştirilmişse çalışacaktır; bulaşmak için gereken XAUTHORITY
yaparken 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_name
normal 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 & )
.