在 Raspberry Pi 上打开和关闭屏幕保护程序 - 使用 Python 编写的脚本

在 Raspberry Pi 上打开和关闭屏幕保护程序 - 使用 Python 编写的脚本

我是 Python 编程新手。如何编写一个脚本来唤醒显示器并根据条件将其置于睡眠状态?

import RPi.GPIO as GPIO

PIR = 23


GPIO.setmode(GPIO.BCM)
GPIO.setup(PIR, GPIO.IN)

while True:
    if GPIO.input(PIR):
        """ There should be the "awake monitor" function """"
    else:
        """" There should be something that makes my script run over and over but after for example 2 minutes after there is no signal on PIR.

如您所见,我有一个运动传感器,每次感应到运动时,我都想让显示器从睡眠状态唤醒,但是当其区域内不再有运动时,两分钟后它应该让显示器进入睡眠状态。

你能帮我么?

答案1

安装x11-xserver-utils软件包以获取xset命令。然后您可以使用它来强制DPMS向显示器发出信号以打开或关闭。您可能需要DISPLAY在环境中设置变量。例如:

DISPLAY=:0 xset dpms force on
sleep 10
DISPLAY=:0 xset dpms force off

您可以在 Python 中执行类似操作。每秒轮询一次。记住您是否已将显示器设置为打开或关闭。每当信号处于活动状态时,记下当天的时间。当自上次活动以来的时间超过 2 分钟时,关闭显示器。大致如下:

import os, subprocess, time
os.environ['DISPLAY'] = ":0"

displayison = False
maxidle = 2*60 # seconds
lastsignaled = 0
while True:
    now = time.time()
    if GPIO.input(PIR):
        if not displayison:
            subprocess.call('xset dpms force on', shell=True)
            displayison = True
        lastsignaled = now
    else:
        if now-lastsignaled > maxidle:
            if displayison:
                subprocess.call('xset dpms force off', shell=True)
                displayison = False
    time.sleep(1)

如果您正在与屏幕交互,并希望它在这段时间内独立于 gpio 保持开启状态,那么最好让标准 X11 空闲机制检测到 2 分钟空闲时间已过,然后自动关闭屏幕。只需使用您的程序强制打开屏幕即可。

您可以通过一次调用来设置 120 秒的空闲超时:

xset dpms 120 120 120

然后就可以从蟒蛇身上移除力量了。

相关内容