用脚本实现定时关闭显示器

wen 实用脚本 1

高效节能与隐私保护的自动化方案

用脚本实现定时关闭显示器

目录导读

  1. 为什么要用脚本控制显示器关闭?
  2. 主流系统脚本方案对比(Windows / macOS / Linux)
  3. Windows 脚本实战:使用 PowerShell 与批处理
  4. macOS 脚本实战:基于 AppleScript 与 pmset
  5. Linux 脚本实战:借助 xsetsystemd
  6. 常见问题与问答(FAQ)
  7. 脚本安全与优化建议

为什么要用脚本控制显示器关闭?

在日常使用电脑时,定时关闭显示器主要有三大需求:

  • 节能省电:显示器是电脑中耗电较高的部件之一,空闲时自动关闭可减少能源浪费。
  • 保护隐私:离开座位后,显示器自动关闭可防止他人窥屏。
  • 延长硬件寿命:长期高亮显示会加速背光老化,定时关闭有助于延长屏幕寿命。

虽然操作系统都提供了“电源选项”中的屏幕关闭设置,但无法精准控制“指定时间后关闭”或“特定程序运行时保持开启”等灵活场景,而脚本方案能实现更精细的自动化控制。


主流系统脚本方案对比

操作系统 推荐脚本类型 核心命令/工具 优点
Windows PowerShell / CMD nircmd, powershell 兼容性强,无需额外软件
macOS AppleScript / Shell pmset, caffeinate 与系统深度集成
Linux Shell / Python xset, vbetool 跨桌面环境

以下各节将给出可直接运行的脚本示例。


Windows 脚本实战

批处理 + NirCmd(推荐免费工具)

  1. 下载 NirCmd(官方无捆绑,约 200KB)。
  2. 创建 shutdown_display.bat 文件,内容如下:
    @echo off
    nircmd monitor off
  3. 双击运行,立刻关闭显示器。
  4. 进阶定时:使用 timeout 命令:
    timeout /t 600   // 等待 600 秒(10分钟)
    nircmd monitor off

纯 PowerShell 脚本(无需第三方)

Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public class Display{
    [DllImport("user32.dll")]
    public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
}
"@
[Display]::SendMessage(0xFFFF, 0x0112, 0xF170, 2)  # SC_MONITORPOWER = 2 关闭显示器

保存为 off.ps1,右键“使用 PowerShell 运行”。

提示:如果遇到执行策略限制,可运行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 进行授权。


macOS 脚本实战

在 macOS 上,最简单的脚本是通过 pmset 命令控制休眠,但关闭显示器需借助 sleep 命令或 caffeinate 工具。

AppleScript 方案(推荐)

  1. 打开“脚本编辑器”(Applications > Utilities > Script Editor)。
  2. 输入以下代码:
    tell application "System Events"
     do shell script "pmset displaysleepnow"
    end tell
  3. 保存为“应用程序”格式(如 CloseDisplay.app),以后双击即可关闭显示器。

定时触发:配合 macOS 的“日历”或 launchd 定时任务,可在每天特定时间执行。


Linux 脚本实战

Linux 下常用 xset 命令控制显示器节能状态。

基础脚本

#!/bin/bash
# 关闭显示器(需图形环境)
xset dpms force off

保存为 off_display.sh,赋予执行权限:

chmod +x off_display.sh

定时关闭 + 自动唤醒
使用 systemd 定时器实现每 30 分钟自动关闭:

  1. 创建服务文件 /etc/systemd/system/display-off.service
    [Unit]
    Description=Turn off display
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/xset dpms force off
  2. 创建定时器 /etc/systemd/system/display-off.timer
    [Timer]
    OnBootSec=10min
    OnUnitActiveSec=30min
    [Install]
    WantedBy=timers.target
  3. 启用并启动:
    systemctl enable display-off.timer --now

常见问题与问答(FAQ)

Q1:脚本关闭显示器后,鼠标或键盘能唤醒吗?
A:可以,大多数系统下,移动鼠标或按键盘任意键即可唤醒显示器,若无法唤醒,可能是显卡驱动或电源管理设置问题,可检查 BIOS 中 USB 唤醒功能是否开启。

Q2:想让脚本在电脑锁屏时自动执行,如何实现?
A

  • Windows:用任务计划程序,触发器选“锁定工作站”(事件 ID 4800)。
  • macOS:通过 launchd 监控 com.apple.screenIsLocked 状态。
  • Linux:使用 acpi_listen 监听锁屏事件(如 GNOME 的 org.gnome.ScreenSaver)。

Q3:脚本能否限定只在空闲时关闭?
A:可以,结合系统空闲检测:

  • Windows:Get-WinEvent[System.Windows.Forms.SystemInformation]::Idle
  • Linux:xprintidle 命令获取空闲毫秒数。
    示例条件:如果空闲超过 10 分钟,则关闭显示器。

Q4:脚本会不会影响正在运行的视频播放或下载任务?
A:仅关闭显示器,不影响后台进程,视频播放会继续,但无画面,建议在播放器或下载工具中禁用屏幕保护,或使用“仅关闭显示器”模式(如 Windows 的 SC_MONITORPOWER 2)。


脚本安全与优化建议

  • 权限最小化:避免以管理员身份运行仅需普通权限的脚本。
  • 错误处理:在脚本中加入 try-catch(PowerShell)或 (bash),防止因命令失败导致意外。
  • 日志记录:关键脚本可输出执行日志,方便排错。
  • 测试环境:先在非工作电脑上测试,确认硬件兼容性。
  • 替代工具:如果需要更精细的定时控制(如节假日不执行),可考虑成熟工具如 DisplayOff(Windows)、SleepWatcher(macOS)、xautolock(Linux)。

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