जब मेरा डॉक या अन-डॉक मेरी थिंकपैड है, तो मुझे निम्नलिखित नियम मेरी स्क्रिप्ट कहते हैं:
# /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फेल कहा जाता है।
जो
—
मार्टिन उडिंग
DISPLAYअच्छा लगता है। मेरा whoप्रदर्शन (:0)हालांकि इसलिए मुझे नहीं लगता कि इस तरह से grep बेहतर होगा।
ठीक है,
—
मार्टिन उडिंग
DISPLAYसामने के साथ bash, यह अब काम करने लगता है। धन्यवाद!
महान! मेरा
—
ish
whoथा 0.0, लेकिन वैसे भी। जब से यह काम किया है, मैं DISPLAYएक जवाब के रूप में हिस्सा जोड़ देंगे ; कृपया इसे मान ले। धन्यवाद!
grep -F '(:0)'होना चाहिएgrep -F '(:0.0)'; यह भीDISPLAY=:0.0सामने की कोशिश करो/usr/bin/think-dock