请参阅最后的解决方案。
我用过这编写脚本的指南,该脚本在我打开或关闭笔记本电脑盖时激活。我的设置是一台笔记本电脑显示器和一台外接显示器,它们可以很好地协同工作。
基本上(前 3 步一切顺利,第 4 步开始出现混乱):
1)我创建了〜/ export_x_info有关权限问题的文件并在启动时运行它,其中包含:
# Export the dbus session address on startup so it can be used by any other environment
sleep 5
touch $HOME/.Xdbus
chmod 600 $HOME/.Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.Xdbus
# Export XAUTHORITY value on startup so it can be used by cron
env | grep XAUTHORITY >> $HOME/.Xdbus
echo 'export XAUTHORITY' >> $HOME/.Xdbus
2)我创建了 /etc/acpi/lid.sh,指向我的主目录中的实际脚本,包含以下两行:
#!/bin/bash
/home/myname/scripts/lid_event
3)在lid_event上我输入了以下内容:
grep -q closed /proc/acpi/button/lid/LID/state
if [ $? = 0 ]
then
/home/myname/scripts/close;
else
/home/myname/scripts/open;
fi
到目前为止,一切都符合预期。我检查了“/proc/acpi/button/lid/LID/state”文件,并根据盖子是打开还是关闭而发生变化。我创建的所有文件都是可执行的,因此没有问题。
4)在我的“关闭”脚本中,我有这个(“打开”脚本类似,所以不需要提及它):
#This runs so that root can run the following command under the user's environment
source /home/myname/.Xdbus
#When laptop lid closes, close laptop screen.
DISPLAY=:0.0 su myname -c xrandr --output eDP1 --off
当我合上盖子时,我希望笔记本电脑屏幕关闭,只显示 VGA 屏幕。当在终端上手动执行上述命令或手动执行此脚本时,上述命令效果很好,但当涉及 ACPI 时,它不会执行!
现在,奇怪的是,如果我在上面的脚本上放置一个简单的命令,如“touch ~/file”,它就能完美执行!
这似乎是 xrandr 的一个特定问题。我怀疑可能存在一些未解决的权限问题,但我找不到解决方案。
答案1
答案2
您需要引用su
要运行的命令,因此它是一个字符串:
DISPLAY=:0.0 su myname -c 'xrandr --output eDP1 --off'