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