桌面气泡通知 (Desktop notifications )
效果图:
守护进程中调用不生效,因为守护进程对图形和终端有一定的限制。可以打印信息到文件里,或者写syslog。
Libnotify
Libnotify 是Qt和GTK图形的一个扩展,已经广泛的应用于许多开源程序,如:Evolution和Pidgin。Libnotify会在安装libnotify时被安装。
使用libnotify必须安装 notification server.
Notification servers
内置
下面的桌面环境中使用自己实现的显示通知,你不能代替他们。他们的通知服务器在登录时自动启动通过的DBus接收来自应用程序的通知。
- Cinnamon provides a notification server itself. Notifications are displayed at the top right corner of the screen.
- Enlightenment provides a notification server through its Notification extension. Notification options are configurable.
- GNOME provides a notification server itself. Notifications are displayed at the top of the screen.
- KDE Plasma provides a notification server itself. Notifications are displayed at the bottom right corner of the screen.
独立
在其他的桌面环境中, notification server 需要通过 WM"s/DE"s "autostart" 选项启动. (它可以通过的DBus第一个i会话被推出,但是这不是很理想,因为它需要全局配置.)
You can choose one of the following implementations:
- Avant Window Navigator — A notification-daemon applet is available for AWN.
- https://github.com/p12tic/awn-extras || awn-extras-appletsAUR
- Deepin Notifications — Notification server for Deepin.
- https://github.com/linuxdeepin/deepin-notifications || deepin-notifications
- Dunst — Minimalistic notification daemon for Linux designed to fit nicely into minimalistic windowmanagers like dwm.
- http://www.knopwob.org/dunst/ || dunst
- LXQt Notification Daemon — Notification server for LXQt.
- https://github.com/lxde/lxqt-notificationd || lxqt-notificationd
- Notification Daemon — The notification server used by GNOME Flashback.
- https://github.com/GNOME/notification-daemon || notification-daemon
- You can run it manually using
/usr/lib/notification-daemon-1.0/notification-daemon.
- MATE Notification Daemon — Notification server for MATE.
- https://github.com/mate-desktop/mate-notification-daemon/ || GTK+ 2: mate-notification-daemon, GTK+ 3 (experimental): mate-notification-daemon-gtk3
- Notify OSD — Notification server for Unity.
- https://launchpad.net/notify-osd || notify-osd
- statnot — Small, lightweight notification daemon that can output notifications to the root window"s title, stdout or FIFO pipes, making it integrate very well with tiling window managers.
- https://github.com/halhen/statnot || statnotAUR
- twmn — Notification system for tiling window managers.
- https://github.com/sboli/twmn || twmn-gitAUR
- Xfce Notification Daemon — Notification server for Xfce.
- http://goodies.xfce.org/projects/applications/xfce4-notifyd || xfce4-notifyd
-
Tip: To configure xfce4-notifyd, run the following command:
xfce4-notifyd-config.
在程序中用法
在许多编程语言中,您可以通过 GObject-Introspection或bindings很容易地编写你自己的libnotify显示消息,也可以简单地使用bash。
下面是实现“Hello world”气泡消息的简单示例
Bash
- Dependency: libnotify
hello_world.sh
#!/bin/bash notify-send "Hello world!" "This is an example notification." --icon=dialog-informationTip:
- 可用的内置图标概述e...http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html(也可以自定义图标)
- 要以root运行一个后台脚本发送桌面通知(更换用户与用户运行的X):
# sudo -u X_user DISPLAY=:0 notify-send "Hello world!" "This is an example notification."
Boo
- Dependency: notify-sharp-3 (boo)
- Makedependency: boo
- Build with:
booc hello_world.boo - Run with:
mono hello_world.exe(orbooi hello_world.boo)
hello_world.boo
import Notifications from "notify-sharp" Hello = Notification() Hello.Summary = "Hello world!" Hello.Body = "This is an example notification." Hello.IconName = "dialog-information" Hello.Show()
C
- Dependency: libnotify
- Build with:
gcc -o hello_world `pkg-config --cflags --libs libnotify` hello_world.c
hello_world.c
#include <libnotify/notify.h>
void main () {
notify_init ("Hello world!");
NotifyNotification * Hello = notify_notification_new ("Hello world", "This is an example notification.", "dialog-information");
notify_notification_show (Hello, NULL);
g_object_unref(G_OBJECT(Hello));
notify_uninit();
}
C++
- Dependency: libnotifymmAUR
- Build with:
g++ -o hello_world `pkg-config --cflags --libs libnotifymm-1.0` hello_world.cc
hello_world.cc
#include <libnotifymm.h>
int main(int argc, char *argv[]) {
Notify::init("Hello world!");
Notify::Notification Hello("Hello world", "This is an example notification.", "dialog-information");
Hello.show();
}
C#
- Dependency: notify-sharp-3
- Build with:
mcs -pkg:notify-sharp-3.0 hello_world.cs - Run with:
mono hello_world.exe
hello_world.cs
using Notifications;
public class HelloWorld {
static void Main() {
var Hello = new Notification();
Hello.Summary = "Hello world!";
Hello.Body = "This is an example notification.";
Hello.IconName = "dialog-information";
Hello.Show();
}
}
Cobra
- Dependency: notify-sharp-3
- Makedependency: cobraAUR[broken link: archived in aur-mirror]
- Build with:
cobra -c hello_world - Run with:
mono hello_world.exe
hello_world.cs
@args -pkg:notify-sharp-3.0
use Notifications
class HelloWorld
def main
hello = Notification()
hello.summary = "Hello world!"
hello.body = "This is an example notification."
hello.iconName = "dialog-information"
hello.show
F#
- Dependency: notify-sharp-3
- Makedependency: fsharpAUR
- Build with:
fsharpc -r:notify-sharp.dll -I:/usr/lib/mono/notify-sharp-3.0/ -I:/usr/lib/mono/gtk-sharp-3.0/ hello_world.fs - Run with:
mono hello_world.exe
hello_world.fs
open Notifications let Hello = new Notification() Hello.Summary <- "Hello world!" Hello.Body <- "This is an example notification." Hello.IconName <- "dialog-information" Hello.Show()
Genie
- Dependency: libnotify
- Makedependency: vala
- Build with:
valac --pkg libnotify hello_world.gs
hello_world.gs
uses
Notify
init
Notify.init ("Hello world")
var Hello=new Notification ("Hello world!","This is an example notification.","dialog-information")
Hello.show ()
Groovy
- Dependencies: groovy, java-gnomeAUR
- Build with:
groovyc -cp /usr/share/java/gtk.jar HelloWorld.groovy && jar cfe HelloWorld.jar HelloWorld HelloWorld.class - Run with:
java -cp /usr/share/groovy/embeddable/groovy-all.jar:/usr/share/java/gtk.jar:HelloWorld.jar HelloWorld(orgroovy -cp /usr/share/java/gtk.jar HelloWorld.groovy)
HelloWorld.groovy
import org.gnome.gtk.*
import org.gnome.notify.*
Gtk.init()
Notify.init("Hello world")
def Hello = new Notification("Hello world!", "This is an example notification.", "dialog-information")
Hello.show()
Java
- Dependency: java-gnomeAUR
- Makedependency: java-environment
- Build with:
javac -cp /usr/share/java/gtk.jar HelloWorld.java && jar cfe HelloWorld.jar HelloWorld HelloWorld.class - Run with:
java -cp /usr/share/java/gtk.jar:HelloWorld.jar HelloWorld
HelloWorld.java
import org.gnome.gtk.Gtk;
import org.gnome.notify.Notify;
import org.gnome.notify.Notification;
public class HelloWorld
{
public static void main(String[] args) {
Gtk.init(args);
Notify.init("Hello world");
Notification Hello = new Notification("Hello world!", "This is an example notification.", "dialog-information");
Hello.show();
}
}
JavaScript
- Dependencies: libnotify, gjs (works also with seed)
hello_world.js
#!/usr/bin/gjs
const Notify = imports.gi.Notify;
Notify.init ("Hello world");
var Hello=new Notify.Notification ({summary: "Hello world!",
body: "This is an example notification.",
"icon-name": "dialog-information"});
Hello.show ();
Lua
- Dependencies: libnotify, lua-lgi
hello_world.lua
#!/usr/bin/lua
lgi = require "lgi"
Notify = lgi.require("Notify")
Notify.init("Hello world")
Hello=Notify.Notification.new("Hello world","This is an example notification.","dialog-information")
Hello:show()
Perl
- Dependencies: libnotify, perl-glib-object-introspectionAUR
hello_world.pl
#!/usr/bin/perl
use Glib::Object::Introspection;
Glib::Object::Introspection->setup (
basename => "Notify",
version => "0.7",
package => "Notify");
Notify->init;
my $hello = Notify::Notification->new("Hello world!", "This is an example notification.", "dialog-information");
$hello->show;
Python
- Dependencies: libnotify, python-gobject (or python2-gobject for Python 2)
hello_world.py
#!/usr/bin/python
from gi.repository import Notify
Notify.init("Hello world")
Hello=Notify.Notification.new("Hello world", "This is an example notification.", "dialog-information")
Hello.show()
Ruby
- Dependencies: libnotify, ruby-gir_ffiAUR[broken link: archived in aur-mirror]
hello_world.rb
#!/usr/bin/ruby
require "gir_ffi"
GirFFI.setup :Notify
Notify.init("Hello world")
Hello = Notify::Notification.new("Hello world!", "This is an example notification.", "dialog-information")
Hello.show
Rust
- Dependencies: rust and cargo-binAUR (or just multirustAUR)
- notification crate: notify-rust
hello_world.rs
extern crate notify_rust;
use notify_rust::Notification;
fn main(){
Notification::new()
.summary("Hello world")
.body("This is an example notification")
.icon("dialog-information")
.show();
}
Scala
- Dependency: java-gnomeAUR (and scala)
- Makedependency: scala
- Build with:
scalac -cp /usr/share/java/gtk.jar -d HelloWorld.jar HelloWorld.scala - Run with:
java -cp /usr/share/java/gtk.jar:HelloWorld.jar HelloWorld(orscala -cp /usr/share/java/gtk.jar HelloWorld.scala)
HelloWorld.scala
import org.gnome.gtk._
import org.gnome.notify._
object HelloWorld {
def main(args: Array[String]) {
Gtk.init(args)
Notify.init("Hello world")
var Hello = new Notification("Hello world!", "This is an example notification.", "dialog-information")
Hello.show()
}
}
Vala
- Dependency: libnotify
- Makedependency: vala
- Build with:
valac --pkg libnotify hello_world.vala
hello_world.vala
using Notify;
public class HelloWorld {
static void main () {
Notify.init ("Hello world");
var Hello = new Notification("Hello world!", "This is an example notification.", "dialog-information");
Hello.show ();
}
}
Visual Basic .NET
- Dependency: notify-sharp-3
- Makedependency: mono-basic
- Build with:
vbnc -r:/usr/lib/mono/notify-sharp-3.0/notify-sharp.dll hello_world.vb - Run with:
mono hello_world.exe
hello_world.vb
Imports Notifications Public Class Hello Public Shared Sub Main Dim Hello As New Notification Hello.Summary = "Hello world!" Hello.Body = "This is an example notification." Hello.IconName = "dialog-information" Hello.Show End Sub End Class
另见
- Libnotify 手册:https://developer.gnome.org/libnotify/
- C 实例:http://milky.manishsinha.net/2009/03/29/working-with-libnotify/
- Python 实例(french article):https://hashbang.fr/tutoriel-notify.html
-
官网资料:https://wiki.archlinux.org/index.php/Desktop_notifications
-
气泡中图标资料:http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
- 上一篇:没有了
- 下一篇:没有了
