You are not logged in.

#326 2013-03-08 08:05:12

knopwob
Member
From: Hannover, Germany
Registered: 2010-01-30
Posts: 237
Website

Re: dunst - a dmenu-ish notification daemon

progandy wrote:
knopwob wrote:
progandy wrote:

The U is AFAIK a bug. It should only show when the notification has associated URLs.
Edit: It is a bug in the URL detection. x.y is recognized as a link.

exactly. an A would indicate an Action btw. and the url detection gets a lot of false positives. But I prefer this to wrongly not detected urls. patches that improve url detection are welcome. see menu.c

I added a commit to my fork, feel free to cherry-pick this and any other commit I made
https://github.com/progandy/dunst/commi … 78ee1a0288

I've picked most of your commits (not yet pushed to my github) except for the two icon related commits. I've not yet decided wether I want to merge those, since I'm thinking about adding real icon support. Anyway thank you for your efforts.

Offline

#327 2013-03-08 08:36:00

knopwob
Member
From: Hannover, Germany
Registered: 2010-01-30
Posts: 237
Website

Re: dunst - a dmenu-ish notification daemon

zequav wrote:

The last version in git broke -geometry x1 for me (no longer spans the whole monitor, behaves like 0x1).

This should be fixed.


zequav wrote:

Also, my script to send notifications via dbus doesn't work anymore (it works fine on 0.5.0):

dbus-send --type=method_call --dest='org.freedesktop.Notifications' \
/org/freedesktop/Notifications org.freedesktop.Notifications.Notify \
string:"$1" \
uint32:1 \
string:'' \
string:"$2" \
string:"$3" \
array:string:'' \
dict:string:string:'','' \
int32:1000

I use it instead of notify-send because with this script if there is a notification showing, it gets replaced by the new one (it doesn't wait for timeouts). Useful for volume/brightness shortcuts smile. In the git version I don't see anything when I use this script.

Yes, I know. The problem is that I now use glib for dbus which checks the types of the parameters to method calls. Your script doesn't work anymore because the interface specifies that the hints are a dictionary of strings and variants but dbus-send doesn't support this type. And I currently don't know of a way to disable this typechecking within glib.

As a workaround you can replace your script with this python script, which should work the same way:

#!/usr/bin/env python2

import pynotify
import sys


(appname, summary, body) = ("", "", "")
try:
    appname = sys.argv[1]
    summary = sys.argv[2]
    body = sys.argv[3]
except:
    pass

pynotify.init(appname)
n = pynotify.Notification(summary, body)
n.props.id = 1
n.show()

That script depends on python2-notify

Offline

#328 2013-03-08 09:57:10

zequav
Member
Registered: 2013-03-02
Posts: 9

Re: dunst - a dmenu-ish notification daemon

knopwob wrote:

As a workaround you can replace your script with this python script, which should work the same way

It works, but being a python script there is a significant lag between the execution and the notification, whereas with notify-send or dbus-send the notification is immediate. It gets a bit annoying when changing volume/brightness.

I've been trying to patch notify-send but there doesn't seem to be an interface to libnotify C to set the notification id (I don't know how dbus-send or python do it).

Oh well, I'll stay with dunst-0.5.0 for the time being.

Thanks.

Offline

#329 2013-03-08 15:56:33

knopwob
Member
From: Hannover, Germany
Registered: 2010-01-30
Posts: 237
Website

Re: dunst - a dmenu-ish notification daemon

@zequav Have a look at RELEASE_NOTES.next in the git repository. Especially the section about dunstify. It's a replacement for notify-send that I've written since notify-send lacks some features that I needed for testing. But since it uses private parts of libnotify it may break on any update on libnotify. That's why I regard it as unofficial and don't want to promote it much.

Offline

#330 2013-03-08 16:46:07

progandy
Member
Registered: 2012-05-17
Posts: 2,152

Re: dunst - a dmenu-ish notification daemon

knopwob wrote:

@zequav Have a look at RELEASE_NOTES.next in the git repository. Especially the section about dunstify. It's a replacement for notify-send that I've written since notify-send lacks some features that I needed for testing. But since it uses private parts of libnotify it may break on any update on libnotify. That's why I regard it as unofficial and don't want to promote it much.

Here is an example script that stores the first notification id and reuses it:

#!/bin/sh
nid_file="/tmp/persist_id_$UID.nid"

[ -f "$nid_file" ] && read notifyid < "$nid_file"
[ -n "$notifyid" ] && replace=" -r $notifyid " || replace=""

../dunstify $replace -p "$(date)" > $nid_file

Offline

#331 2013-03-09 17:07:55

zequav
Member
Registered: 2013-03-02
Posts: 9

Re: dunst - a dmenu-ish notification daemon

knopwob wrote:

@zequav Have a look at RELEASE_NOTES.next in the git repository. Especially the section about dunstify. It's a replacement for notify-send that I've written since notify-send lacks some features that I needed for testing. But since it uses private parts of libnotify it may break on any update on libnotify. That's why I regard it as unofficial and don't want to promote it much.

progandy wrote:

Here is an example script that stores the first notification id and reuses it

Yep, with dunstify everything works fine and fast, thank you both. I'm adding "doexe dunstify" to my dunst-9999.ebuild.

But... it flickers. I see you close the old notification and create a new one, instead of replacing its contents. I've had to patch notification.c to fix it (it also removes the dup count; I don't like it):

--- dunst.orig/notification.c	2013-03-09 17:48:22.144786639 +0100
+++ dunst/notification.c	2013-03-09 17:58:44.306710303 +0100
@@ -314,13 +314,14 @@
 
         n->dup_count = 0;
 
-        /* check if n is a duplicate */
+        /* check if n replaces another notif. */
         for (GList * iter = g_queue_peek_head_link(queue); iter;
              iter = iter->next) {
                 notification *orig = iter->data;
-                if (strcmp(orig->appname, n->appname) == 0
-                    && strcmp(orig->msg, n->msg) == 0) {
-                        orig->dup_count++;
+                if (id == orig->id) {
+                        char *msg = n->msg;
+                        n->msg = orig->msg;
+                        orig->msg = msg;
                         notification_free(n);
                         wake_up();
                         return orig->id;
@@ -330,9 +331,10 @@
         for (GList * iter = g_queue_peek_head_link(displayed); iter;
              iter = iter->next) {
                 notification *orig = iter->data;
-                if (strcmp(orig->appname, n->appname) == 0
-                    && strcmp(orig->msg, n->msg) == 0) {
-                        orig->dup_count++;
+                if (id == orig->id) {
+                        char *msg = n->msg;
+                        n->msg = orig->msg;
+                        orig->msg = msg;
                         orig->start = time(NULL);
                         notification_free(n);
                         wake_up();

Ugly hack (only updates msg, does not update color/urgency/urls/whatever), but I prefer simple patches, and it works for my use case smile

Offline

#332 2013-03-11 19:24:55

Šaran
Member
From: Bosnia
Registered: 2011-09-03
Posts: 407

Re: dunst - a dmenu-ish notification daemon

Any ideas on how to send notification to dunst from root?

Offline

#333 2013-03-11 20:54:28

progandy
Member
Registered: 2012-05-17
Posts: 2,152

Re: dunst - a dmenu-ish notification daemon

Šaran wrote:

Any ideas on how to send notification to dunst from root?

That is not directly possible. You will have to somehow find the dbus session address. Maybe use the environment file of a dbus process, use setuid and then send the dbus messages.
http://stackoverflow.com/questions/6496 … us-session

targetuid=1000
for x in $(pgrep --uid $targetuid dbus); do
   dbus=$(cat /proc/$x/environ | grep -ao "DBUS_SESSION_BUS_ADDRESS[^\0]*")
   [ -n "$dbus" ] && break
done
# works only in zsh (EUID read-only in bash)
EUID=$targetuid
eval "export $dbus"
notify-send "hello from root"
EUID=0

Last edited by progandy (2013-03-11 21:10:39)

Offline

#334 2013-03-11 21:43:47

Šaran
Member
From: Bosnia
Registered: 2011-09-03
Posts: 407

Re: dunst - a dmenu-ish notification daemon

Thanks progandy, but I think I'm onto something.

If I allow anyone from localhost to connect to X server with "xhost +localhost" and export DISPLAY=:0 as root, notification sent via notify-send is shown.

I have added DISPLAY=:0 as Environment variable in service file which calls the script sending notifications, but dunst segfaults instead of showing notification on event that triggers notify-send (plugging phone in and out).

[   28.304860] usb 2-1.3: new high-speed USB device number 4 using ehci-pci
[   28.563325] dunst[868]: segfault at 28 ip 00007f8c5f9f4c0d sp 00007fffd141fd10 error 4 in libxdg-basedir.so.1.2.0[7f8c5f9f3000+3000]
[   28.650749] dunst[872]: segfault at 28 ip 00007f8628b86c0d sp 00007fff6acae0f0 error 4 in libxdg-basedir.so.1.2.0[7f8628b85000+3000]
[   28.751983] systemd-journald[112]: Failed to write entry, ignoring: Argument list too long
[   28.931422] systemd-journald[112]: Failed to write entry, ignoring: Argument list too long
[   29.101964] fuse init (API version 7.20)
[   32.212718] usb 2-1.3: USB disconnect, device number 4
[   32.270969] dunst[1010]: segfault at 28 ip 00007f0b86b99c0d sp 00007fff10d2fb60 error 4 in libxdg-basedir.so.1.2.0[7f0b86b98000+3000]
[   32.312428] dunst[1014]: segfault at 28 ip 00007fb4d51a5c0d sp 00007fff698a11b0 error 4 in libxdg-basedir.so.1.2.0[7fb4d51a4000+3000]
[   32.396900] systemd-journald[112]: Failed to write entry, ignoring: Argument list too long
[   32.474708] systemd-journald[112]: Failed to write entry, ignoring: Argument list too long
[   35.213072] usb 2-1.3: new high-speed USB device number 5 using ehci-pci
[   35.425459] dunst[1127]: segfault at 28 ip 00007f1bd7102c0d sp 00007fffb542b030 error 4 in libxdg-basedir.so.1.2.0[7f1bd7101000+3000]
[   35.465523] dunst[1131]: segfault at 28 ip 00007f3051ac3c0d sp 00007fff467c3f60 error 4 in libxdg-basedir.so.1.2.0[7f3051ac2000+3000]
[   35.525485] systemd-journald[112]: Failed to write entry, ignoring: Argument list too long
[   35.603635] systemd-journald[112]: Failed to write entry, ignoring: Argument list too long
[   37.073078] usb 2-1.3: USB disconnect, device number 5
[   37.131764] dunst[1196]: segfault at 28 ip 00007fc4cbd2bc0d sp 00007fff3934fbc0 error 4 in libxdg-basedir.so.1.2.0[7fc4cbd2a000+3000]
[   37.183781] dunst[1209]: segfault at 28 ip 00007fbccb6cec0d sp 00007fff3f8e2820 error 4 in libxdg-basedir.so.1.2.0[7fbccb6cd000+3000]

If I login as root and send some random notification, it stops segfaulting on notifications from my script.

EDIT: I will get some useful debugging info tomorrow, I'm off to sleep now.

Last edited by Šaran (2013-03-11 21:49:48)

Offline

#335 2013-03-11 22:47:26

knopwob
Member
From: Hannover, Germany
Registered: 2010-01-30
Posts: 237
Website

Re: dunst - a dmenu-ish notification daemon

it looks like it tries to start a new instance of dunst. And I assume, when you've got it "working" with root, that there are in fact two instances of dunst running, one for root and one for your user.

It might be easier to let your root-script write to a temporary file and watch that file with a script running as your user.

#!/bin/bash

watch_file=/tmp/foobar
#make sure $watch_file exists
touch $watch_file

while true; do
    # this will block until $watch_file has been written to
    # inotifywait is in inotify-tools package
    inotifywait -e modify $watch_file
    notify-send "$(tail -n 1 $watch_file)"
done

this is untested

Offline

#336 2013-03-12 14:57:52

Šaran
Member
From: Bosnia
Registered: 2011-09-03
Posts: 407

Re: dunst - a dmenu-ish notification daemon

Script works great, thanks.

I have been playing with notify-send some more to confirm your theory, but it doesn't add up.
Notifications get shown only if notification has already been sent from root via notify-send.
If I kill both root and user instances of dunst and logout from root, notifications still appear, but this doesn't
survive X restart.

Offline

#337 2013-04-04 01:04:38

kanazky
Member
From: Vancouver, Canada
Registered: 2011-11-02
Posts: 60

Re: dunst - a dmenu-ish notification daemon

Dunst works great, its the Notification Daemon that works well for me.

I had a question though, is it possible to change the background on a per app basis? Like for instance on a Bitlbee notification I want a blue background and for Facebook. and for say Irssi Notification I want a brown Background for IRC and maybe a purple one for twitter, and red for RemoteDesktopNotifier.

Obs for 3 varients u could use low, crit and urget... but I have 4-5 apps that notify and would like individual background colors for each. Is this possible?


Archlinx + DWM big_smile I love Wingo-WM Bring it back!!

Offline

#338 2013-04-04 01:31:22

irtigor
Member
Registered: 2011-01-21
Posts: 44

Re: dunst - a dmenu-ish notification daemon

That's possible. The config file has some examples.

Offline

#339 2013-04-04 15:41:41

Doomcide
Member
Registered: 2011-08-22
Posts: 221

Re: dunst - a dmenu-ish notification daemon

kanazky wrote:

Dunst works great, its the Notification Daemon that works well for me.

I had a question though, is it possible to change the background on a per app basis? Like for instance on a Bitlbee notification I want a blue background and for Facebook. and for say Irssi Notification I want a brown Background for IRC and maybe a purple one for twitter, and red for RemoteDesktopNotifier.

Obs for 3 varients u could use low, crit and urget... but I have 4-5 apps that notify and would like individual background colors for each. Is this possible?

You can use notify-send for this. I for example use `notify-send -t 50 -h string:fgcolor:red' for audio-notifications. Just look up the respective option on the notify-send manpage.

Offline

#340 2013-04-04 16:03:14

progandy
Member
Registered: 2012-05-17
Posts: 2,152

Re: dunst - a dmenu-ish notification daemon

To change the color of a notification not sent with notify-send, use the rules in dunstrc. You can change timeout, urgency, foreground, background, format, and script. Match the notification with appname, summary, body, and/or icon using shell wildcard patterns.
Use e.g. appname to match the notification and then set "foreground" and "background".

Last edited by progandy (2013-04-04 16:03:45)

Offline

#341 2013-04-17 02:31:54

Hspasta
Member
Registered: 2011-12-24
Posts: 187
Website

Re: dunst - a dmenu-ish notification daemon

Question about fonts.

How is it that the 'Fixed' font is able to show Asian characters, but fonts like Arial and Dejavu can't?

Offline

#342 2013-04-17 02:56:59

progandy
Member
Registered: 2012-05-17
Posts: 2,152

Re: dunst - a dmenu-ish notification daemon

Hspasta wrote:

Question about fonts.

How is it that the 'Fixed' font is able to show Asian characters, but fonts like Arial and Dejavu can't?

fixed, sans-serif, serif are font families. You should use e.g. "Arial,sans-serif". Then pango will first try arial, then search for the character in another sans-serif font.

PS: I use font = "fontawesome,unifont 16px" (font for icons and a universal font for most characters)

Last edited by progandy (2013-04-17 02:58:53)

Offline

#343 2013-04-17 03:24:08

Hspasta
Member
Registered: 2011-12-24
Posts: 187
Website

Re: dunst - a dmenu-ish notification daemon

progandy wrote:

fixed, sans-serif, serif are font families. You should use e.g. "Arial,sans-serif". Then pango will first try arial, then search for the character in another sans-serif font.

PS: I use font = "fontawesome,unifont 16px" (font for icons and a universal font for most characters)

That didn't seem to work.

Your syntax doesn't get picked up by dunst for some reason. Trying "fixed 10px" seems to just go to some fallback sans font.
Trying just "fixed" picks some random fixed font that can't display Asian fonts well (I see gibberish instead of boxes).
Trying fixed-10 gives me an ugly sans-serif font that can display Asian fonts well.
Trying arial,fixed-10 just uses arial and I still see boxes.

I guess dunst and dunst-git handles fonts differently. Works fine in dunst-git.

Last edited by Hspasta (2013-04-17 03:28:03)

Offline

#344 2013-04-28 10:25:53

NorthAntrim
Member
Registered: 2012-09-09
Posts: 46

Re: dunst - a dmenu-ish notification daemon

Whenever I launch Dunst, it says "no dunstrc found -> skipping", but I do have a dunstrc file in my home directory?

Last edited by NorthAntrim (2013-04-28 10:32:29)

Offline

#345 2013-04-28 10:53:54

davidbe
Member
From: Belgium
Registered: 2009-09-08
Posts: 22

Re: dunst - a dmenu-ish notification daemon

place your dunstrc in ~/.config/dunst

Offline

#346 2013-04-28 15:28:29

NorthAntrim
Member
Registered: 2012-09-09
Posts: 46

Re: dunst - a dmenu-ish notification daemon

davidbe wrote:

place your dunstrc in ~/.config/dunst

Derp, thanks.

Offline

#347 2013-05-17 21:27:50

Army
Member
Registered: 2007-12-07
Posts: 1,784

Re: dunst - a dmenu-ish notification daemon

I can't figure out what causes this, but with dunst-git (with and without a custom config.h) only shows

...

no matter what message I want to send, e.g. sending

notify-send test

Works just fine with dunst from the repos.

Did I miss something?

Offline

#348 2013-05-26 01:28:57

r4
Member
Registered: 2009-10-20
Posts: 19

Re: dunst - a dmenu-ish notification daemon

For some reason dunst doesn't seem to respect my timeouts consistently. Could my configuration be wrong?
I have the file stored in ~/.config/dunst/dunstrc

Here it is..

[global]
    font = droid sans 12

    # allow a small subset of html markup:
    # <b>bold</b>
    # <i>italic</i>
    # <s>strikethrough<s/>
    # <u>underline</u>
    #
    # for a complete reference see http://developer.gnome.org/pango/stable/PangoMarkupFormat.html
    # If markup is not allowed, those tags will be stripped out of the message.
    allow_markup = yes

    # The format of the message. Possible variables are:
    #   %a  appname
    #   %s  summary
    #   %b  body
    #   %i  iconname (including its path)
    #   %I  iconname (without its path)
    #   %p  progress value if set ([  0%] to [100%]) or nothing
    # Markup is allowed
    format = "<b>%s</b>\n%b"

    # Sort messages by urgency
    sort = yes

    # Show how many messages are currently hidden (because of geometry)
    indicate_hidden = yes

    # alignment of message text.
    # Possible values are "left", "center" and "right"
    alignment = left

    # The frequency with wich text that is longer than the notification
    # window allows bounces back and forth.
    # This option conflicts with 'word_wrap'.
    # Set to 0 to disable
    bounce_freq = 0

    # show age of message if message is older than show_age_threshold seconds.
    # set to -1 to disable
    show_age_threshold = 60

    # split notifications into multiple lines if they don't fit into geometry
    word_wrap = yes

    # ignore newlines '\n' in notifications
    ignore_newline = no


    # the geometry of the window
    # geometry [{width}]x{height}][+/-{x}+/-{y}]
    # The geometry of the message window.
    # The height is measured in number of notifications everything else in pixels. If the width
    # is omitted but the height is given ("-geometry x2"), the message window
    # expands over the whole screen (dmenu-like). If width is 0,
    # the window expands to the longest message displayed.
    # A positive x is measured from the left, a negative from the
    # right side of the screen.  Y is measured from the top and down respectevly.
    # The width can be negative. In this case the actual width is the
    # screen width minus the width defined in within the geometry option.
    geometry = "400x5-15+30"

    # The transparency of the window. range: [0; 100]
    # This option will only work if a compositing windowmanager is present (e.g. xcompmgr, compiz, etc..)
    transparency = 20

    # Don't remove messages, if the user is idle (no mouse or keyboard input)
    # for longer than idle_threshold seconds.
    # Set to 0 to disable.
    idle_threshold = 120

    # Which monitor should the notifications be displayed on.
    monitor = 0

    # Display notification on focused monitor. Possible modes are:
    # mouse: follow mouse pointer
    # keyboard: follow window with keyboard focus
    # none: don't follow anything
    #
    # "keyboard" needs a windowmanager that exports the _NET_ACTIVE_WINDOW property.
    # This should be the case for almost all modern windowmanagers.
    #
    # If this option is set to mouse or keyboard, the monitor option will be
    # ignored.
    follow = none

    # should a notification popped up from history be sticky or
    # timeout as if it would normally do.
    sticky_history = no

    # The height of a single line. If the height is smaller than the font height,
    # it will get raised to the font height.
    # This adds empty space above and under the text.
    line_height = 0

    # Draw a line of 'separatpr_height' pixel height between two notifications.
    # Set to 0 to disable
    separator_height = 2

    # padding between text and separator
    padding = 8

    # horizontal padding
    horizontal_padding = 8

    # Define a color for the separator.
    # possible values are:
    #  * auto: dunst tries to find a color fitting to the background
    #  * foreground: use the same color as the foreground
    #  * frame: use the same color as the frame.
    #  * anything else will be interpreted as a X color
    separator_color = foreground

    # print a notification on startup
    # This is mainly for error detection, since dbus (re-)starts dunst
    # automatically after a crash.
    startup_notification = false

    # dmenu path
    dmenu = /usr/bin/dmenu -p dunst:

    # browser for opening urls in context menu
    browser = /usr/bin/chromium

[frame]
    width = 3
    color = "#acacac"

[shortcuts]
    # shortcuts are specified as [modifier+][modifier+]...key
    # available modifiers are 'ctrl', 'mod1' (the alt-key), 'mod2', 'mod3'
    # and 'mod4' (windows-key)
    # xev might be helpful to find names for keys

    # close notification
    close = ctrl+space

    # close all notifications
    close_all = ctrl+shift+space

    # redisplay last message(s)
    # On the US keyboard layout 'grave' is normally above TAB and left of '1'.
    history = ctrl+grave

    # context menu
    context = ctrl+shift+period

[urgency_low]
    # IMPORTANT: colors have to be defined in quotation marks.
    # Otherwise the '#' and following  would be interpreted as a comment.
    background = "#000000"
    foreground = "#cccccc"
    timeout = 3

[urgency_normal]
    background = "#000000"
    foreground = "#cccccc"
    timeout = 3

[urgency_critical]
    background = "#000000"
    foreground = "#cccccc"
    timeout = 3


# Every section that isn't one of the above is interpreted as a rules
# to override settings for certain messages.
# Messages can be matched by 'appname', 'summary', 'body' or 'icon'
# and you can override the 'timeout', 'urgency', 'foreground', 'background'
# and 'format'.
# Shell-like globbing will get expanded.
#
# SCRIPTING
# you can specify a script that gets run when the rule matches by setting
# the 'script' option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: if you don't want a notification to be displayed, set the format to ""
# NOTE: It might be helpful to run dunst -print in a terminal in order to find
# fitting options for rules.

#[espeak]
#    summary = "*"
#    script = dunst_espeak.sh

#[script-test]
#    summary = "*script*"
#    script = dunst_test.sh

#[ignore]
## This notification will not be displayed
#    summary = "foobar"
#    format = ""

#[signed_on]
#    appname = Pidgin
#    summary = "*signed on*"
#    urgency = low
#
#[signed_off]
#    appname = Pidgin
#    summary = *signed off*
#    urgency = low
#
#[says]
#    appname = Pidgin
#    summary = *says*
#    urgency = critical
#
#[twitter]
#    appname = Pidgin
#    summary = *twitter.com*
#    urgency = normal
#

Offline

#349 2013-05-26 07:58:51

ninian
Member
From: United Kingdom
Registered: 2008-02-24
Posts: 696
Website

Re: dunst - a dmenu-ish notification daemon

r4 wrote:

For some reason dunst doesn't seem to respect my timeouts consistently.

Hmm... I'm using 10 second timeouts for urgency low and normal and I could swear sometimes the message persists for about 3 x longer.
Haven't pinned it down consistently though.

Online

#350 2013-05-26 08:10:39

progandy
Member
Registered: 2012-05-17
Posts: 2,152

Re: dunst - a dmenu-ish notification daemon

ninian wrote:
r4 wrote:

For some reason dunst doesn't seem to respect my timeouts consistently.

Hmm... I'm using 10 second timeouts for urgency low and normal and I could swear sometimes the message persists for about 3 x longer.
Haven't pinned it down consistently though.

I have seen it too. messages stay too long, until a new one pops up or sometimes forever. If I use the history function, the window doesn't update properly either. I cannot find the reason, though.

Offline

Board footer

Powered by FluxBB