XDG_RUNTIME_DIR क्या है?


14

जब मैं कमांड लाइन से एविसन को खोलने की कोशिश कर रहा था , यह मुझे एक त्रुटि दे रहा है

neo@Muhammad:~$ sudo evince

No protocol specified

** (evince:4164): WARNING **: Could not open X display
No protocol specified
error: XDG_RUNTIME_DIR not set in the environment.
Cannot parse arguments: Cannot open display:

इस समस्या का निवारण कैसे करें?


1
अपने ऑपरेटिंग सिस्टम के बारे में अधिक बताएं।
डीके बोस

जवाबों:


31

पहली चीजें पहले: XDG_RUNTIME_DIR

अपने पहले प्रश्न का उत्तर देने के लिए, "XDG_RUNTIME_DIR क्या है?" , यह एक पर्यावरण चर है जिसे आप लॉग इन करते समय स्वचालित रूप से सेट किया जाता है। यह आपके द्वारा चलाए जाने वाले किसी भी प्रोग्राम को बताता है कि उपयोगकर्ता-विशिष्ट निर्देशिका कहाँ है जिसमें यह छोटी अस्थायी फ़ाइलों को संग्रहीत कर सकता है। ध्यान दें कि (8)XDG_RUNTIME_DIR द्वारा सेट किया गया है , इसलिए यह वास्तव में एक्स से संबंधित नहीं है (ग्राफिक रूप से प्रोग्राम चला रहा है), जो कि आपको होने वाली समस्या है।pam_systemd

कैसे करें निवारण

आपका दूसरा सवाल, "इस समस्या का निवारण कैसे करें?" बहुत अच्छा है। इसका मतलब है कि आप में रुचि रखते हैं न केवल क्या ठीक है, लेकिन यह भी कैसे अपने दम पर यह पता लगा। शुरू करने के लिए, पहले त्रुटि संदेशों को पहले देखें। विशेष रूप से, के लिए खोज No protocol specifiedया WARNING **: Could not open X display, आपको यह दिखाना चाहिए कि समस्या एक्स (जिसे एक्स विंडिंग सिस्टम भी कहा जाता है ) के साथ है जो कि आपकी स्क्रीन पर ग्राफिकल प्रोग्राम दिखाए जाते हैं। यह जानकर कि आपके मन में कई समस्या निवारण प्रश्न उठने चाहिए।

एक्स प्रदर्शन

आपका अगला प्रश्न यह हो सकता है कि यह "एक्स डिस्प्ले" क्या है जो ईवियन नहीं खोल सकता है? एक "डिस्प्ले" आपकी स्क्रीन का पता है। [*] कोई भी प्रोग्राम जो आपकी स्क्रीन पर लिखना चाहता है, उसे पता जानना होगा। DISPLAY पर्यावरण चर की जाँच करके आप देख सकते हैं कि आपका एक्स डिस्प्ले क्या है:

echo $DISPLAY

और आप यह जांच सकते हैं sudoकि टाइप करने से आपका प्रदर्शन कैसा लगता है:

sudo -s
echo $DISPLAY
exit

यदि यह कुछ भी नहीं दिखाता है, तो यह समस्या है। (नीचे फिक्स देखें)।

XAUTHORITY

लेकिन, क्या होगा अगर वह समस्या नहीं है और DISPLAYसही तरीके से सेट की गई है sudo? तब आप आश्चर्यचकित हो सकते हैं, क्या एक्स के पास कुछ प्रकार की अनुमतियां हैं जो अन्य उपयोगकर्ताओं को मेरे प्रदर्शन पर लिखने से रोकती हैं? अगर आपको लगता है कि आप सही होंगे, तो एक्स के दो मुख्य प्राधिकरण तरीके हैं: xauthऔर xhost। आज सबसे अधिक इस्तेमाल किया जाने वाला एक xauth(1) है जो XAUTHORITYपर्यावरण चर का उपयोग करता है । फिर, आइए देखें कि क्या यह ठीक से सेट है sudo:

echo $XAUTHORITY
sudo -s
echo $XAUTHORITY
exit

यदि XAUTHORITYआप के लिए अपने घर निर्देशिका में एक फ़ाइल की ओर इशारा कर रहा है, लेकिन जब आप चलाते हैं sudoतो यह खाली होता है , तो यह समस्या है।

FIX: पर्यावरण चर को बचाएं

तो, क्या तय है? यदि या तो DISPLAYया XAUTHORITYपर्यावरण चर को बचाया नहीं जा रहा है sudo, तो आप विकल्प का उपयोग करके पर्यावरण को संरक्षित करने के लिए sudo(8) बता सकते हैं -E, जैसे:

sudo -E evince

एक बेहतर तरीका: env_keep

आप अच्छी तरह से पूछ सकते हैं, रुको, अगर -Eसब कुछ जादुई रूप से काम करता है, तो यह डिफ़ॉल्ट के लिए क्यों नहीं है sudo? इसका उत्तर यह है कि यह एक संभावित सुरक्षा खतरा है। पर्यावरण चर, कार्यक्रमों के काम करने के तरीके को प्रभावित करते हैं और आप नहीं चाहते कि उन सभी को उपयोगकर्ता खाते से रूट पर निर्यात किया जाए। "सही" जिस तरह से यह करने के लिए लाइन को जोड़ने के लिए है Defaults env_keep += "DISPLAY XAUTHORITY"करने के लिए sudoers(5) का उपयोग कर फ़ाइल visudo(8) । आप जाँच कर सकते हैं कि कौन से पर्यावरण चर सूदो को चलाने से बचाते हैं:

sudo sudo -V

(हाँ, आप sudoदो बार टाइप करें )। मैं लाइन को डिफ़ॉल्ट sudoers फ़ाइल ( /etc/sudoers) में नहीं डालने की सलाह देता हूं , लेकिन एक स्थानीय फ़ाइल में जो आपके सिस्टम को अपग्रेड करते समय अधिलेखित नहीं होगी। आप ऐसा कर सकते हैं:

sudo visudo -f /etc/sudoers.d/local 

लेकिन रुको, अगर उपरोक्त में से कोई भी काम न करे तो क्या होगा?

मुझे लगता है कि यह एक पूरी तरह से उत्तर है, लेकिन अगर आपको अभी भी परेशानी हो रही है, तो एक और बात है जो मैं सुझाऊंगा। आप स्थानीय होस्ट (जैसे आपकी मशीन) पर एक विशिष्ट उपयोगकर्ता तक पहुँच प्रदान करने के लिए xhost(1) का उपयोग कर सकते हैं ,

xhost si:localuser:root

इस मामले में, हम rootउपयोगकर्ता नाम के रूप में निर्दिष्ट कर रहे हैं , क्योंकि यह वह खाता है जो sudoकार्यक्रमों को चलाता है।


[*] : प्रश्न: मुझे केवल एक स्क्रीन मिली है, तो एक एक्स डिस्प्ले को "एड्रेस" की आवश्यकता क्यों है? एक: यह इसलिए है क्योंकि एक्स न केवल आपकी मशीन पर, बल्कि इंटरनेट पर भी काम कर सकता है। एक्स के साथ , अपनी मशीन पर प्रोग्राम चलाना आसान है जो अन्य इंटरनेट होस्ट और अन्य होस्ट पर प्रोग्राम दिखाते हैं जो आपकी स्क्रीन पर दिखाई देते हैं (यह मानते हुए कि आप उन्हें अनुमति देते हैं)।


विस्तृत जवाब के लिए धन्यवाद। मुझे यकीन है कि आपके उपयोगकर्ता के लिए आपके उत्तर में कम से कम कुछ नया है। (मेरे लिए: एक्स को एक विशिष्ट उपयोगकर्ता तक पहुंच प्रदान करने के लिए कैसे, जो xhost +सार्वभौमिक पहुंच की अनुमति देने के लिए जारी करने से बेहतर है ।)
ड्रमफायर

3

XDG_RUNTIME_DIRआपके X विंडोज संदर्भ में एक पर्यावरण चर सेट है, ताकि प्रोग्राम चीजों को पा सकें। आपने ( neo) ग्राफिक्स संदर्भ स्थापित किया है।

के evinceरूप में चलाने की कोशिश करके root, आपने उस स्थिति में प्रवेश किया है जहां एक उपयोगकर्ता ( root) किसी अन्य उपयोगकर्ता ( neo) प्रदर्शन का उपयोग करने की कोशिश कर रहा है । इसे बैड थिंग माना जाता है।

यदि आप तय करते हैं कि आपको एक आलेखीय संपादक के रूप में चलना होगा root, पढ़ें man gksudo और उसका उपयोग करें gksudo


दिलचस्प टिप्पणी। क्या आपको पता है कि मैं ऐसा कुछ कैसे कर सकता हूं? journalctl -b -p err | wl-copyयह रिपोर्ट करता है Failed to connect to a Wayland serverजो समझ में आता है, लेकिन उपयोगकर्ता POV से गूंगा लगता है।
mh-cbon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.