我可以强制屏幕空白并忽略输入吗?

我可以强制屏幕空白并忽略输入吗?

我想强制我的屏幕为空白,并使其保持空白,无论我使用键盘和鼠标做什么,直到它收到取消空白的命令(有点像锁)。

我知道的命令是:

xset dpms force off
sleep 2
xset dpms force on

我只希望它空白两秒钟然后取消空白,但无论如何我希望它在这两秒钟内绝对保持空白。这可以做到吗?

答案1

你可以只是禁用你的键盘和鼠标持续时间。首先,获取您的键盘和鼠标 ID:

$ xinput --list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Logitech M325                             id=14   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ SIGMACHIP USB Keyboard                    id=11   [slave  keyboard (3)]

我的机器上连接了各种东西,并且正在运行笔记本电脑,因此输出xinput --list很长。为了清楚起见,我在这里对其进行了编辑。您需要弄清楚需要禁用的设备的 ID 是什么。就我而言,它们是1411

现在,关闭屏幕,禁用键盘和鼠标,等待 2 秒钟,然后再次打开所有内容:

xinput set-prop 'Logitech M325' 'Device Enabled'  0 &&
xinput set-prop 'SIGMACHIP USB Keyboard' 'Device Enabled' 0 &&
xset dpms force off &&
sleep 2 &&
xinput set-prop 'Logitech M325' 'Device Enabled' 1 &&
xinput set-prop 'SIGMACHIP USB Keyboard' 'Device Enabled' 1 &&
xset dpms force on

在我的系统上,SIGMACHIP USB匹配多个设备。由于某种原因,它也被识别为鼠标。为了 100% 确定获得正确的设备,您可以将它们的类添加到它们的名称前面:

xinput set-prop 'pointer:Logitech M325' 'Device Enabled'  0 &&
xinput set-prop 'keyboard:SIGMACHIP USB Keyboard' 'Device Enabled' 0 &&
xset dpms force off &&
sleep 2 &&
xinput set-prop 'pointer:Logitech M325' 'Device Enabled' 1 &&
xinput set-prop 'keyboard:SIGMACHIP USB Keyboard' 'Device Enabled' 1 &&
xset dpms force on

答案2

您可以使用兰德尔。例如,如果您的显示器是 HDMI1,您可以这样做

xrandr --output HDMI1 --off
sleep 2
xrandr --output HDMI1 --auto

您可以通过以下方式找到该名称

xrandr|grep ' connected'

答案3

我终于找到了一个至少有效的答案我的系统(Lenovo ThinkPad X201 和 ThinkPad X201 Tablet,均使用 LVDS 面板)。它实际上会禁用背光,但除非您有透反式或反射式 LCD(这很不寻常),否则它实际上应该与关闭 LCD 相同。

首先,我安装了英特尔 GPU 工具(自述文件这里了解更多信息)。在 Debian 中,这是通过以下方式完成的:

# apt-get install intel-gpu-tools

该软件包包含一个名为 的程序intel_backlight,它直接与 Intel GPU 的寄存器交互,因此不限于现代 Linux 内核文件系统中的“安全范围” sysfs,其中亮度级别 0 始终应该“在低亮度级别开启” .'

不幸的是,这个程序需要以 root 身份运行,并且它并没有真正很好地清理其输入(它只是盲目地atoi()作为脚本的第一个参数并假设它实际上是一个数字)。我仍在寻找适当的解决方案,但目前您的选择是:

  1. 以 root 身份运行
  2. 编写脚本和 acpid 配置以在特定 ACPI 事件时触发它。

我选择了后一个选项。我选择了一个组合键,该组合键acpi_listen检测到触发了 ACPI 事件,但未映射到在我的笔记本电脑上执行任何操作。我选择了 fn+f1。理论上,也可以按亮度降低键启动它,检查亮度是否已达到最低,如果是,则关闭背光。

我写了以下文件:

/etc/acpi/events/fnf1-toggle-lcd:

event=button/fnf1
action=/etc/acpi/toggle-thinklight-or-tablet-lcd.sh "%e"

/etc/acpi/toggle-thinklight-or-tablet-lcd.sh:

#! /bin/bash
# intel_backlight appears to require root privs.

# is the light on or off?
export INTEL_BACKLIGHT="/usr/bin/intel_backlight"
export light_state=$("$INTEL_BACKLIGHT" | sed 's/current backlight value: //g'|sed 's/%//g')
if [ "$light_state" -eq 0 ]; then # if the backlight is currently off
  # restore brightness level
  cat /root/brightness > /sys/class/backlight/acpi_video0/brightness
else # the backlight is currently on
  # back up current brightness level
  cat /sys/class/backlight/acpi_video0/brightness > /root/brightness
  # turn off backlight
  "$INTEL_BACKLIGHT" 0
fi

确保 shell 脚本被标记为可执行。

也许不完全是想要的,我知道我参加聚会迟到了,但它在这里起作用。

或者,在 eDP 面板上,这样做echo 0 > /sys/class/backlight/acpi_video0/bl_power可能会起作用。这绝对是将不会在 LVDS 面板上工作,因为显然一些内核开发人员认为这是一个好主意。

相关内容