Ubuntu基于Debian发行版和GNOME桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。Ubuntu对GNU/Linux的普及特别是桌面普及作出了巨大贡献,由此使更多人共享开源的成果与精彩。
本文将详细介绍利用Ubuntu实现定时弹窗提醒的脚本写法。
简单的弹窗效果
首先是上网查了ubuntu中的弹窗命令,发现notify-send这个命令就能满足要求了
notify-send ["该休息一下啦"] "喝水!伸懒腰!动一动!"
弹窗效果
弹窗效果有了,然后应该是一个定时弹窗的功能
一、cron命令实现定时弹窗
想到的是cron命令,google了很多教程,都没有成功
在/etc/crontab 中加入了
* * * * * root notify-send ["该休息一下啦"] "喝水!伸懒腰!动一动!"
也用命令编辑了
crontab -e
同时也启动了cron服务
server cron start
终于在一个介绍crontab用法的博客终于找到我的crontab脚本不执行的原因了:没有设置环境变量!
在crontab文件中定义多个调度任务时,需要特别注环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量
crontab脚本
HOME=/ SHELL=/bin/bash 0 * * * * notify-send ["该休息一下啦"] "喝水!伸懒腰!动一动!"
这样就实现了
二、shell脚本无限循环实现
下面是脚本:
while : do sleep 3600 echo time past notify-send ["该休息一下啦"] "喝水!伸懒腰!动一动!" done
把这个脚本加入到home目录的.bashrc中,每次登陆就能启动了
三、利用zenity和notify-send实现
#!/bin/bash alartTime=100 while (($alartTime)) do if (($alartTime != 100)) # 如果不是 100,则说明不是初次运行,则弹出下面的提示 then notify-send $alartTime"分钟已到,请重新设定!" zenity --info --text "时间到,请重新设定!" fi alartTime=$(zenity --entry --title "定时提醒" --text "输入提醒时间(分钟, 将忽略小数)") alartTime=${alartTime%.*} # 忽略输入的小数点后面的数字,如 4.6 识别为 4 if (($alartTime > 60)) # 不能超过最大值 then zenity --info --text "必须小于60分钟,退出" break fi notify-send "成功设定"$alartTime"分钟,开始计时" sleep $((alartTime*60)) done
上面的脚本,使用了 notify-send 命令用于在桌面上弹出气泡提示,使用了 zenity 命令用于显示图形窗口。
自己用的话,上面的脚本可以写得更简单一点,因为错误检测没必要做。但是如果要给不太懂的人用的话,我这脚本里的错误检测及处理则会就显得有点力不从心了。