定时调整色温的脚本怎么写

wen 实用脚本 2

本文目录导读:

定时调整色温的脚本怎么写

  1. Linux/Windows 通用脚本(Python)
  2. 简单 Shell 脚本(Linux)
  3. macOS 专用脚本
  4. 配置文件示例
  5. 使用 systemd 服务(Linux)
  6. 使用方法
  7. 注意事项

我来帮你编写定时调整色温的脚本,这里提供几种常见场景的实现方案:

Linux/Windows 通用脚本(Python)

#!/usr/bin/env python3
"""
定时调整色温脚本
支持 Linux (redshift) 和 Windows (Windows夜灯)
"""
import time
import datetime
import subprocess
import platform
import json
import os
class ColorTemperatureScheduler:
    def __init__(self):
        self.system = platform.system()
        self.config_file = os.path.expanduser("~/.color_temp_config.json")
        self.load_config()
    def load_config(self):
        """加载配置文件"""
        default_config = {
            "schedule": [
                {
                    "start": "06:00",
                    "end": "18:00",
                    "temperature": 6500  # 白天色温
                },
                {
                    "start": "18:00",
                    "end": "22:00",
                    "temperature": 4500  # 傍晚色温
                },
                {
                    "start": "22:00",
                    "end": "06:00",
                    "temperature": 3500  # 夜间色温
                }
            ],
            "enabled": True
        }
        if os.path.exists(self.config_file):
            with open(self.config_file, 'r') as f:
                self.config = json.load(f)
        else:
            self.config = default_config
            self.save_config()
    def save_config(self):
        """保存配置"""
        with open(self.config_file, 'w') as f:
            json.dump(self.config, f, indent=2)
    def get_current_temperature(self):
        """根据当前时间获取色温值"""
        now = datetime.datetime.now()
        current_time = now.strftime("%H:%M")
        for schedule in self.config["schedule"]:
            start = schedule["start"]
            end = schedule["end"]
            if start <= end:
                # 同一天内的时段
                if start <= current_time <= end:
                    return schedule["temperature"]
            else:
                # 跨越午夜的时段
                if current_time >= start or current_time <= end:
                    return schedule["temperature"]
        # 默认返回最高色温
        return 6500
    def apply_temperature(self, temperature):
        """应用色温设置"""
        if self.system == "Linux":
            self.apply_linux(temperature)
        elif self.system == "Windows":
            self.apply_windows(temperature)
        elif self.system == "Darwin":  # macOS
            self.apply_mac(temperature)
    def apply_linux(self, temperature):
        """Linux 使用 Redshift"""
        try:
            # 先清除现有的 redshift 进程
            subprocess.run(["pkill", "-f", "redshift"], capture_output=True)
            # 启动新的 redshift
            subprocess.Popen([
                "redshift",
                "-O", str(temperature),
                "-b", "0.8:0.7"  # 亮度和伽马
            ], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
            print(f"[{datetime.datetime.now()}] 色温已调整为: {temperature}K")
        except FileNotFoundError:
            print("请先安装 redshift: sudo apt install redshift")
    def apply_windows(self, temperature):
        """Windows 使用注册表夜灯设置"""
        try:
            # 计算亮度值 (6500K = 最高色温)
            # Windows 夜灯范围 1200-6500K
            if temperature < 1200:
                temperature = 1200
            elif temperature > 6500:
                temperature = 6500
            # 使用 PowerShell 设置夜灯
            settings = f"""
                New-ItemProperty -Path "HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\CloudStore\\Store\\Cache\\DefaultAccount" 
                -Name "NightLight" -Value "{temperature}" -PropertyType String -Force
            """
            subprocess.run(["powershell", "-Command", settings], capture_output=True)
            print(f"[{datetime.datetime.now()}] 已设置 Windows 夜灯色温: {temperature}K")
        except Exception as e:
            print(f"设置 Windows 夜灯失败: {e}")
    def apply_mac(self, temperature):
        """macOS 使用夜览设置"""
        try:
            # macOS 夜览设置需要 GUI 工具,这里使用 AppleScript
            script = f'''
                tell application "System Events"
                    tell process "System Settings"
                        set frontmost to true
                        click menu item "Displays" of menu 1 of menu bar 1
                        delay 1
                        click radio button "Night Shift" of tab group 1 of window 1
                        delay 0.5
                        set value of slider "Color Temperature" to {temperature}
                    end tell
                end tell
            '''
            subprocess.run(["osascript", "-e", script], capture_output=True)
            print(f"[{datetime.datetime.now()}] 已设置 macOS 夜览色温: {temperature}K")
        except Exception as e:
            print(f"设置 macOS 夜览失败: {e}")
    def run_scheduler(self):
        """运行调度器"""
        print("色温调度器已启动...")
        last_temperature = None
        while True:
            if self.config["enabled"]:
                current_temperature = self.get_current_temperature()
                if current_temperature != last_temperature:
                    self.apply_temperature(current_temperature)
                    last_temperature = current_temperature
            # 每 5 分钟检查一次
            time.sleep(300)
def main():
    scheduler = ColorTemperatureScheduler()
    scheduler.run_scheduler()
if __name__ == "__main__":
    main()

简单 Shell 脚本(Linux)

#!/bin/bash
# 简单的色温调度脚本
# 配置色温
DAY_TEMP=6500
NIGHT_TEMP=3500
TRANSITION_START=18  # 18:00 开始过渡
TRANSITION_END=22    # 22:00 完全变暗
while true; do
    # 获取当前小时
    HOUR=$(date +%H | sed 's/^0*//')
    # 根据时间设置色温
    if [ $HOUR -ge 6 ] && [ $HOUR -lt 18 ]; then
        # 白天
        TEMP=$DAY_TEMP
    elif [ $HOUR -ge 18 ] && [ $HOUR -lt 22 ]; then
        # 过渡期:线性降低色温
        PROGRESS=$(( ($HOUR - 18) * 100 / 4 ))
        TEMP=$(( $DAY_TEMP - ($DAY_TEMP - $NIGHT_TEMP) * $PROGRESS / 100 ))
    else
        # 夜间
        TEMP=$NIGHT_TEMP
    fi
    # 应用色温
    redshift -O $TEMP 2>/dev/null
    echo "$(date): 设置色温为 $TEMP"
    # 每 10 分钟检查一次
    sleep 600
done

macOS 专用脚本

#!/bin/bash
# macOS 夜览定时脚本
# 语法: osa_scale 开始时间 结束时间 最终亮度
osascript -e '
on run argv
    set startHour to item 1 of argv as integer
    set endHour to item 2 of argv as integer
    set finalBrightness to item 3 of argv as real
    set currentHour to ((current date) as hours) mod 24
    if currentHour >= startHour and currentHour < endHour then
        -- 白天使用正常亮度
        set brightnessValue to 1.0
    else
        -- 夜晚降低亮度
        set brightnessValue to finalBrightness
    end if
    tell application "System Events"
        tell dock preferences
            set properties to {autohide:false}
        end tell
    end tell
    -- 这里可以设置夜览色温
    do shell script "echo 调整色温"
end run
'
# 主循环
while true; do
    HOUR=$(date +%H)
    if [ $HOUR -ge 6 ] && [ $HOUR -lt 18 ]; then
        # 白天 - 正常色温 6500K
        osascript -e 'set appearance to light'
    elif [ $HOUR -ge 18 ] && [ $HOUR -lt 22 ]; then
        # 傍晚 - 中间色温 4500K
        osascript -e 'set appearance to dark'
    else
        # 夜间 - 最低色温 3500K
        osascript -e 'set appearance to dark'
    fi
    sleep 300
done

配置文件示例

{
  "schedule": [
    {
      "start": "06:00",
      "end": "09:00",
      "temperature": 5500,
      "name": "早间"
    },
    {
      "start": "09:00",
      "end": "14:00",
      "temperature": 6500,
      "name": "正午"
    },
    {
      "start": "14:00",
      "end": "18:00",
      "temperature": 5800,
      "name": "午后"
    },
    {
      "start": "18:00",
      "end": "22:00",
      "temperature": 4500,
      "name": "晚间"
    },
    {
      "start": "22:00",
      "end": "06:00",
      "temperature": 3500,
      "name": "夜间"
    }
  ]
}

使用 systemd 服务(Linux)

# /etc/systemd/system/color-temperature.service
[Unit]
Description=Color Temperature Scheduler
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/user/color_temp_scheduler.py
Restart=on-failure
User=1000  # 改为你的 UID
[Install]
WantedBy=multi-user.target

使用方法

  1. 安装依赖

    • Linux: sudo apt install redshift
    • Windows: 已自带夜灯功能
  2. 运行脚本

    python3 color_temp_scheduler.py
  3. 设置开机自启(Linux):

    sudo systemctl enable color-temperature
    sudo systemctl start color-temperature
  4. 自定义时段:修改 config_file 中的 JSON 配置

注意事项

  • Linux 需要安装 redshift
  • Windows 夜灯功能需要 Windows 10/11
  • macOS 需要允许辅助功能权限
  • 可以根据需要调整色温值和时段

这个脚本会根据一天中的不同时段自动调整屏幕色温,帮助保护眼睛并改善睡眠质量,需要调整具体时段或色温值时,只需修改配置文件即可。

抱歉,评论功能暂时关闭!