![DPMS,盖子关闭时保持屏幕关闭](https://linux22.com/image/1222336/DPMS%EF%BC%8C%E7%9B%96%E5%AD%90%E5%85%B3%E9%97%AD%E6%97%B6%E4%BF%9D%E6%8C%81%E5%B1%8F%E5%B9%95%E5%85%B3%E9%97%AD.png)
我有一台运行 Linux 的笔记本电脑。在我的 xorg 配置中,我设置了 DPMS,以便在发生多个事件时屏幕自动关闭。除此之外,我还将以下脚本与 ACPI 盖子打开/关闭事件绑定在一起:
#!/bin/sh
for i in $(pidof X); do
CMD=$(ps --no-heading $i)
XAUTH="$(echo $CMD | sed -n 's/.*-auth \(.*\)/\1/p')"
DISPLAY="$(echo $CMD | sed -n 's/.* \(:[0-9]\) .*/\1/p')"
# turn the display off or back on
export XAUTHORITY=$XAUTH
/usr/bin/xset -display $DISPLAY dpms force $1
done
基本上,这个脚本接受一个参数(“开”或“关”),然后遍历我所有正在运行的 X 会话并打开或关闭监视器。
这是我的问题。当我合上笔记本电脑的盖子时,屏幕会按预期关闭,但如果发生鼠标事件(例如如果有东西撞到桌子...),即使屏幕已合上,屏幕也会重新打开(我可以通过笔记本电脑的侧面看到灯光)。
如果盖子关闭,有没有办法防止屏幕在鼠标事件期间打开?
答案1
在文件中添加以下行/etc/acpi/lid.sh
:
#open
screenon
chvt 7
#close
chvt 12
screenoff
当盖子关闭时,这将切换到控制台,并避免 X 检测鼠标移动。
答案2
你也许可以用 xrandr 做一些神奇的事情;例如
xrandr——输出LVDS——关闭
将其关闭,然后
xrandr——输出LVDS——自动
将其恢复。将 LVDS 替换为笔记本电脑屏幕输出的名称。
这样做的缺点是,如果出现问题,可能很难通过电源循环让屏幕恢复正常。
答案3
按照禁用鼠标的想法,您可以使用 xinput 以更有选择性和更安全的方式进行操作:
# open
DISPLAY=:0.0 xinput set-int-prop 12 "Device Enabled" 8 1
# close
DISPLAY=:0.0 xinput set-int-prop 12 "Device Enabled" 8 0
您可以使用以下方式找到 ID(此处为 12):xinput --list
答案4
阻止 X 发出活动信号并在接收到活动事件时禁用 DPMS 似乎有点困难。
但是,既然您已经进入了脚本领域,那么在盖子关闭时禁用 USB 设备怎么样?只需删除模块或暂停 USB 设备即可实现效果。类似这样的操作可能会有效:
echo suspend > /sys/bus/usb/devices/usb1/power/level
如果此方法有效,则当盖子关闭时,你的 X 将不会收到任何事件。