यह लिनक्स के लिए विंडोज-सबसिस्टम से विशिष्ट जानकारी के साथ अन्य उत्तरों को पूरक है। स्वीकार किए जाते हैं जवाब सही है: अपने DISPLAY
चर गलत तरीके से कॉन्फ़िगर किया गया है। यह बिल्कुल स्पष्ट नहीं है, हालांकि, अकेले उस उत्तर से ऐसा क्यों है, इसलिए मैं इस उत्तर के साथ याद कर रहा हूं।
यदि आप लिनक्स के लिए साइबरविन, या विंडोज-सबसिस्टम चला रहे हैं और आपका एक्स 11 सर्वर विंडोज़-आधारित (जैसे VcXsrv
, या XMing
) है, तो यह अधिक संभावना है कि आपका एक्स 11 सर्वर टीसीपी पोर्ट (जैसे 127.0.0.1
टीसीपी पोर्ट 6000-6010
) पर सुन रहा है। डिफ़ॉल्ट यूनिक्स डोमेन सॉकेट ( /tmp/.X11-unix/X0
)। डब्ल्यूएसएल के अंदर भी यूनिक्स सॉकेट्स इस समय विंडोज पर अच्छी तरह से समर्थित नहीं हैं। लिनक्स जैसे वातावरण में कार्यक्रमों के बीच संवाद करना और विंडोज़ होस्ट पर सीधे चलने वाले प्रोग्राम भी आमतौर पर आईपी सॉकेट्स पर आसान होते हैं।
जब आप स्थानीय रूप से (अपने होस्ट के साइगविन या WSL वातावरण से) ग्राफ़िकल एप्लिकेशन चलाते हैं, और आपका DISPLAY
चर डिफ़ॉल्ट (यानी DISPLAY=:0.0
) पर सेट होता है , तो एप्लिकेशन पहले यूनिक्स सॉकेट के माध्यम से एक्स सर्वर से कनेक्ट करने का प्रयास करेंगे /tmp/.X11-unix/X0
। यह विफल हो जाएगा, लेकिन अधिकांश एप्लिकेशन तब टीसीपी कनेक्शन पर वापस आ जाएंगे localhost
, जो सर्वर तक पहुंचने में सफल होना चाहिए, यह मानते हुए कि आपका एक्स सर्वर डिफॉल्ट से कॉन्फ़िगर किया गया है।
आप पुष्टि कर सकते हैं कि यह connect()
आपके ग्राफ़िकल एप्लिकेशन के एक रन से स्ट्रेस लॉग में कॉल की तलाश में हो रहा है । आवेदन की मुख्य विंडो प्रकट होने से पहले वे आमतौर पर जल्दी होते हैं।
जब वह ssh रिमोट साइड से किसी कनेक्शन को रीडायरेक्ट कर रहा होता है, तो यह फ़ॉलबैक व्यवहार नहीं होता है, इसलिए आपको वह त्रुटि मिल रही है। sshd
वास्तव में स्थानीय पक्ष से कनेक्शन को अग्रेषित कर रहा है, लेकिन ssh क्लाइंट का स्थानीय कनेक्शन मृत-समाप्त हो जाता है क्योंकि यह यूनिक्स सॉकेट पर सर्वर तक पहुंचने में विफल रहता है। फिर आपको ENOENT
त्रुटि मिल रही है ।
ऐसे मामलों में, DISPLAY
सिंटैक्स के बजाय टीसीपी सिंटैक्स का उपयोग करने के लिए अपने चर को बदलना :0.0
, समस्या को ठीक कर सकता है:
DISPLAY=127.0.0.1:0 ssh remote some-gui-application
अन्य उत्तरों की तरह, आप अपने शेल प्रांप्ट से उस चर को अंतःक्रियात्मक रूप से निर्यात कर सकते हैं:
$ export DISPLAY=127.0.0.1:0
...
$ ssh remote some-gui-application
आप इस सेटिंग को अपने लॉगिन शेल प्रोफ़ाइल आरंभीकरण स्क्रिप्ट (जैसे ~/.bash_profile
) में उस पंक्ति को जोड़कर अधिक स्थायी रूप से संग्रहीत कर सकते हैं ।
नोट: कुछ गोले लॉगिन और गैर-लॉगिन सत्रों के लिए एक अलग आरंभीकरण स्क्रिप्ट है। उदाहरण के लिए, बैश के साथ आप उस लाइन को नॉन-लॉगिन स्क्रिप्ट पर लिख सकते हैं, अर्थात ~/.bashrc
इसके बजाय ~/.bash_profile
। यदि आप करते हैं, तो सावधान रहें कि ssh द्वारा निर्धारित किसी भी कस्टम मूल्य को ओवरराइड न करें। यदि आप अपने मेजबान में ssh के माध्यम से पहले hopping और फिर दूसरे होस्ट में फिर से hopping (इस प्रकार अपने X11 अग्रेषण घोंसले के शिकार) हो जाएगा तो यह मामला होगा।
strace -fo /tmp/trace ssh....
यह जांचने के लिए उपयोग करूंगा कि यह उस यूनिक्स डोमेन सॉकेट को जोड़ने का प्रयास करता है।