ฉันมีกฎต่อไปนี้เรียกสคริปต์ของฉันเมื่อฉันเชื่อมต่อหรือเลิกเชื่อมต่อ ThinkPad ของฉัน:
# /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ล้มเหลว
นั่น
—
Martin Ueding
DISPLAYดูดีนะ whoแสดงของฉัน(:0)แม้ว่า ดังนั้นฉันไม่คิดว่า grep น่าจะดีกว่านี้
โอเคกับ
—
Martin Ueding
DISPLAYด้านหน้าbashดูเหมือนว่าจะทำงานตอนนี้ ขอบคุณ!
ที่ดี! ฉัน
—
ish
whoมี0.0แต่อย่างไรก็ตาม เนื่องจากมันใช้งานได้ฉันจะเพิ่มDISPLAYส่วนหนึ่งเป็นคำตอบ โปรดยอมรับมัน ขอบคุณ!
grep -F '(:0)'ควรจะgrep -F '(:0.0)'; ลองติดที่DISPLAY=:0.0ด้านหน้าของ/usr/bin/think-dock