转:http://blog.csdn.net/crazyleen/article/details/6252073
写成daemon程序,发现ubuntu里面的这个气泡提示很好,就网上淘了些资料,现在整理出来。
ubuntu的气泡提示是使用notify-osd来实现的,我们需要下载libnotify,
apt-get install notify-osd (ubuntu 已经自带)
apt-get install libnotify-dev
其实shell里面也可发送气泡提示,命令为notify-send,需要安装libnotify-bin
apt-get install libnotify-bin
usage:
notify-send Test “Hello World”
notify-send “Message Title” “The message body is shown here” -i /usr/share/pixmaps/apple-green.png -t 1000
ps:icon can be a png, xpm or jpg file
截图来看看:


C语言中,我们使用的是notify库,可查阅官方资料
Libnotify Reference Manual:
http://library.gnome.org/devel/libnotify/0.7/
一定要习惯阅读英文manual.多点看,慢慢就习惯了
我自己写的一个C文件:
[c-sharp] view plaincopy
[list=1]
[]/
[] * Copyright (C) 2011 crazyleen <357228736@qq.com>, All Rights Reserved.
[] *
[] * This program is free software; you can redistribute it and/or modify
[] * it under the terms of the GNU General Public License version 2 as
[] * published by the Free Software Foundation.
[] *
[] * This program is distributed in the hope that it will be useful,
[] * but WITHOUT ANY WARRANTY; without even the implied warranty of
[] * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
[] * GNU General Public License for more details.
[] *
[] * HOWTO:
[] * $(CC) $(Flags) -c mynotify.c -o mynotify.o pkg-config --cflags --libs gtk+-2.0 -l notify
[] /
[]#include <libnotify/notify.h>
[]#include “mynotify.h”
[]int notification_show(char title, char body, char icon)
[]{
[] GError error = NULL;
[] NotifyNotification notify_p;
[] if (title == NULL)
[] return -1;
[] //you should init notify using app’s name
[] if(notify_is_initted() == FALSE)
[] if(notify_init(“argv[0]”) == FALSE){
[] return -1;
[] }
[]
[] notify_p = notify_notification_new(title, body, icon, NULL);
[]
[] //miliseconds, NOTIFY_EXPIRES_DEFAULT NOTIFY_EXPIRES_NEVER
[] notify_notification_set_timeout(notify_p, 1000);
[]
[] //NOTIFY_URGENCY_LOW,NOTIFY_URGENCY_NORMAL, NOTIFY_URGENCY_CRITICAL,
[] notify_notification_set_urgency (notify_p,NOTIFY_URGENCY_NORMAL);
[] //notify_notification_update(title, body, icon, NULL);
[] //notify_notification_close(notify_p, &error);
[] if (notify_notification_show(notify_p, &error) == FALSE)
[] return -1;
[] //notify_uninit();
[] return 0;
[]}
[/list]
测试一下函数:
[c-sharp] view plaincopy
[list=1]
[]/ file.c
[] * Copyright (C) 2011 crazyleen <357228736@qq.com>, All Rights Reserved.
[] *
[] * This program is free software; you can redistribute it and/or modify
[] * it under the terms of the GNU General Public License version 2 as
[] * published by the Free Software Foundation.
[] *
[] * This program is distributed in the hope that it will be useful,
[] * but WITHOUT ANY WARRANTY; without even the implied warranty of
[] * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
[] * GNU General Public License for more details.
[] /
[]#include <stdio.h>
[]#include <string.h>
[]#include <unistd.h>
[]#include “mynotify.h”
[]int main(char argc, char argv[])
[]{
[] notification_show(“cheery”, “here is body…”, “/usr/share/pixmaps/apple-green.png”);
[] sleep(10);
[] notification_show(“cheery”, NULL, NULL);
[] printf(“UNIX/n”);
[] return 0;
[*]}
[/list]
效果还可以,正常显示,就是那个时间设置没起作用,每次都是系统默认的,这个气泡提示用于偶尔的消息通知挺好的,但是一定不能连续使用,因为这个冒泡显示是延时一点时间的,不能马上显示出下一条消息,必须等上一条消息淡化退出后才能显示下一条消息,这或许也算是一个bug吧
以下是我程序运行的效果
