一些背景知识:我想将包装脚本用于我在台式机上也在笔记本电脑上使用的i3lock。
因此,正如标题所述,我可以使用
xset dpms 2
在外壳中,它会执行应做的事情,但是当我在脚本中使用它时,例如
#!/bin/sh
revert() {
xset dpms 0
}
trap revert INT
xset dpms 2
i3lock "$@"
revert
它不会骗人。
通过bash -x
我得到了输出
+ trap revert INT
+ xset dpms 2
+ i3lock
+ revert
+ xset dpms 0
我不确定是什么问题。当我在第一行中放置#!/bin/bash
而不是#!/bin/sh
时是相同的。
答案 0 :(得分:1)
我只是偶然发现了同样的问题,最后使用 i3lock 的 -n
开关 (nofork) 修复了它。
发生的事情是 dpms 被设置为 3,然后 i3lock 被启动并分叉,然后立即在 i3lock 仍在运行时调用 revert
函数,否定对 xset 的第一次调用。< /p>
使用 i3lock -n
可以防止这种行为,确保脚本仅在 i3lock 退出时继续越过 i3lock 行。
只需将 i3lock "$@"
替换为 i3lock -n "$@"
,它应该可以正常工作。