使用Ubuntu命令完成定时提醒功能(预防rsi)

Unix/Linux 的哲学是: 提供各种灵活的组件, 你通过类似叠积木的方式去组装其这些组件来完成你所要完成的任务. 因此,通常只要你能看到的各种展现或者操作,都可以通过一个命令去完成.因此如何粘合这些命令, 让他们很好的为你的工作/生活带来便利是个不错的业余兴趣方向.

功能设计: 该功能实现的是一个定时提醒的业务, 同时要具备一定的预防rsi的功能.

功能分析:
定时性: 第一个能想的就是 crontab 那么定时操作的命令行就敲定了
通知功能: Ubuntu右上角的那个通知区域用起来就不错, 然后谷歌就告诉我应该使用 notify-send 命令
预防rsi的功能: RSI(Repetitive strain injury), 重复压迫性损伤, 简单来说就是你保持同一个姿势太久了所带了的损伤. 因此我们需要一个强迫你离开电脑起来活动活动的命令, 如何才能强迫你离开电脑呢? 实际上我没有办法…但是可以绕一下, 差不多该离开电脑了, 那么简单的实现一下就是使用锁定屏幕这个功能, 因此我们选择了 gnome-screensaver-command -l 这个命令(其他桌面环境请自行谷歌)

执行流程:
完成了功能分析,我们就需要简单的桂花执行流程, 流程大体如下,在每个小时的前5分钟完成一个提醒流程, 前3分钟提醒休息, 第4分钟提醒锁屏,第五分钟完成锁屏.由此我们得到了如下crontab设置:

0-3/1 * * * * notify-send -i /home/xwsoul/xxx.png "提醒" "您需要休息了." >> /home/xwsoul/notify-send.log 2>&1
4 * * * * notify-send -i /home/xwsoul/xxx.png "提醒" "桌面约在1分钟后锁定." >> /home/xwsoul/cnotify-send.log 2>&1
5 * * * * gnome-screensaver-command -l >> /home/xwsoul/notify-send.log 2>&1

结果这些一个都木有生效, 查看一下定向的日志, 大飘的桌面错误, 谷歌之才知道需要加上 DISPLAY=:0, 因此最终crontab配置为:

0-3/1 * * * * DISPLAY=:0 notify-send -i /home/xwsoul/xxx.png "提醒" "您需要休息了." >> /home/xwsoul/notify-send.log 2>&1
4 * * * * DISPLAY=:0 notify-send -i /home/xwsoul/xxx.png "提醒" "桌面约在1分钟后锁定." >> /home/xwsoul/cnotify-send.log 2>&1
5 * * * * DISPLAY=:0 gnome-screensaver-command -l >> /home/xwsoul/notify-send.log 2>&1

后话
1. 补充: 关于锁屏那段, 为了防止直接解锁而不休息, 因此可以增加加锁次数, 来打击使用者(也就是自己)在解锁上的积极性.
2. 不足: 如果实在看电影的时候, 遇到个锁屏不能一次性看完, 这将是一件不爽的事情, 不过话说回来就算看电影也应该起身休息一下么, 哈哈哈