本文目录导读:

#!/usr/bin/env python3
"""
屏幕常亮模式脚本
通过模拟按下Scroll Lock键,防止系统进入休眠或锁屏状态。
使用pynput库监控鼠标或键盘活动,无活动时自动发送保持唤醒信号。
"""
import time
import threading
import sys
from pynput.keyboard import Controller as KeyboardController, Key
from pynput.mouse import Controller as MouseController, Listener
# 配置参数
IDLE_TIMEOUT = 60 # 空闲超时时间(秒),之后开始模拟按键
ACTIVITY_CHECK_INTERVAL = 10 # 检查活动的时间间隔(秒)
SIMULATE_KEY = Key.scroll_lock # 用于唤醒的按键(不会影响正常使用)
class ScreenAwake:
def __init__(self):
self.keyboard = KeyboardController()
self.last_activity_time = time.time()
self.running = True
self._setup_listeners()
def _setup_listeners(self):
"""设置鼠标和键盘监听器"""
# 鼠标监听(移动、点击、滚动)
self.mouse_listener = Listener(
on_move=self._on_activity,
on_click=self._on_activity,
on_scroll=self._on_activity
)
# 键盘监听(按键按下)
self.keyboard_listener = Listener(
on_press=self._on_activity
)
def _on_activity(self, *args):
"""当检测到用户活动时更新最后活动时间"""
self.last_activity_time = time.time()
def _keep_awake(self):
"""执行保持唤醒动作:模拟按键"""
try:
self.keyboard.press(SIMULATE_KEY)
self.keyboard.release(SIMULATE_KEY)
print(f"[{time.strftime('%H:%M:%S')}] 发送保持唤醒信号 ({SIMULATE_KEY})")
except Exception as e:
print(f"模拟按键失败: {e}")
def _activity_loop(self):
"""后台线程:检查空闲时间并触发唤醒"""
while self.running:
elapsed = time.time() - self.last_activity_time
if elapsed > IDLE_TIMEOUT:
self._keep_awake()
time.sleep(ACTIVITY_CHECK_INTERVAL)
def start(self):
"""启动常亮模式"""
print("=" * 50)
print("屏幕常亮模式已启动")
print(f"空闲超时: {IDLE_TIMEOUT}秒")
print(f"检查间隔: {ACTIVITY_CHECK_INTERVAL}秒")
print(f"模拟按键: {SIMULATE_KEY}")
print("按 Ctrl+C 退出")
print("=" * 50)
# 启动监听器
self.mouse_listener.start()
self.keyboard_listener.start()
# 启动活动检测循环
activity_thread = threading.Thread(target=self._activity_loop, daemon=True)
activity_thread.start()
try:
# 保持主线程运行
while self.running:
time.sleep(1)
except KeyboardInterrupt:
print("\n正在退出...")
self.stop()
def stop(self):
"""停止所有监听器和线程"""
self.running = False
self.mouse_listener.stop()
self.keyboard_listener.stop()
print("屏幕常亮模式已关闭")
def main():
# 检查是否有管理员权限(非必需,但某些系统可能需要)
# if sys.platform.startswith('linux') and os.geteuid() != 0:
# print("警告: 在Linux上可能需要root权限才能模拟按键")
# print("请考虑使用 sudo 运行")
awaker = ScreenAwake()
awaker.start()
if __name__ == "__main__":
main()
使用说明
安装依赖
在终端中运行以下命令安装所需的Python库:
pip install pynput
运行脚本
python screen_awake.py
工作原理
- 监控用户活动:通过监听鼠标移动、点击、滚动以及键盘按键来检测用户是否在场。
- 空闲检测:如果用户无操作超过设定的空闲时间(默认60秒),脚本会自动模拟按下一次
Scroll Lock键。 - 保持唤醒:模拟按键会重置系统的空闲计时器,从而阻止屏幕休眠或系统锁屏。
配置调整
您可以根据需要修改脚本开头的配置参数:
IDLE_TIMEOUT:空闲多久后触发唤醒信号(单位:秒)ACTIVITY_CHECK_INTERVAL:检查用户活动的时间间隔(单位:秒)SIMULATE_KEY:用于唤醒的按键,默认为Scroll Lock(通常不影响正常使用)
退出方式
按 Ctrl+C 即可安全退出脚本。
注意事项
- 该脚本模拟的是
Scroll Lock键,这通常不会干扰您的正常工作。 - 在某些系统(如macOS)上,模拟按键可能需要辅助功能权限(在“系统偏好设置” > “安全性与隐私” > “辅助功能”中允许终端或Python)。
- 长时间运行可能会稍微增加CPU占用,但通常非常小(低于1%)。