xrandr रूट के रूप में डिस्प्ले नहीं मिल सकते हैं


9

जब मेरा डॉक या अन-डॉक मेरी थिंकपैड है, तो मुझे निम्नलिखित नियम मेरी स्क्रिप्ट कहते हैं:

# /lib/udev/rules.d/81-thinkpad-dock.rules
KERNEL=="dock.0", ATTR{docked}=="0", RUN+="/usr/bin/think-dock-hook off"
KERNEL=="dock.0", ATTR{docked}=="1", RUN+="/usr/bin/think-dock-hook on"

यह स्क्रिप्ट है जिसे कहा जाएगा:

# /usr/bin/think-dock-hook
# Find the user who is currently logged in on the primary screen.
user="$(who -u | grep -F '(:0)' | head -n 1 | awk '{print $1}')"
su -c "bash -x /usr/bin/think-dock $setto" "$user" >> /root/think-dock.log 2>&1 &

और फिर जो स्क्रिप्ट कहा जाता है, उसके साथ कुछ करता है xrandr

बात यह है कि मैं think-dock onअपने उपयोगकर्ता के रूप में चला सकता हूं ( mu) और यह काम करता है। मैं sudo -iदौड़ सकता हूं think-dock-hook onऔर यह काम भी कर सकता है। लेकिन जब मैंने इसे udevचलाने दिया, तो इसे निम्न त्रुटि मिली xrandr:

# output of bash -x think-dock on
+ xrandr --output LVDS1 --auto
Can't open display

अब अगर मैं xrandrअपने sudo -iशेल से कॉल करता हूं , तो मुझे मिलता है:

No protocol specified
No protocol specified
Can't open display :0

हालांकि, अगर मैं su -c xrandr muअपने sudo -iशेल से करता हूं, तो मुझे अपेक्षित आउटपुट मिलता है।

इसलिए मुझे वास्तव में समझ नहीं आ रहा है, स्क्रिप्ट को udevफेल कहा जाता है।


1
grep -F '(:0)'होना चाहिए grep -F '(:0.0)'; यह भी DISPLAY=:0.0सामने की कोशिश करो/usr/bin/think-dock
ish

जो DISPLAYअच्छा लगता है। मेरा whoप्रदर्शन (:0)हालांकि इसलिए मुझे नहीं लगता कि इस तरह से grep बेहतर होगा।
मार्टिन उडिंग

ठीक है, DISPLAYसामने के साथ bash, यह अब काम करने लगता है। धन्यवाद!
मार्टिन उडिंग

महान! मेरा whoथा 0.0, लेकिन वैसे भी। जब से यह काम किया है, मैं DISPLAYएक जवाब के रूप में हिस्सा जोड़ देंगे ; कृपया इसे मान ले। धन्यवाद!
ish

जवाबों:


7
  • xrandr को यह जानना होगा कि आप किस डिस्प्ले के बारे में बात कर रहे हैं, आमतौर पर DISPLAYपर्यावरण चर के माध्यम से
  • root(जो udev चलता है) का कोई डिफ़ॉल्ट DISPLAYसेट नहीं है; भले ही उसने / उसने किया हो, su -cडिफ़ॉल्ट रूप से पर्यावरण को संरक्षित नहीं करता है
  • तो इसे स्पष्ट रूप से काटने के लिए पास करें, और यह आपकी समस्या को हल करना चाहिए, जैसे:

    su -c "DISPLAY=:0.0 bash -x /usr/bin/think-dock $setto" "$user"
    
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.