如何使用cron + python定时调整屏幕亮度?

如何使用cron + python定时调整屏幕亮度?

我想使用 cron 和这个脚本(http://askubuntu.com/questions/23593/use-webcam-to-sense-lighting-condition-and-adjust-screen-brightness):

import opencv
import opencv.highgui
import time
import commands


def get_image():
    image = opencv.highgui.cvQueryFrame(camera)
    return opencv.adaptors.Ipl2PIL(image)

camera = opencv.highgui.cvCreateCameraCapture(-1)

while 1:
    image = get_image()
    image.thumbnail((32, 24, ))
    image = tuple(ord(i) for i in image.tostring())
    x = int((int((max(image) / 256.0) * 10) + 1) ** 0.5 / 3 * 10)
    cmd = ("sudo su -c 'echo " + str(x) +
        " > /sys/devices/virtual/backlight/acpi_video0/brightness'")
    status, output = commands.getstatusoutput(cmd)
    assert status is 0

定时任务:/30*** sudo python /home/用户名/screen.py

然而,有两个问题:

首先,while 循环可以在 5 秒左右后终止吗?其次,有人可以尝试改进脚本,以便可以使用脚本设置较低的亮度级别吗?也许 256 个亮度级别映射到可为屏幕设置的亮度级别的方式需要更改。

谢谢

答案1

在较旧的内核中,某处有亮度控制文件/proc,但我认为它与/sys您的代码片段中的功能相同。在此/proc文件中,您可以使用多个级别的亮度,并且该机制中的亮度可能相同。尝试cat /sys/devices/virtual/backlight/acpi_video0/brightness检查是否有有关您可以使用的亮度级别的信息。

如果删除循环,整个代码将执行一次,因此可以每半小时仅设置一次亮度。这个解决方案没有什么缺点——如果你在检查亮度时遮住相机,亮度将会改变,下一次读数将在半小时后,所以你最终会在半小时内看到完全黑暗的屏幕。

为了避免这种情况,您可以将while循环for(例如 0 到 5)替换为 5 秒睡眠。在循环中您只能检查亮度五次,循环后您可以计算平均亮度并设置它。

编辑:平均 25 秒的代码:

import opencv
import opencv.highgui
import time
import commands
from time import sleep

def get_image():
    image = opencv.highgui.cvQueryFrame(camera)
    return opencv.adaptors.Ipl2PIL(image)

camera = opencv.highgui.cvCreateCameraCapture(-1)

x = []

for i in range(5):
    image = get_image()
    image.thumbnail((32, 24, ))
    image = tuple(ord(i) for i in image.tostring())
    x.append(int((int((max(image) / 256.0) * 10) + 1) ** 0.5 / 3 * 10))
    sleep(5)

sum = 0
for i in x:
    sum = sum + i

avg = sum / len(x)
cmd = ("sudo su -c 'echo " + str(avg) + " > /sys/devices/virtual/backlight/acpi_video0/brightness'")
status, output = commands.getstatusoutput(cmd)
assert status is 0

不幸的是,我无法选择更改背光(旧内核或内核中缺少某些内容),并且我没有相机来检查它是否正常工作......

相关内容