Gih's Blog

只言片语

腾出桌面空间,把系统监视器之类的程序停掉.

2011-09-05 by gihnius, tagged as linux

像很多人一样,平时喜欢把一个系统监视器显示在桌面, 我使用的是 conky. 

桌面除了它之外, 就剩下编辑器,浏览器之类的主要程序了.
现在我把conky 卸载了. 我觉得桌面上太多的东西容易分散注意力. 现在别说 conky, 连任务栏都省了. 

写了一个简单的监控脚本, 通过espeak有问题时再语音通知我. 避免一直显示没用途的信息.espeak 是一个轻量级的 text-to-speech 引擎. 它使用特别的 语音波 保存声音, 通过 波-声音的转换发声, 而不是打开一个个大大的音频文件播放. 

因此, 使用它做一个系统通知绰绰有余, 不用占用太多的系统资源.首先把 notify-send 替换掉, 取而代之的这个脚本: (notify-say)

#!/bin/sh

## pass by env ESPEAK_ARGS or define here
espeak_args=${ESPEAK_ARGS:-"-a 150 -g 0.3 -p 55 -s 160 -b 1"}

## read from a fifo pipe
ttsf="/tmp/.${USER}.tts.fifo"

ps -aux | grep -q "[Tt]ail -f $ttsf" || (test -p $ttsf || mkfifo $ttsf)
ps -aux | grep -q '[Ee]speak' || (nohup tail -f $ttsf | espeak $espeak_args >/dev/null &)

[ $# -eq 1 ] && [ "$1" = '-stop' ] && {
     ps -aux | grep "[Tt]ail -f $ttsf" | awk '{print $2}' | xargs kill
     #killall espeak
     rm -f $ttsf
     exit
}

echo $* > $ttsf 
这样,系统中一直保留一个 espeak 实例, 通过向一个 FIFO PIPE 发送信息, espeak 会顺序朗读出来.在监控脚本中调用:
$ notify-say "Network connection lost"
## 改变参数 朗读中文

$ESPEAK_ARGS="${ESPEAK_ARGS} -v zh" notify-say "请注意, 主文件系统满了." 
其实, 系统通知并不多, 不用一直运行那些占资源的监视器!另外: 截一张conky的图, 做个留念吧!