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