जब मेरा डॉक या अन-डॉक मेरी थिंकपैड है, तो मुझे निम्नलिखित नियम मेरी स्क्रिप्ट कहते हैं:
# /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