Eu postei isso há um tempo atrás em um Q / A (agora) excluído. Talvez seja útil para você.
Um patch para permitir mensagens (muito) longas
O "patch" abaixo permitirá que você tenha notificações, desde que leve em sua área de trabalho:
Em caso de notificações (muito) longas, em vez disso:
vocêveráisto:
Aduraçãodamensageméautomaticamentedefinidaparaotamanhodotexto.
Oquefaz
Asnotificações,enviadaspornotify-osd
(notify-send
),estãolimitadasaappr.120caracteres.
Asolução"escuta" as mensagens enviadas, usando dbus-monitor
. Se uma mensagem exceder os 120 caracteres, ela assumirá as mensagens e usará a janela de mensagem "própria" para exibir a notificação, conforme mostrado acima.
Os scripts
-
A configuração existe de duas seções; de "listen-" script, que intercepta as notificações:
#!/bin/bash currdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" dbus-monitor "interface='org.freedesktop.Notifications'" |\ grep --line-buffered "string" |\ grep --line-buffered -e method -e ":" -e '""' -e urgency -e notify -v |\ grep --line-buffered '.*(?=string)|(?<=string).*' -oPi |\ grep --line-buffered -v '^\s*$' |\ xargs -I '{}' $currdir/message {}
Copie o script em um arquivo vazio e salve-o como
catch_notifs.sh
-
O script que cria as notificações de substituição:
Copie o script acima em um arquivo vazio, salve-o como (exatamente!)#!/usr/bin/env python3 import subprocess import os import gi gi.require_version('Gtk', '3.0') from gi.repository import GObject, Gtk, Gdk, Pango from threading import Thread import time import sys text = sys.argv[1] length = len(text) showtime = length/20 def get_screen(): scr = [s.split("x") for s in subprocess.check_output([ "xrandr"]).decode("utf-8").split() if "+0+0" in s][0] return int(scr[0]) -450 class Splash(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="splashtitle") maingrid = Gtk.Grid() self.add(maingrid) maingrid.set_border_width(20) label = Gtk.Label(text) label.set_line_wrap(True) label.set_max_width_chars(45) label.modify_font(Pango.FontDescription('Ubuntu 11')) maingrid.attach(label, 0, 0, 1, 1) self.stop = Thread(target=self.close_window) self.stop.start() def close_window(self): time.sleep(showtime) Gtk.main_quit() def splashwindow(): window = Splash() window.set_decorated(False) window.set_resizable(False) window.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0,0,0,1)) window.modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("white")) # window.set_opacity(0.8) window.move(get_screen(), 80) window.set_keep_above(True) window.show_all() window.set_default_size(200, 500) GObject.threads_init() Gtk.main() if len(text) > 120: subprocess.Popen(["pkill", "notify-osd"]) splashwindow()
message
(sem extensão) e torne-o executável. - Armazene os dois scripts em um único diretório e o mesmo .
-
Teste- execute o script pelo comando (a partir de uma janela de terminal):
/bin/bash /path/to/catch_notifs.sh
(mantenha-o em execução)
Você pode testar a configuração executando (em outro terminal):
notify-send '<long_text>'
-
Se tudo funcionar bem, adicione-o aos aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:
/bin/bash /path/to/catch_notifs.sh
E isso deve funcionar:)