Linux定时任务-定时锁屏

作为程序员,经常写代码写到难以自拔,但是如果长时间如此,对眼睛和颈椎都是很大负担。如何善待自己的眼睛和颈椎呢?答案就是:Linux cron。本文将介绍通过定时任务实现定时锁屏。注意:本人机器为 Ubuntu。

安装锁屏命令

sudo apt install gnome-screensaver

锁屏

gnome-screensaver-command -l

页面通知

为了更加优化,在锁屏前,弹出系统通知

notify-send -u normal -t 50000 -i appointment-new '1分钟后锁屏' '注意休息,善待眼睛、善待颈椎'

定时任务

Terminal中输入 crontab -e 进入定时任务编辑页面(如果是第一次,会提示选择编辑器,本人选择vim)。输入如下内容:

# m h  dom mon dow   command
29 * * * * notify-send -u normal -t 50000 -i appointment-new '1分钟后锁屏' '注意休息,善待眼睛、善待颈椎'
30 * * * * gnome-screensaver-command -l

奇怪的是,不管是通知还是锁屏,均无法生效。原因就在于 cron 中执行界面相关的命令,需要有如下合适的参数:$DBUS_SESSION_BUS_ADDRESS$DISPLAY。如何给这两个参数设置合适的值呢?可以从系统中已运行的程序中获取,详情介绍请参考。
新建脚本:/usr/local/bin/gui-program-from-cron.sh,内容如下:

#!/bin/sh
[ "$#" -lt 1 ] && echo "Usage: $0 program options" && exit 1

program="$1"
shift

user=$(whoami)
env_reference_process=$( pgrep -u "$user" xfce4-session || pgrep -u "$user" ciannamon-session || pgrep -u "$user" gnome-session || pgrep -u "$user" gnome-shell || pgrep -u "$user" kdeinit | head -1 )

export DBUS_SESSION_BUS_ADDRESS=$(cat /proc/"$env_reference_process"/environ | grep --null-data ^DBUS_SESSION_BUS_ADDRESS= | sed 's/DBUS_SESSION_BUS_ADDRESS=//')
export DISPLAY=$(cat /proc/"$env_reference_process"/environ | grep --null-data ^DISPLAY= | sed 's/DISPLAY=//')
"$program" "$@"

修改脚本权限:

sudo chmod +x /usr/local/bin/gui-program-from-cron.sh

再次执行 crontab -e

# m h  dom mon dow   command
29 * * * * /usr/local/bin/gui-program-from-cron.sh notify-send -u normal -t 50000 -i appointment-new '1分钟后锁屏' '注意休息,善待眼睛、善待颈椎'
30 * * * * /usr/local/bin/gui-program-from-cron.sh gnome-screensaver-command -l

善待眼睛、善待颈椎,从看完本文开始!

参考

  • Make notify-send work from user cron file in ubuntu
  • ubuntu下提醒自己定时休息

你可能感兴趣的:(Linux定时任务-定时锁屏)