"कनेक्ट /tmp/.X11-unix/X0: ऐसी कोई फ़ाइल या निर्देशिका" के साथ मेरा X11 अग्रेषण प्रयास विफल क्यों होता है?


33

मेरी स्थानीय मशीन पर, मैं चलाता हूं:

ssh -X me@remotemachine.com

(पूर्णता के लिए, मैंने निम्नलिखित सभी का उपयोग करके परीक्षण किया है-समान परिणाम वाले -Y)।

जैसी कि उम्मीद थी, यह remotemachine.com ठीक है, और सभी को अच्छी तरह से दिखाई देता है। अगर मैं फिर भी xcalc चलाने का प्रयास करता हूं, तो मुझे मिलता है:

 connect /tmp/.X11-unix/X0: No such file or directory
 Error: Can't open display: localhost:10.0

परंतु,

$ ls -la /tmp/.X11-unix/
total 36
drwxrwxrwt 2 root root  4096 2012-11-23 09:29 .
drwxrwxrwt 8 root root 32768 2012-11-29 08:22 ..
srwxrwxrwx 1 root root     0 2012-11-23 09:29 X0

इतना ही नहीं /tmp/.X11-unix/X0 मौजूद है, इसमें सार्वभौमिक r / w / x अनुमतियाँ हैं!

मैंने पहले बिना किसी समस्या के x-अग्रेषण का उपयोग किया है, हालांकि कुछ समय में नहीं ...

संदर्भ के लिए सर्वर पर uname -a:

Linux machinename 2.6.32-25-generic #45-Ubuntu SMP Sat Oct 16 19:52:42 UTC 2010 x86_64 GNU/Linux

सफलता के बिना अब कुछ घंटों के लिए वेब पर चारों ओर खोज रहा है। एक ही समस्या के अन्य उल्लेख, लेकिन कोई समाधान नहीं।


ध्यान दें कि यह स्थानीय मशीन पर फ़ाइल है जिसे आपको यहां जांचने की आवश्यकता है, रिमोट नहीं। मैं strace -fo /tmp/trace ssh....यह जांचने के लिए उपयोग करूंगा कि यह उस यूनिक्स डोमेन सॉकेट को जोड़ने का प्रयास करता है।
स्टीफन चेज़लस

आह! यह हो सकता है। अजीब बात है, मेरी स्थानीय मशीन में /tmp/.X11-unix/ निर्देशिका नहीं है।
जॉन डौकेट

जवाबों:


24

यदि आपके पास एक एक्स सर्वर चल रहा है और DISPLAYपर्यावरण चर सेट है :0, तो यह बताता है कि यूनिक्स डोमेन सॉकेट का उपयोग करके एक्स सर्वर से कनेक्ट करने के लिए एप्लिकेशन जो आम तौर पर लिनक्स में पाया जाता है /tmp/.X11-unix/X0(हालांकि हाल ही में लिनक्स पर सार नाम स्थान के बारे में नीचे देखें ) ।

आप मशीन के लिए ssh जब remotemachine , sshdपर remotemachine को सेट प्रदर्शन localhost:10(उदाहरण के लिए) है, जो इस समय का मतलब है कि एक्स कनेक्शन मशीन स्थानीय होस्ट के बंदरगाह 6010 को टीसीपी से अधिक किया जा करते रहे हैं। रेमोटेमाचिन पर sshd वहां पर कनेक्शन के लिए सुनता है और ssh क्लाइंट के लिए किसी भी आने वाले कनेक्शन को आगे बढ़ाता है। Ssh क्लाइंट तब /tmp/.X11-unix/X0आपके एक्स सर्वर से संपर्क करने के लिए (स्थानीय छोर पर, रिमोट से नहीं) कनेक्ट करने की कोशिश करता है ।

अब, हो सकता है कि आपके पास कोई एक्स सर्वर न चल रहा हो (क्या आप मैक पर हैं?) या शायद यूनिक्स डोमेन सॉकेट को /tmp/.X11-unix में नहीं मिलेगा, जिसका अर्थ है कि ssh को संकलन में ठीक से कॉन्फ़िगर नहीं किया गया है पहर।

यूनिक्स सॉकेट के लिए उचित पथ क्या है, यह जानने के लिए, आप strace -e connect xlogoसामान्य स्थानीय अनुप्रयोग क्या करते हैं, यह देखने के लिए अपने स्थानीय मशीन पर (या अपने सिस्टम पर समतुल्य) प्रयास कर सकते हैं।

netstat -x | grep X कोई सुराग भी दे सकता है।

रिकॉर्ड, एक लिनक्स डेबियन पर खरखरा मशीन यहाँ, Xorg सुनता दोनों पर के लिए /tmp/.X11-unix/X0फाइल सिस्टम में और /tmp/.X11-unix/X0पर सार नाम स्थान (आम तौर पर लिखा @/tmp/.X11-unix/X0)। से strace, X11 अनुप्रयोग अब डिफ़ॉल्ट रूप से उस सार नाम स्थान का उपयोग करने लगते हैं, जो बताता है कि क्यों वे अभी भी काम करते हैं यदि उन्हें /tmp/.X11-unixहटा दिया जाता है, जबकि sshवह सार नाम स्थान का उपयोग नहीं करता है।


1
या जाँचें lsof -p <PID of your local X server>कि आपको /some/thing/Xnफ़ाइल कहाँ मिलनी चाहिए , जो nआपका DISPLAYनंबर है।
14

धन्यवाद, यह काफी मददगार था। किसी तरह मेरे /tmp/.X11-unix/X0 फ़ाइल को हटा दिया गया था, हालांकि अभी भी एक एक्स सर्वर चल रहा था। एक त्वरित रिबूट से लगता है कि समस्या का समाधान हो गया है। संभवतः कुछ अपडेट के कारण मैंने कुछ समय पहले किया था।
जॉन डकेट

6
DISPLAY चर को ": 0.0" से "लोकलहोस्ट: 0.0" में बदलने से लगता है कि मेरे लिए चाल चली गई है, कम से कम सिग्विन से लिनक्स को जोड़ने।
m0j0

एफडब्ल्यूआईडब्ल्यू, मुझे मेजबान से startxwin(बाद में apt-cyg install xinit) भागना पड़ा cygwinक्योंकि मैं स्थानीय विंडोज को दूरस्थ यूनिक्स से जोड़ रहा हूं
जोनाथन

40

मुझे Cygwin और Xming के साथ एक ही समस्या थी, एक दूरस्थ लिनक्स सर्वर से जुड़ना।

मेरा $ DISPLAY वैरिएबल सिगविन में केवल ": 0.0" था, और हालांकि यह स्थानीय रूप से काम करता है, लेकिन यह रिमोट ssh कमांड के साथ काम नहीं करता था।

चर को "लोकलहोस्ट: 0.0" में बदलने से समस्या ठीक हो गई।

export DISPLAY=localhost:0.0

एक बार मैंने ऐसा किया, मेरी आज्ञा ने काम किया:

ssh -Yf user@host gvim somefile.c

5
लिनक्स के लिए विंडोज सेवाओं का उपयोग करते हुए भी मेरे लिए यह समस्या थी।
लैपो

1
आपने किस सर्वर पर export ...कमांड चलाया ? 1) स्थानीय मशीन 2) सर्वर
abalter

1
@abalter इसने मेरे लिए इसे स्थानीय मशीन पर चलाने का काम किया
त्रैलस्टन

3
मैंने Cygwin ssh + VcXsrv के साथ 2 घंटे की डिबगिंग समस्या बिताई क्योंकि मैंने सेट किया था DISPLAY=:0 ssh -Y $host। इसे DISPLAY=localhost:0जादुई रूप से हल की गई समस्या में बदलना ।
गवेंको

1
शानदार उत्तर, अभी भी विंडोज़ में ubuntu सबसिस्टम चलाने में सहायक है
टॉम स्विफ्टी

6

यह लिनक्स के लिए विंडोज-सबसिस्टम से विशिष्ट जानकारी के साथ अन्य उत्तरों को पूरक है। स्वीकार किए जाते हैं जवाब सही है: अपने 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 अग्रेषण घोंसले के शिकार) हो जाएगा तो यह मामला होगा।


3

अपने प्रदर्शन मेजबान होने के लिए होता है MacOS , आप यह सुनिश्चित कर लें XQuartz चल रहा है।

यह त्रुटि संदेश आपको बता रहा है कि ssh सुरंग काम कर रही है, लेकिन यह पता नहीं लगा सकती है कि सुरंग के आपकी तरफ X सर्वर से कैसे कनेक्ट किया जाए ।

अच्छे पुराने दिनों में, मैक ओएस एक्स आपके लिए XQuartz शुरू करता था, लेकिन हमने टर्मिनल के मैकओएस संस्करण में इस अच्छी छोटी सुविधा को स्पष्ट रूप से छोड़ दिया है ।


अनुवर्ती: Invalid MIT-MAGIC-COOKIE-1 keyxterm Xt error: Can't open display: localhost:10.0मतलब "आपको बाहर निकलने की जरूरत है और SSH वापस XQuartz शुरू करने के बाद" FWIW ...
rogerdpack

1

मुझे बस यही समस्या थी। भ्रमित करने वाली बात यह है कि आपको रिमोट मशीन पर नो-फाइल त्रुटि मिलती है , लेकिन वास्तव में यह फाइल लोकल (डिस्प्ले) मशीन पर गायब है ।

बस क्या होगा देखने के लिए, मैंने मैन्युअल रूप से इस तरह की डिस्प्ले मशीन पर लापता फ़ाइल (पांडो, वास्तव में) बनाई है:

mkfifo /tmp/.X11-unix/X0

फिर रिमोट मशीन में ssh'ed, और लो और निहारना, X11 ठीक जुड़ा।

मुझे नहीं पता कि यह प्रासंगिक है या नहीं, लेकिन मेरी डिस्प्ले मशीन लिनक्स नहीं है, यह साइबरविन और वीएक्सएक्सआरएसवी के साथ विंडोज है। (रिमोट मशीन लिनक्स है)


4
/tmp/.X11-unix/X0एक यूनिक्स डोमेन सॉकेट है, एफआईएफओ नहीं
सैमवेन

0

मैं लिनक्स के लिए विंडोज सबसिस्टम का उपयोग करके इस समस्या में भाग गया । मुद्दा यह है कि मेरे पास ग्राहक पर एक जीयूआई स्थापित नहीं है, इस धारणा के कारण कि यह एक विंडोज मशीन है, मेरे पास एक जीयूआई है।

यदि आपके पास GUI है, तो परीक्षण करने के xclockलिए क्लाइंट पर निष्पादित करें। यदि आपको त्रुटि मिलती है Error: Can't open display: :0तो आपको विंडोज के लिए GUI प्रोग्राम इंस्टॉल करना होगा। मैंने Xserver का उपयोग किया ।

जब आपके पास GUI स्थापित हो जाए, तो निम्न कमांड आज़माएं:

export DISPLAY=:0
xclock

अगर एक घड़ी ऊपर आती है, तो सफलता!

अब सर्वर में ssh'ing का प्रयास करें, फिर चल रहा है xclock। क्या आपको अभी भी त्रुटि संदेश मिल रहे हैं /tmp/.X11-unix/X0 कनेक्ट करें: ऐसी कोई फ़ाइल या निर्देशिका त्रुटि नहीं: प्रदर्शन नहीं खोल सकती: स्थानीय होस्ट: 10.0 ? ऐसा इसलिए है क्योंकि सर्वर GUI प्रदर्शित करने के लिए खुद से कनेक्ट करने का प्रयास कर रहा है। इसके बजाय, आप चाहते हैं कि DISPLAY वैरिएबल एक पते पर सेट हो जहां सर्वर आपके कंप्यूटर को प्राप्त कर सके। तो अगर यह एक लैन पर है, तो आप बस अपने कंप्यूटर के नाम में डाल देंगे। यदि आप WAN पर किसी सर्वर से कनेक्ट कर रहे हैं, तो आपको अपने राउटर के बाहरी IP को निर्दिष्ट करने और उचित पोर्ट को अग्रेषित करने की आवश्यकता है।

लैन: export DISPLAY=ComputerName:0
वान:export DISPLAY=257.257.257.257:0


"एक्स फ़ॉरवर्डिंग" का अर्थ है "रिमोट मशीन (आपके मामले में), स्थानीय मशीन (क्लाइंट, आपके मामले में) पर चलने वाले एप्लिकेशन से एक्स प्रोटोकॉल को टनल करना", तो बेशक आपको एक्स सर्वर चलाने की आवश्यकता है (और नहीं स्थानीय मशीन पर "कोई भी जीयूआई कार्यक्रम")। विंडोज अपने आप में एक्स प्रोटोकॉल को नहीं समझता है, भले ही "आपके पास जीयूआई हो"।
dirkt

-2

यदि यह ठीक काम कर रहा था और बिना किसी उचित कारण के काम करना बंद कर दिया, तो संभवतः यह पृष्ठभूमि में चल रहा एक अनियंत्रित एक्स उदाहरण हो सकता है। कृपया कार्य प्रबंधक का उपयोग करके उसे बंद करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.