当我停靠或取消停靠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
外壳程序执行操作,则将获得预期的输出。
所以我不是很明白,from调用的脚本udev
失败了。
这
—
马丁·乌丁
DISPLAY
似乎不错。我的who
显示(:0)
虽然。因此,我认为grep不会更好。
好的,
—
马丁·乌丁
DISPLAY
位于前面的bash
似乎现在可以正常工作。谢谢!
大!我
—
ish 2012年
who
有0.0
,但无论如何。既然可以了,我将添加该DISPLAY
部分作为答案。请接受。谢谢!
grep -F '(:0)'
应该是grep -F '(:0.0)'
; 也尽量坚持一个DISPLAY=:0.0
在前面/usr/bin/think-dock