SSH के माध्यम से लॉग इन करने पर मैं दूरस्थ सर्वर पर ग्राफ़िकल एप्लिकेशन कैसे चला सकता हूं?


14

मैं geditWindows पर SSH टर्मिनल से चलाने की कोशिश कर रहा हूं , Ubuntu 12.04 सर्वर चलाने वाले Amazon EC2 उदाहरण से जुड़ा हुआ है और मुझे यह त्रुटि मिल रही है:

Cannot open display:

मैं इसे कैसे ठीक करूं?

जवाबों:


14

चूंकि आप अपनी तरफ से विंडोज का उपयोग कर रहे हैं, तो आपको एक एसएसएच-क्लाइंट की आवश्यकता होगी जो आपकी स्क्रीन पर दूर से सर्वर से चित्रमय एप्लिकेशन को चलाने के लिए विंडोज पर एक स्थानीय एक्स सर्वर चलाता है।

अनुभव से, मैं मुफ्त MobaXTerm की सिफारिश करूंगा जिसमें यह कार्यक्षमता अंतर्निहित है। कृपया इसे डाउनलोड करें और इसे आज़माएं:

यहां छवि विवरण दर्ज करें

यदि आपको कोई त्रुटि मिलती है, तो ऐसा इसलिए है क्योंकि कभी-कभी एक्स-फॉरवर्डिंग की अनुमति देने के लिए एक न्यूनतम सर्वर छवि स्थापित नहीं की जा सकती है। उस मामले में, कृपया टिप्पणी करें और मैं इसे हल करने में आपकी मदद करूंगा; मैंने उबंटू / डेबियन चलाने वाले बहुत से न्यूनतम वीपीएस के साथ ऐसा किया है।


17

तो आप अपने होम पीसी से कनेक्ट कर रहे हैं (चलो इसे अपनी मशीन कहते हैं ) एक सर्वर (चलो इसे सर्वर कहते हैं ) ssh के माध्यम से ? आप अपनी मशीन के माध्यम से सर्वर पर एक ग्राफिकल विंडो के साथ एक कार्यक्रम शुरू करना चाहते हैं? अगर वह सभी माध्यमों से सही है, तो पढ़ें।

चलो कार्यक्रम को शुरू करने के लिए कहते हैं geditलेकिन प्रक्रिया सभी के लिए समान है। इस पर निर्भर करते हुए कि आप ग्राफ़िकल विंडो को सही हेडिंग पर छोड़ना चाहते हैं।

अपनी मशीन की स्क्रीन पर विंडो

यदि आप अपने दूरस्थ मशीन पर gedit की विंडो देखना और उसका उपयोग करना चाहते हैं, लेकिन सर्वर पर शुरू करते हैं, तो आप अपने शेल सत्र को इस रूप में देखना चाहेंगे:

user@remote-machine:~$ ssh -X user@server
Last login: Tue Aug 14 13:47:04 2012 from clientXX
*******************************************************************************
M O T D (Message Of The Day)
*******************************************************************************
user@server:~$ gedit .bash_aliases 

** (gedit:7851): WARNING **: Could not load theme icon gtk-home: Icon 'gtk-home' not present in theme

(gedit:7851): Gtk-WARNING **: Attempting to store changes 

चेतावनियों को बुरा न मानें, वे सामान्य हैं - जीएडिट विंडो आपकी रिमोट मशीन की स्क्रीन पर पॉप अप हो जाएगी जैसे कि यह सर्वर पर दिखेगा। चाल "-X" -ओपियन का उपयोग करना है ssh -Xजिसमें एक्स-टनलिंग सक्षम करता है और DISPLAYचर को सही सेट करता है।

यह मानता है कि आप एक SSH क्लाइंट का उपयोग कर रहे हैं जो X11 का समर्थन करता है और आपके सर्वर में एक X- सर्वर चल रहा है (कुछ GUIs की आवश्यकता के बिना एक X- सर्वर नहीं चलता है)। विशेष रूप से खिड़कियों पर यह कोई मुद्दा सबसे खिड़कियों के रूप में टर्मिनल कार्यक्रमों एक्स के रूप में की जरूरत नहीं है हो सकता है izx कहा MobaXTerm खिड़कियां एक एक्स सर्वर हालांकि है कि के लिए कई SSH ग्राहकों में से एक है।

X11 की कमी वाले सर्वर के लिए, आपको इसे स्थापित करना होगा।

सर्वर की स्क्रीन पर

आप इस तरह gedit कॉल करके अपने सर्वर की स्क्रीन पर एक उदाहरण शुरू कर सकते हैं:

ssh user@server
DISPLAY=:0.0 gedit

आपको :0.0सही एक्स-स्क्रीन पर इसे प्राप्त करने के बजाय सही मूल्य को प्रतिस्थापित करना होगा (केवल महत्वपूर्ण अगर कई स्क्रीन आपके सर्वर से जुड़े हैं या यदि यह इसके कॉन्फ़िगरेशन में कुछ अजीब है)।

यहाँ काम नहीं करने के लिए सबसे सामान्य परिदृश्य यह होगा कि यदि सर्वर में X11- सर्वर की कमी है, लेकिन इससे कोई मॉनिटर जुड़ा नहीं होगा या कोई ग्राफिकल यूजर इंटरफेस नहीं होगा और आप इसे नहीं पढ़ रहे होंगे: D।

सिद्धांत का एक सा

मैं इस पर कोई विशेषज्ञ हूँ, लेकिन जिस तरह से मैं यह काम करता है लगता है, एक व्यक्ति के कंप्यूटर से जुड़ा प्रत्येक मॉनिटर है कि प्रत्येक भौतिक स्क्रीन, यानी के रूप में एक चल नंबर प्राप्त करता है 0.0, 1.0, 2.0, ...

यह नंबर X-Window-System aka X11 द्वारा दिया गया है। यह एक नेटवर्क और बुनियादी ग्राफिकल इंटरफ़ेस प्रदान करने के लिए एक परत है जो यूनिटी, गनोम, केडीई और जैसे पर बना सकता है।

आप देख सकते हैं कि किसी दी गई मशीन में कितने डिस्प्ले हैं और मशीन में कौन-कौन सी संख्याएँ चल रही हैं for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done, यह सवाल मशीन में चल रहा है । * फिर प्रत्येक कंप्यूटर जो अपनी स्क्रीन को उपलब्ध करने के लिए कॉन्फ़िगर किया गया है और एक एक्स सर्वर चलाता है एक होस्टनाम है। आप अपने DISPLAYचर को तदनुसार सेट करके उसी नेटवर्क में किसी भी मशीन से एक होस्ट स्क्रीन का उपयोग कर सकते हैं DISPLAY=hostname:0.0। यदि आप -Xविकल्प प्रदान करते हैं तो Ssh आपके लिए यह समझदारी से करता है।

* नोट: मुझे लगता है कि इसके लिए बेहतर तरीका है लूप।

यदि सभी अन्य विफल होते हैं

शेल टेक्स्ट एडिटर का उपयोग करें। vi, vim, nanoऔर emacsसबसे आम हैं और उनमें से कम से कम एक स्थापित और संचालन किया जाएगा। उनमें nanoसे सबसे आसान और सबसे आत्म व्याख्यात्मक है।


@ कोडिंग कौवा: यदि आप विंडोज से एसएसएच कर रहे हैं तो यह क्लाइंट पर निर्भर करता है कि वह काम करेगा या नहीं। कुछ ग्राहक X11 के साथ संवाद नहीं करते हैं और इस प्रकार कोई भी X- फ़ॉरवर्डिंग नहीं करते हैं - कुछ के लिए हालांकि यह ठीक काम करता है। यदि Windows के लिए SSH क्लाइंट काम नहीं कर रहा है या अपने उत्तर में सुझाए अनुसार xyious के रूप में नैनो, विम या एमएसीएस का उपयोग करता है।
con-f-use

हां मुझे एक डाउन वोट मिला, मैंने इसे अपने प्रोफाइल में देखा और सोचा कि कोई टिप्पणी या कुछ भी क्यों नहीं है। इतना महत्वपूर्ण आपके साथ नहीं था, बस आश्चर्य था - खुशी है कि आपकी समस्या हल हो गई है और मैं यहां थोड़ी मदद कर सकता हूं।
चोर-च-उपयोग

मैंने forलूप को थोड़ा संशोधित किया है। अब यह केवल डिस्प्ले एड्रेस दिखाएगा :0 :0.0। बेझिझक वापस लौटें अगर आपको लगता है कि आपको वह नहीं चाहिए जो आप चाहते हैं ..
heemayl

0

क्या con-f-use ने कहा

मूल रूप से आपके पास SSH के माध्यम से एक टर्मिनल है और Gedit एक GUI कार्यक्रम है। con-f-use का उत्तर इसे Linux GUI क्लाइंट सेशन से काम करेगा।

अन्य विकल्प नैनो, वीआई या कई अन्य जैसे गैर जीयूआई संपादक का उपयोग करना होगा।

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