作为程序员,经常写代码写到难以自拔,但是如果长时间如此,对眼睛和颈椎都是很大负担。如何善待自己的眼睛和颈椎呢?答案就是: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
善待眼睛、善待颈椎,从看完本文开始!
网友评论