त्रुटि `कोई प्रोटोकॉल निर्दिष्ट नहीं` जब ssh के माध्यम से दूरस्थ मशीन से चल रहा है


10

मेरे पास एक स्क्रिप्ट है, बस अपने ग्राफिकल (जीयूआई) एप्लिकेशन को चलाने के लिए, नीचे के रूप में।

#cat gui.sh
#!/bin/bash 
./gui -display 127.0.0.1:0.0    

जब मैं इसे स्थानीय मशीन से ./gui.shचलाता हूं ( ) यह पूरी तरह से ठीक चलता है। लेकिन जब मैं इसे ssh के माध्यम से दूरस्थ मशीन से चलाने की कोशिश कर रहा हूं, तो मुझे निम्नलिखित त्रुटि मिली।

[root@localhost]# ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui.sh""   
No protocol specified  
gdm: cannot connect to X server 192.168.3.77:0.0   
[root@localhost]#    

मुझे नहीं पता, यह कौन सा प्रोटोकॉल है या मैं कुछ भी याद कर रहा हूं? मैंने बिना स्क्रिप्ट [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""], आवेदन शुरू करके सीधे प्रयास किया , लेकिन परिणाम समान है। मैंने विभिन्न संयोजनों की कोशिश की है ssh -Y, ssh -fYऔर अधिक लेकिन परिणाम समान है!
दूसरे मेरे आवेदन के लिए, एक शर्त है कि, हमें पहले उस निर्देशिका में जाना होगा जहां कार्यक्रम स्थित है।
कोई समाधान?

जवाबों:


5

विकल्प का अर्थ -display 127.0.0.1:0.0उस guiकार्यक्रम पर निर्भर करता है , लेकिन यह बहुत अधिक संभावना है कि इसका अर्थ है "एक्स प्रदर्शन 127.0.0.1 में 0..0 पर प्रदर्शन"। यह पहला स्थानीय एक्स डिस्प्ले है, जिसे टीसीपी पर एक्सेस किया गया है। यह दो कारणों से लगभग निश्चित रूप से गलत है। सबसे पहले, स्थानीय एक्स डिस्प्ले होना चाहिए :0, न 127.0.0.1:0कि क्योंकि आईपी पते सहित ट्रैफिक स्थानीय पहुंच के बजाय टीसीपी से गुजरने का कारण बनता है। टीसीपी के माध्यम से जाने से यह निर्भर नहीं हो सकता है कि एक्स सर्वर टीसीपी कनेक्शन स्वीकार करता है या नहीं। यहां तक ​​कि अगर यह करता है, तो आप उन अनुकूलन को खो देते हैं जो स्थानीय प्रदर्शित होते हैं।

उपयोग करने के लिए प्रदर्शन आमतौर पर DISPLAYपर्यावरण चर द्वारा इंगित किया जाता है, और यह चर स्वचालित रूप से सही ढंग से सेट किया जाता है। (आमतौर पर, अगर DISPLAYगलत मान है, यह है क्योंकि आप इसके साथ खिलवाड़ किया गया है। मुख्य अपवाद का प्रयोग होता है screenया tmux।)

आपका प्रोग्राम संभवतः DISPLAYपर्यावरण चर का मूल्य देखता है , क्योंकि यह xlib कॉल के साथ स्वचालित रूप से होता है। तो आपको बस फोन करना चाहिए ./gui, आपकी स्क्रिप्ट कुछ भी उपयोगी नहीं है। यदि आपका कार्यक्रम -displayतर्क पर जोर देता है, तो इसे पर्यावरण चर का उपयोग करें:

./gui -display "$DISPLAY"

4

ssh -Yऔर ssh -Xएक अच्छी शुरुआत होनी चाहिए लेकिन क्या आपने अपने एक्स सर्वर को भी आगे बढ़ाया है?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

अन्यथा यह काम नहीं करेगा।

जाँच करने के लिए एक और बात यह है कि प्रदर्शन चर यह इस तरह से कुछ दिखाना चाहिए:

$ echo $DISPLAY
$ localhost:10.0

इसके बाद चलाया गया था ssh -Y। एक ही चर खाली है अगर मैं बिना ssh -Yया -X

Ssh के मैन पेज के बीच अंतर -Xऔर -Yपढ़ने के लिए।


3

यह वीडियो बताता है कि चरण दर चरण त्रुटि चरण को कैसे हल किया जाए। यदि आप देखना नहीं चाहते हैं तो नीचे दिए गए पाठ का अनुसरण करें:

कोई भी प्रोटोकॉल निर्दिष्ट त्रुटि इंगित नहीं करती है कि "उपयोगकर्ता को GUI एप्लिकेशन लॉन्च करने का तरीका नहीं पता है" और "उपयोगकर्ता के पास GUI एप्लिकेशन लॉन्च करने की अनुमति नहीं है"। वीडियो में GUI एप्लिकेशन है dbca

इस वीडियो का मुख्य भाग कमांड को चलाने में है, xhost +जो दूरस्थ सिस्टम से GUI को दूरस्थ रूप से प्रदर्शित करने के लिए उपयोगकर्ता की अनुमति को स्थानीय प्रणाली में देता है।


6
xhost +आपके डिस्प्ले से कनेक्ट करने के लिए किसी को भी एक्सेस देगा। मैं सुझाऊँगाxhost +local:[hostname or ip]
vimdude

यह और यह मेरे लिए त्रुटि तय है। +1
युग सिंह

1

डेबियन जेसी, भी जोड़ें:

export XAUTHORITY=/.Xauthority

xhost +मेरी समस्या तय की (ग्राहक पक्ष पर)
खतरे '

मदद की, धन्यवाद! मेरी XAUTHORITY थी /tmp/xauth-1000-_0लेकिन दो अतिरिक्त X सत्र शुरू करने के बाद जो फ़ाइल गायब हो गई थी - केवल तीसरी ही बनी रही। सभी विंडो के लिए समस्या को ठीक करने के लिए मैंने इसे इसके साथ बहाल किया:ln -s ~/.Xauthority /tmp/xauth-1000-_0
joeytwiddle

0

मैं उसी मुद्दे से मारा गया था जिसे मैंने DISPLAY पर्यावरण चर से बदलकर हल किया था:

export DISPLAY=:0.0

सेवा

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