LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 5536|回复: 23

发现一个好东西,conky,好玩阿!另请大牛帮我看看脚本

[复制链接]
发表于 2005-11-4 01:57:14 | 显示全部楼层 |阅读模式
听别人说有个好东西叫conky,贴在桌面壁纸上的系统监视器。看看官方文档,得知是使用torsmo代码的一个东东,晚上闲着没事,装一个玩玩,结果玩上瘾了,一看十二点了。。。。还是写点东西把,没有心得也有辛苦阿。
    我装的是Gentoo linux,使用fvwm,UTF8的locale。装conky比较容易,不用动脑筋,emerge conky。(记得有个老大说我是用gentoo的懒人,不知道是说我是懒人还是Gentoo让人变懒了)
    运行一下,基本不错,就是什么都看不清楚,废话,没写配置嘛。linux下的软件没写配置大都是垃圾,但是一旦配好了,哈哈,就是漂亮。

    关于conky的配置,示例文件写的比较清楚,就是有几点:
         1.  设置
  1. use_xft yes
复制代码
这样你的漂亮的字体就可以用了,不然用点阵的把。

         2   设置
  1. override_utf8_locale yes
复制代码
我的locale是utf8,不加这个配置文件里的中文就显示不了了。另外,编辑.conkyrc时,最好确认保存成utf8格式。

         3   不要在TEXT标签以后写注释,就是注释了也会显示出来。。。
    我有个疑问,就是似乎只能够启动一个conky,要是能启动多个就好了,不知道是我不会用还是软件不支持。请那位老大告诉我一下?
    conky可以显示文件,就像示例中的一样,使用${exec command},这样的话,就可以想些小花招了
     
    花招1      gmail邮件提示:
            呵呵,这个是官方网站上的一个perl脚本,使用这个脚本生成一个写有新邮件信息的gmail_top文件,然后在conky中把它显示出来,就使conky可以检查邮件了。
                   http://conky.sourceforge.net/gmail.pl

    花招2      xmms信息:
            还是官方网站上的东西,使用xmms插件xmms-infopipe,这样在xmms播放的时候在/tmp可以找到一个xmms-pipe文件,里面是当前xmms的状态,有个老外写了个脚本生成了一个播放的进度条,但是似乎有问题,我也写了一个
  1. if ls /tmp/xmms-info_crazyapple.0 >> null
  2. then
  3.         title=`sed -n '13p' /tmp/xmms-info |cut -c8-`
  4.         filename=`sed -n '14p' /tmp/xmms-info |cut -c7-`
  5.         tunetime=`sed -n '9p' /tmp/xmms-info|cut -c7-`
  6.         nowtime=`sed -n '7p' /tmp/xmms-info|cut -c11-`
  7.         bitrate=`sed -n '10p' /tmp/xmms-info|cut -c18-`
  8.         tune=`sed -n '4p' /tmp/xmms-info|cut -c20-`
  9.         currenttune=`sed -n '5p' /tmp/xmms-info|cut -c20-`
  10.         _time=`sed -n '6p' /tmp/xmms-info|cut -c15-`
  11.         _ftime=`sed -n '8p' /tmp/xmms-info|cut -c11-`
  12.         (( pos=_time*35/_ftime ))
  13.         echo xmms online.
  14.         echo "专  辑:$title"
  15.         echo "文  件:$filename"
  16.         echo "曲  目:$currenttune / $tune"
  17.         echo "比特率:$bitrate"
  18.         echo "总时间:$tunetime"
  19.         for (( i=0 ; i<35 ; i++ ))
  20.         do
  21.                 if [ "$i" -eq "$pos" ]
  22.                 then
  23.                         echo -n '0'
  24.                 else
  25.                         echo -n '='
  26.                 fi
  27.         done       
  28.         echo
  29. else
  30.         echo xmms offline.
  31. fi
复制代码
由于我刚刚学写脚本,这个东西实用性不强---运行一次要8~9秒,严重影响了conky的刷新速度,那位大哥帮我改改就好了。我最后只好使用sed抓了xmms-info文件中的几个有用行让conky显示,这样没有技术含量,但是速度快了一点。

花招3            天气预报
    这个也是很多人都使用的小伎俩,把人家网站上的天气预报抓下来改头换面。我使用人民网的天气预报,有24小时和48小时两种,都抓下来
  1. w3m -dump_source "http://card.people.com.cn/forecast/inland24.jsp?aboard=0&interval="|sed -n '393,398p'|iconv -f GB18030 -t UTF8 |cut -d\> -f3|sed 's/<\/font//'|sed 's/&nbsp;/风速:/'|tr -d '\<' > ~/.weather/Wuhan.weather
  2. w3m -dump_source "http://card.people.com.cn/forecast/inland48.jsp?aboard=0&interval="|sed -n '393,398p'|iconv -f GB18030 -t UTF8 |cut -d\> -f3|sed 's/<\/font//'|sed 's/&nbsp;/风速:/'|tr -d '\<' >> ~/.weather/Wuhan.weather
复制代码

我是武汉的,使用网页上的第393到398行,地区不同自行修改。(当然把脚本改成自动搜索也可以,本人初学,不是太懂,懒得麻烦)
这样24/48小时日夜天气预报的天气,风力,气温都有了,分12行装着,让conky显示时还得组装一下:
show_weather.sh
  1. #Wrtter by woodenapple
  2. w3m -dump_source "http://card.people.com.cn/forecast/inland24.jsp?aboard=0&interval=24"|sed -n '393,398p'|iconv -f GB18030 -t UTF8 |cut -d\> -f3|sed 's/<\/font//'|sed 's/&nbsp;//'|tr -d '\<' > ~/.weather/_Wuhan.weather
  3. w3m -dump_source "http://card.people.com.cn/forecast/inland24.jsp?aboard=0&interval=48"|sed -n '393,398p'|iconv -f GB18030 -t UTF8 |cut -d\> -f3|sed 's/<\/font//'|sed 's/&nbsp;//'|tr -d '\<' >> ~/.weather/_Wuhan.weather
  4. dayweather24=`sed -n '1p' ~/.weather/_Wuhan.weather`
  5. daywind24=`sed -n '2p' ~/.weather/_Wuhan.weather`
  6. daytemp24=`sed -n '3p' ~/.weather/_Wuhan.weather|sed 's/[^0-9]//'`
  7. nightweather24=`sed -n '4p' ~/.weather/_Wuhan.weather`
  8. nightwind24=`sed -n '5p' ~/.weather/_Wuhan.weather`
  9. nighttemp24=`sed -n '6p' ~/.weather/_Wuhan.weather|sed 's/[^0-9]//'`
  10. dayweather48=`sed -n '7p' ~/.weather/_Wuhan.weather`
  11. daywind48=`sed -n '8p' ~/.weather/_Wuhan.weather`
  12. daytemp48=`sed -n '9p' ~/.weather/_Wuhan.weather|sed 's/[^0-9]//'`
  13. nightweather48=`sed -n '10p' ~/.weather/_Wuhan.weather`
  14. nightwind48=`sed -n '11p' ~/.weather/_Wuhan.weather`
  15. nighttemp48=`sed -n '12p' ~/.weather/_Wuhan.weather|sed 's/[^0-9]//'`
  16. if [ $daytemp24 -lt $nighttemp24 ]
  17. then
  18.         echo "武汉地区未来24小时天气情况" > ~/.weather/Wuhan.weather
  19.         echo "晚间天气 $dayweather24        风速:$daywind24        最高温度:$daytemp24 ℃" >> ~/.weather/        Wuhan.weather
  20.         echo "白天天气 $nightweather24        风速:$nightwind24        最低温度:$nighttemp24 ℃" >> ~/.weather/Wuhan.weather
  21.         echo "武汉地区未来48小时天气情况" >> ~/.weather/Wuhan.weather
  22.         echo "晚间天气 $dayweather48        风速:$daywind48        最高温度:$daytemp48 ℃" >> ~/.weather/Wuhan.weather
  23.         echo "白天天气 $nightweather48        风速:$nightwind48        最低温度:$nighttemp48 ℃" >> ~/.weather/Wuhan.weather
  24. else
  25.         echo "武汉地区未来24小时天气情况" > ~/.weather/Wuhan.weather
  26.         echo "白天天气 $dayweather24        风速:$daywind24        最高温度:$daytemp24 ℃" >> ~/.weather/Wuhan.weather
  27.         echo "晚间天气 $nightweather24        风速:$nightwind24        最低温度:$nighttemp24 ℃" >> ~/.weather/Wuhan.weather
  28.         echo "武汉地区未来48小时天气情况" >> ~/.weather/Wuhan.weather
  29.         echo "白天天气 $dayweather48        风速:$daywind48        最高温度:$daytemp48 ℃" >> ~/.weather/Wuhan.weather
  30.         echo "晚间天气 $nightweather48        风速:$nightwind48        最低温度:$nighttemp48 ℃" >> ~/.weather/Wuhan.weather
  31. fi
复制代码

在conky中运行,就有天气预报了。

花招4                新闻
    经常上新浪,觉得里面的新闻时效性很强,甚至有滚动新闻,一分钟刷一次,这个是不是也可以当下来贴在conky上?(初学,这个脚本有些混乱,性能也很差,如果有高手告诉我怎么弄就太感谢了;另外,不用这个方法也可以,不是有著名的RSS么?这里只是好玩,不要鄙视我)
    第一步,得把新浪的滚动新闻列表下载下来,我使用一个命令:
  1. lynx -source http://news.sina.com.cn/news1000/index.shtml|grep \<li\>|iconv -f GB18030 -t UTF8|cut -c18-|sed 's/ target=_blank>/@/'|sed 's/<.*\>//' > ~/.sina_new/news.sina
复制代码
放到.sina_new/news.sina中,格式是“地址@标题”,便于下一步获得新闻内容。
   第二步,每次取出最顶端的一条新闻,通过地址把它下载下来,然后析取其中文字部分。由于我的shell太菜,搞了很久也没有搞出能去掉网页上那么多乱七八糟的标签和代码,只好使用了一个卑鄙的办法,使用w3m [html url] >>  file 搞到文本。然后大致的修剪了一下文本,只能保证大部分网页完整,多几个奇怪的符号我就不管了。
newtext.sh
  1. mv ~/.sina_new/news.sina ~/.sina_new/news.old
  2. sed '1d' ~/.sina_new/news.old > ~/.sina_new/news.sina
  3. rm ~/.sina_new/news.old
  4. url=`sed -n '1p'  ~/.sina_new/news.sina|cut -d@ -f1`
  5. echo $url
  6. w3m $url > ~/.sina_new/source.new
  7. startline=`cat ~/.sina_new/source.new -n|grep '*'|sed -n '1p'|cut -f1`
  8. endline=`cat ~/.sina_new/source.new -n|grep '发表评论'|sed -n '1p'|cut -f1|tr -d ' '`
  9. if [ $startline ]
  10. then
  11.         startline=1
  12. fi
  13. #if [ $endline ]
  14. #then
  15. #        endline=50
  16. #fi
  17. echo startline=$startline
  18. echo endline=$endline
  19. echo " echo -n Sina News:  > ~/.sina_new/current.new" > ~/.sina_new/temp.sh
  20. echo "sed -n '1p' ~/.sina_new/news.sina|cut -d@ -f2 >> ~/.sina_new/current.new" >> ~/.sina_new/temp.sh
  21. echo -n "sed -n '" >> ~/.sina_new/temp.sh
  22. echo -n $startline >> ~/.sina_new/temp.sh
  23. echo -n "," >> ~/.sina_new/temp.sh
  24. echo -n $endline >> ~/.sina_new/temp.sh
  25. echo "p' ~/.sina_new/source.new |sed '1d'|sed '/[adfshow]/d'|sed '1d'|sed '2,3d'|sed '/^$/d'|sed '/发表/d'|sed '1d'>> ~/.sina_new/current.new" >> ~/.sina_new/temp.sh
  26. chmod 755 ~/.sina_new/temp.sh
  27. ~/.sina_new/temp.sh
复制代码

这里我有不懂的地方,就是算出起始行和终止行放到变量里,如何直接使用sed或者grep去掉其余的行?这个脚本我用了一半代码生成一个新脚本temp.sh,使用temp.sh创建新闻文本current.new。显然这个方法不好,请那位帮我?

我把两个脚本绑定到我的两个键上:
  1. #sina news:
  2. Key KP_Add        A N   Exec exec lynx -source http://news.sina.com.cn/news1000/index.shtml|grep \<li\>|iconv -f GB18030 -t UTF8|cut -c18-|sed 's/ target=_blank>/@/'|sed 's/<.*\>//' > ~/.sina_new/news.sina
  3. Key KP_Enter         A N   Exec exec ~/.sina_new/newtext.sh
复制代码

这样按一下小键盘上的加号键就自动下载最新新闻列表,按一下小键盘的回车就查看条新闻。


由于conky版面有限,加上新闻的字不能太小,我只好把邮件检查放弃了(反正邮箱也没怎么用过),这是我的.conkyrc
  1. background yes
  2. use_xft yes
  3. xftfont VeraSansYuanTi:size=10
  4. xftalpha 0.8
  5. update_interval 2.0
  6. total_run_times 0
  7. own_window no
  8. double_buffer yes
  9. minimum_size 280 10
  10. draw_shades yes
  11. draw_outline no
  12. draw_borders no
  13. stippled_borders 8
  14. border_margin 4
  15. border_width 1
  16. default_color white
  17. default_shade_color black
  18. default_outline_color white
  19. alignment top_left
  20. gap_x 24
  21. gap_y 24
  22. no_buffers yes
  23. uppercase no
  24. cpu_avg_samples 2
  25. net_avg_samples 2
  26. override_utf8_locale yes
  27. use_spacer yes
  28. TEXT
  29. ${color gray}登录时间: ${color }$uptime
  30. ${color gray}核心:${color } $kernel
  31. ${color gray}CPU:${color } $cpu% 温度:${acpitemp}`C
  32. ${color gray}系统负载: ${color }$loadavg
  33. ${color gray}进程数: ${color }$processes        活跃进程数:   ${color }$running_processes
  34. ${color gray}CPU占用:
  35. ${color lightgrey} ${top name 2}${top_mem cpu 2}
  36. ${color lightgrey} ${top name 3}${top_mem cpu 3}
  37. ${color gray}内    存: ${membar 3,100} ${color }
  38. $memperc% $mem/$memmax
  39. ${color gray}交换空间: ${swapbar 3,100}${color }
  40. $swapperc% $swap/$swapmax
  41. ${color gray}Root   : ${fs_bar 3,100 /}${color }
  42. ${fs_used /}/${fs_size /}
  43. ${color gray}Media  : ${fs_bar 3,100 /media}${color }
  44. ${fs_used /media}/${fs_size /media}
  45. ${color gray}网络状况:
  46. ${color}上传速度: ${color }${upspeed eth0} k/s 上传总量:${totalup eth0}
  47. ${color}下载速度: ${color }${downspeed eth0}k/s${color} 下载总量:${totaldown eth0}
  48. ${color}${exec cat ~/.weather/Wuhan.weather}
  49. ${color}${exec ~/.xmms/.xmms.sh}
复制代码


搞定。
55555,对不起我下面的签名阿,又玩了一夜。困死了。
发表于 2005-11-15 15:48:57 | 显示全部楼层
这么好的帖子怎么没人顶呢?
回复 支持 反对

使用道具 举报

发表于 2005-11-15 18:54:15 | 显示全部楼层
顶   

用perl写可能速度快些
回复 支持 反对

使用道具 举报

发表于 2005-11-15 20:22:25 | 显示全部楼层
有个问题想请教,那个显示天气的设置应该怎么弄呢,那些代码写到哪里啊,不懂啊,
我把它保存成一个.sh文件,然后是不是用.conkyrc来引用它,不过好像不起作用


PS:
else
        echo "武汉地区未来24小时天气情况" > ~/.weather/Wuhan.weather
        echo "白天天气 $dayweather24        风速daywind24   最高温度daytemp24 ℃" >> ~/.weather/Wuhan.weather
        echo "晚间天气 $nightweather24      风速nightwind24 最低温度nighttemp24 ℃" >> ~/.weather/Wuhan.weather
        echo "武汉地区未来48小时天气情况" >> ~/.weather/Wuhan.weather
        echo "白天天气 $dayweather48        风速daywind48   最高温度daytemp48 ℃" >> ~/.weather/Wuhan.weather
        echo "晚间天气 $nightweather48      风速nightwind48 最低温度nighttemp48 ℃" >> ~/.weather/Wuhan.weather
fi

这个fi是不是写错了?查了一下资料没错,呵呵
回复 支持 反对

使用道具 举报

发表于 2005-11-16 00:23:13 | 显示全部楼层
请问楼主的 locale是什么   

我的torsmo 显示不了中文  conky也不行

我自己是zh_CN
回复 支持 反对

使用道具 举报

发表于 2005-11-16 09:44:58 | 显示全部楼层
Post by libo1018
请问楼主的 locale是什么   

我的torsmo 显示不了中文  conky也不行

我自己是zh_CN


同上,我的condy也不能显示中文,还有楼上的zh_CN,到底是什么locale ,是GBK,还是GB2312,还是其他的?
回复 支持 反对

使用道具 举报

发表于 2005-11-16 16:03:11 | 显示全部楼层
呼唤楼主,不能显示中文啊,郁闷,搞了一个上午还是不行!!
回复 支持 反对

使用道具 举报

发表于 2005-11-16 23:30:02 | 显示全部楼层
把.conkyrc(以及打算在里面显示的任何文本)转换成utf8编码,debian locale=zh_CN.GBK测试通过

转换文件编码用 iconv -f GBK -t UTF8 file
回复 支持 反对

使用道具 举报

发表于 2005-11-17 08:14:07 | 显示全部楼层
Post by manux
override_utf8_locale no

同时把.conkyrc(以及打算在里面显示的任何文本)转换成utf8编码,debian locale=zh_CN.GBK测试通过



一定要用UTF-8 来显示吗,为什么用自己原来的locale不能正常显示呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-20 18:17:14 | 显示全部楼层
我一直使用的都是utf8,至于gbk或者gb2312能不能支持,我小试了一下,好象有问题。可能conky对gbk不支持把?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表