![我可以强制屏幕空白并忽略输入吗?](https://linux22.com/image/84481/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%BC%BA%E5%88%B6%E5%B1%8F%E5%B9%95%E7%A9%BA%E7%99%BD%E5%B9%B6%E5%BF%BD%E7%95%A5%E8%BE%93%E5%85%A5%E5%90%97%EF%BC%9F.png)
我想强制我的屏幕为空白,并使其保持空白,无论我使用键盘和鼠标做什么,直到它收到取消空白的命令(有点像锁)。
我知道的命令是:
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 是什么。就我而言,它们是14
和11
。
现在,关闭屏幕,禁用键盘和鼠标,等待 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()
作为脚本的第一个参数并假设它实际上是一个数字)。我仍在寻找适当的解决方案,但目前您的选择是:
- 以 root 身份运行
- 编写脚本和 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 面板上工作,因为显然一些内核开发人员认为这是一个好主意。