关于实现定时播放视频并在播放期间完全锁定输入设备及屏幕的唤醒闹钟脚本的技术问询
实现定时播放视频并全程锁定输入设备的唤醒闹钟脚本方案
嘿,为了准时起床也是够拼的!你的初始脚本思路已经找对方向了,但目前的逻辑是视频播放完才锁定设备,这显然不符合你「播放期间彻底锁死键盘、鼠标、屏幕,直到视频结束才能操作」的需求——不然你可能中途关掉视频接着睡😆。我来帮你完善这个脚本,彻底解决你的起床难题!
先明确核心需求
你需要的是:
- 到指定时间自动启动全屏视频
- 视频播放期间,完全禁用键盘、鼠标,屏幕也处于锁定状态,无法中断播放
- 视频播放结束后,自动解锁所有设备
完善后的脚本
首先确保你已经安装了所需工具:ffplay(来自ffmpeg包)、xtrlock、xdg-screensaver。在Debian/Ubuntu系可以用下面的命令安装:
sudo apt install ffmpeg xtrlock
下面是调整后的完整脚本:
#!/bin/bash # 视频文件路径(替换成你的视频地址) VIDEO_PATH="/ruta/a/tu/video.mp4" # 定时唤醒时间(格式HH:MM) ALARM_TIME="08:00" # 获取当前时间的时间戳,以及目标时间的时间戳 current_timestamp=$(date +%s) alarm_timestamp=$(date -d "$ALARM_TIME" +%s) # 计算需要等待的秒数,如果目标时间已过今天,自动顺延到明天 if [ $alarm_timestamp -lt $current_timestamp ]; then alarm_timestamp=$((alarm_timestamp + 86400)) fi wait_seconds=$((alarm_timestamp - current_timestamp)) echo "等待 $wait_seconds 秒后启动闹钟..." sleep $wait_seconds # 启动全屏视频播放,后台运行并记录进程ID ffplay -autoexit -fs -noborder "$VIDEO_PATH" & ffplay_pid=$! # 立刻锁定屏幕和输入设备 echo "启动锁定..." xdg-screensaver lock xtrlock & xtrlock_pid=$! # 等待视频播放结束 wait $ffplay_pid # 视频结束后,自动解锁输入设备和屏幕 echo "视频播放完成,解锁设备..." pkill -TERM xtrlock xdg-screensaver activate # 部分环境下需要重新激活屏保来解锁,或者用对应桌面的解锁命令
关键调整说明
- 时间逻辑优化:如果设置的唤醒时间已经过了当天(比如你晚上10点设置第二天8点的闹钟),脚本会自动顺延到第二天,避免出现负数等待时间的问题。
- 先启动视频再锁定:先让
ffplay后台启动全屏视频,再立刻执行锁定命令,确保视频能正常显示在最上层,不会被锁定窗口遮挡。 - 自动解锁机制:脚本会等待
ffplay进程结束(因为-autoexit参数会让视频播放完自动退出),然后通过pkill结束xtrlock进程,同时重置屏保状态完成解锁。
注意事项
- 部分桌面环境(比如GNOME)的屏保锁定可能需要额外的解锁命令,如果
xdg-screensaver activate不生效,可以替换成桌面环境专属的命令,比如GNOME用gnome-screensaver-command -d。 - 测试脚本时,可以把
ALARM_TIME改成当前时间的几分钟后,避免等待太久。 - 确保视频文件路径正确,
ffplay支持大多数常见视频格式,如果播放失败可以检查视频文件或者安装额外的解码库。
备注:内容来源于stack exchange,提问作者Ruben Gael Leal Espinosa




