ฉันมีกฎต่อไปนี้เรียกสคริปต์ของฉันเมื่อฉันเชื่อมต่อหรือเลิกเชื่อมต่อ 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