ACPI 打开/关闭盖子脚本 - xrandr 不执行,但其他命令执行

ACPI 打开/关闭盖子脚本 - xrandr 不执行,但其他命令执行

请参阅最后的解决方案。

我用过编写脚本的指南,该脚本在我打开或关闭笔记本电脑盖时激活。我的设置是一台笔记本电脑显示器和一台外接显示器,它们可以很好地协同工作。

基本上(前 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

解决方案

ubuntu 社区的信息似乎不完整。您需要再执行一步才能工作。根据,您还需要创建 /etc/acpi/events/lm_lid 并输入:

event=button/lid.*
action=/etc/acpi/lid.sh

现在对我来说一切正常。我已经更新了 Ubuntu 指南,因此您可以放心地按照指南操作这里

答案2

您需要引用su要运行的命令,因此它是一个字符串:

DISPLAY=:0.0 su myname -c 'xrandr --output eDP1 --off'

相关内容