Linux:在 X 下防止键盘打开屏幕

Linux:在 X 下防止键盘打开屏幕

我正在尝试绑定一个键(使用xbindkeys)来在 X 下打开/关闭我的显示器。到目前为止,我已将该键绑定到此脚本:

#!/bin/bash
MOUSE="Logitech USB-PS/2 Optical Mouse"

if [[ ! -z $(xset q | grep "Monitor is On") ]]; then
    logger "Turning off display"
    xinput disable "$MOUSE"
    xset s 2 2
    xset dpms force off
else
    logger "Turning on display"
    xinput enable "$MOUSE"
    xset s 3600 3600
    xset dpms force on
fi

此功能几乎完美运行:如果屏幕处于打开状态,它会禁用鼠标(以防止意外唤醒),将消隐时间设置为 2 秒(以防万一唤醒它)并关闭屏幕。如果屏幕处于关闭状态,它会恢复之前的设置并重新打开屏幕。

不幸的是,当实际绑定到某个键时,这似乎不起作用:它总是认为屏幕是打开的。我怀疑这是因为按下该键会将它们重新打开,然后运行脚本将它们再次关闭。

我找不到任何方法来防止屏幕在按键时自动打开,除非完全禁用键盘(这会使其很难重新打开)。

一个更好的解决方案是,如果我可以在屏幕打开/关闭时运行脚本;那么我仍然可以通过按任意键来重新打开屏幕,而不仅仅是绑定到该脚本的键。

答案1

按下绑定的键后,脚本会立即运行,但只有释放键时屏幕才会重新打开。

您可以通过输入进行测试

xset dpms force off

在您的终端上并按住Enter

屏幕保持关闭状态,直到您松开按键,然后立即重新打开。

一个简单的解决方法是添加一个小的延迟,以便xset在释放键后运行命令(sleep例如,使用命令)。

答案2

我所做的事情是使用xscreensaver(设置为仅空白屏幕,不运行任何图形黑客),然后使用以下命令观看它xscreensaver-command -watch

   -watch  Prints a line each time the screensaver changes state: when the
           screen  blanks,  locks,  unblanks,  or when the running hack is
           changed.  This option never returns; it is intended for use  by
           shell  scripts  that  want  to react to the screensaver in some
           way.  An example of its output would be:
           BLANK Fri Nov  5 01:57:22 1999
           RUN 34
           RUN 79
           RUN 16
           LOCK Fri Nov  5 01:57:22 1999
           RUN 76
           RUN 12
           UNBLANK Fri Nov  5 02:05:59 1999

手册页中包含一个值得一看的示例。

不幸的是,库存xscreensaver坚持不时将 DPMS 设置设置为自己的值。我提交了一个补丁来阻止它这样做,但 jwz 拒绝了。您可能会发现该补丁很有用 - 或者只需使用 编译 xscreensaver 即可--without-dpms-ext

或者,检查xscreensaver代码以寻找有关如何编写自己的观察器的线索也可能会有所启发。

相关内容