3

I'm searching for a way to show the content of a notify-send message in the lockscreen of Gnome 3.20. Normally this is configured under settings > notifications, but "notify-send" isn't mentioned there, only installed apps are.

Playing with dconf, especially under org.gnome.desktop.notifications application-children ['org-gnome-software', 'firefox', 'org-gnome-pomodoro', 'gnome-tweak-tool', 'evolution', 'ca-desrt-dconf-editor'] didn't help much either.

My notify-send script shows me affirmations, fetched from another file, every 30mins:

#!/bin/bash
while : ; do
    notify-send -i /usr/share/icons/gnome/scalable/emotes/face-smile-big-symbolic.svg --hint int:transient:1 "$(sort -R ~/Sonstiges/Affirmationen/Affirmationen.txt | head -n 1)"
    sleep 30m           # Zeit in Minuten
done

Any ideas how to accomplish this?

3
  • I think you can't show notifications while on lightdm-greeter, maybe the notifications are going to your locked session. Maybe you can test something like this, try to send many (many) notifications maybe from a loop while session is locked, and then login to try to catch if they are been sended to locked session (I observed that notifications are stacked).
    – dgonzalez
    Commented Jan 5, 2017 at 22:17
  • 1
    @dgonzalez Notifications are definitely shown in Gnome's 3.20 lockscreen, see here. My aim is to see the content of the notify-send message and not that I have one new message from notify-send.
    – DMT
    Commented Jan 8, 2017 at 13:14
  • Sorry, my fault, somehow I missed you are running Gnome (so gdm instead of lightdm), i think too many tabs on my browser led me to misread the full title.
    – dgonzalez
    Commented Jan 8, 2017 at 20:42

1 Answer 1

0

Thanks to Chris Williams (chrisawi) from the Gnome IRC Channel the following solution was found:

Create a script called notifier in /.local/bin/ with this content:

#!/usr/bin/python3

# License: MIT
# Author: Chris Williams

APP_ID = "com.example.Notifier"

import sys
from gi.repository import GLib, GObject, Gio

class Notifier(Gio.Application):
    def __init__(self):
        Gio.Application.__init__(self, application_id=APP_ID, flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE)
        self.set_option_context_parameter_string ("ID TITLE [MESSAGE...]")
        self.add_main_option("icon", ord('i'), GLib.OptionFlags.NONE, GLib.OptionArg.STRING, "Icon name or file", None)
        #self.add_main_option("quit", ord('q'), GLib.OptionFlags.NONE, GLib.OptionArg.NONE, "Quit", None)
        self.add_main_option(GLib.OPTION_REMAINING, 0, GLib.OptionFlags.NONE, GLib.OptionArg.STRING_ARRAY, "", None)

    def do_command_line(self, cl):
        Gio.Application.do_command_line(self, cl)
        opts = cl.get_options_dict().end().unpack()

        #if opts.get("quit"):
        #    self.quit()

        args = opts.get(GLib.OPTION_REMAINING, [])
        if len(args) >= 2:
            notification = Gio.Notification()
            notification.set_title(args[1])

            if len(args) >= 3:
                notification.set_body(" ".join(args[2:]))

            icon_str = opts.get("icon")
            if icon_str:
                try:
                    icon = Gio.Icon.new_for_string(icon_str)
                except GLib.Error as e:
                    if not e.matches(Gio.io_error_quark(), Gio.IOErrorEnum.INVALID_ARGUMENT):
                        raise
                else:
                    notification.set_icon(icon)

            self.send_notification(args[0], notification)
        else:
            print ("not enough arguments")

        return 0

if __name__ == '__main__':
    app = Notifier()
    app.run(sys.argv)

Mention it in the original notify-send script, that also lies in /.local/bin/:

#!/bin/bash
while : ; do
    notifier -i emote-love-symbolic idxyz "$(sort -R ~/Sonstiges/Affirmationen/Affirmationen.txt | head -n 1)"
    sleep 30m   # time in minutes
done

You also have to create a .desktop file, either in /.local/share/applications/ or in /.config/autostart/ if you want this script to be executed at startup. My /affirmationen.desktop in /.config/autostart/ looks like this:

[Desktop Entry]
Name=Affirmationen
Exec=affirmationen
Icon=emote-love-symbolic
Type=Application
StartupNotify=true
Hidden=false
NoDisplay=false
Terminal=false
X-GNOME-UsesNotifications=true
X-GNOME-Autostart-enabled=true

Enjoy!

2
  • ubuntu 18.04? when I run the script nothing happens, any idea? also, this is not notify-send right? this is another application (in python)
    – VeganEye
    Commented May 23, 2020 at 5:52
  • Works under 20.04, should also work under 18.04. Yes, it's a python script and not notify-send.
    – DMT
    Commented Aug 11, 2020 at 15:17

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .