bash脚本中的xset无法正常工作

时间:2018-07-01 22:13:29

标签: bash shell xorg

一些背景知识:我想将包装脚本用于我在台式机上也在笔记本电脑上使用的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时是相同的。

1 个答案:

答案 0 :(得分:1)

我只是偶然发现了同样的问题,最后使用 i3lock 的 -n 开关 (nofork) 修复了它。

发生的事情是 dpms 被设置为 3,然后 i3lock 被启动并分叉,然后立即在 i3lock 仍在运行时调用 revert 函数,否定对 xset 的第一次调用。< /p>

使用 i3lock -n 可以防止这种行为,确保脚本仅在 i3lock 退出时继续越过 i3lock 行。

只需将 i3lock "$@" 替换为 i3lock -n "$@",它应该可以正常工作。