यदि आप चाहते हैं कि SSH पर X कनेक्शन आगे बढ़ाया जाए, तो आपको इसे सर्वर साइड और क्लाइंट साइड दोनों पर सक्षम करना होगा। (वितरण के आधार पर, यह सक्षम हो सकता है या डिफ़ॉल्ट रूप से अक्षम।) सर्वर साइड पर, सुनिश्चित करें कि आपके पास बनाने X11Forwarding yes
में /etc/sshd_config
(या /etc/ssh/sshd_config
या जहां विन्यास फाइल है)। क्लाइंट की तरफ, कमांड-X
को विकल्प पास करें , या अपने में डालें ।ssh
ForwardX11
~/.ssh/config
यदि आप दौड़ते हैं ssh -X localhost
, तो आपको यह देखना चाहिए कि $DISPLAY
(शायद) localhost:10.0
। इसके विपरीत :0.0
, जो कि वह मूल्य है, जब आप SSH से जुड़े नहीं होते हैं। ( .0
भाग छोड़ा जा सकता है; यह एक स्क्रीन नंबर है, लेकिन कई स्क्रीन का उपयोग शायद ही कभी किया जाता है।) एक्स डिस्प्ले के दो रूप हैं जिनसे आपको कभी भी सामना होने की संभावना है:
- स्थानीय प्रदर्शन, पहले कुछ भी नहीं है
:
।
- से पहले एक होस्टनाम के साथ, टीसीपी प्रदर्शित करता है
:
।
इसके साथ ssh -X localhost
, आप एक्स सर्वर को दोनों डिस्प्ले के माध्यम से एक्सेस कर सकते हैं, लेकिन एप्लिकेशन एक अलग विधि का उपयोग करेंगे: :NUMBER
सर्वर को स्थानीय सॉकेट और साझा मेमोरी के माध्यम से HOSTNAME:NUMBER
एक्सेस करता है , जबकि टीसीपी पर सर्वर का उपयोग करता है, जो धीमा है और कुछ एक्सटेंशन को निष्क्रिय कर देता है।
ध्यान दें कि आपको एक एक्स सर्वर तक पहुंचने के लिए प्राधिकरण के एक रूप की आवश्यकता होती है, जिसे कुकी कहा जाता है और आमतौर पर फ़ाइल में पर्दे के पीछे संग्रहीत किया जाता है ~/.Xauthority
। यदि आप किसी भिन्न उपयोगकर्ता खाते तक पहुँचने के लिए ssh का उपयोग कर रहे हैं, या यदि आपका वितरण कुकीज़ को अलग फ़ाइल में रखता है, तो आप पा सकते हैं कि DISPLAY=:0
यह SSH सत्र के भीतर काम नहीं करता है (लेकिन ssh -X
, यदि यह सर्वर में सक्षम है, तो आप कभी नहीं। XAUTHORITY
जब कर ssh -X
) के साथ गड़बड़ करने की जरूरत है । यदि यह समस्या है, तो आपको पर्यावरण चर सेट करनेXAUTHORITY
या अन्य उपयोगकर्ता की कुकी प्राप्त करने की आवश्यकता है ।
अपने वास्तविक प्रश्न का उत्तर देने के लिए:
स्थानीय डिस्प्ले एक सॉकेट के अनुरूप होता है /tmp/.X11-unix
।
(cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)
रिमोट प्रदर्शित करता है 6000 से ऊपर टीसीपी पोर्ट खोलने के लिए; मशीन M पर डिस्प्ले नंबर N तक पहुँचने पर मशीन M से टीसीपी पोर्ट 6000 + N से जुड़कर किया जाता है। मशीन M से ही:
netstat -lnt | awk '
sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 {
print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000)
}'
(इस बुलेट प्वाइंट के बाकी हिस्से केवल शैक्षणिक हित के हैं।)
किसी अन्य मशीन से, आप nmap -p 6000-6099 host_name
सामान्य सीमा में खुले टीसीपी पोर्ट की जांच करने के लिए उपयोग कर सकते हैं । यह आजकल दुर्लभ है कि एक्स सर्वरों को टीसीपी सॉकेट पर सुनना पड़ता है, खासकर लूपबैक इंटरफेस के बाहर।
कड़ाई से बोलते हुए, एक अन्य एप्लिकेशन आमतौर पर एक्स सर्वर द्वारा उपयोग की जाने वाली सीमा में एक पोर्ट का उपयोग कर सकता है। आप बता सकते हैं कि क्या X सर्वर चेक करके सुन रहा है कि किस प्रोग्राम में पोर्ट ओपन है।
lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
अगर वह कुछ अस्पष्ट दिखाता है sshd
, तो यह सुनिश्चित करने का कोई तरीका नहीं है कि यह एक्स सर्वर है या संयोग।
( DISPLAY=:0 yourapp & )
।