Benachrichtigen-Senden ignoriert Timeout?

47

Vielleicht mache ich etwas falsch, sollte aber nicht die Befehle (separat ausführen)

notify-send -t 1 "test"
notify-send -t 1000 "test"
notify-send -t 10000 "test"

Haben Sie unterschiedliche Timeouts? Das erste ist fast augenblicklich, das zweite dauert 1 Sekunde und das dritte 100 Sekunden. In allen Fällen scheint es ungefähr sechs Sekunden zu dauern.

Gibt es einen Ausweg aus dem Verhalten? Da die Entwickler dies als "Feature" anstatt als Bug bezeichnen, hätte ich gerne ein paar Alternativen ...

Süchtig
quelle
1
Ja, sie haben ich bestätigt
Ringtail
Bei mir funktioniert es erwartungsgemäß mit XFCE4.
Grumbel
@BlueXrider siehst du das selbe Problem wie ich? Wenn ja, welche Version verwenden Sie?
Hooked
Ich habe bestätigt, dass der Testcode korrekt funktioniert. Ich bekomme die Auszeiten wie angegeben.
Ringtail
6
Alternativ können Sie notify-send "Text Here" ; sleep 3 ; killall notify-osd(wo sleep 3ist Beispiel für Ablauf (tatsächlich töten) nach 3 Sekunden)!
Pandya,

Antworten:

44

Dies ist ein bekannter Fehler: https://bugs.launchpad.net/ubuntu/+source/notify-osd/+bug/390508

(Es wird vom Betreuer als "Entwurfsentscheidung" angesehen.)

Boris Bukh
quelle
3
Das ist nicht wirklich ein Fehler. Es ist eine Designentscheidung.
Eren Tantekin
68
Eine falsche Designentscheidung kann ein Fehler sein.
Boris Bukh
23
Wenn Software behauptet, eine Sache zu tun, während sie eine andere Sache tut, ist dies ein Fehler. Wenn die Entwickler nicht möchten, dass wir es als Fehler betrachten, dann behaupten Sie nicht, dass es sich so verhält, als ob es nicht so wäre.
Hytromo
10
Das ist kein Feature. Das ist ein Fehler! Wenn Sie einen Hebel zum Einschalten der Scheibenwischer vorsehen und dieser nicht funktioniert, ist er kaputt.
Matt H
3
@ChristopherDone Mit Respekt, es ist ein Fehler. Die Hilfe für notify-send (Teil von notify-osd) lautet: notify-send --help | grep Zeitüberschreitung -t, --expire-time = TIME Gibt die Zeitüberschreitung in Millisekunden an, nach der die Benachrichtigung abläuft. Dies ist die Hauptschnittstelle für einen Benutzer des Tools. Diese primäre Schnittstelle liegt beim Benutzer und ist daher ein Fehler. Es ist entweder ein Fehler im Hilfetext oder in der Implementierung, abhängig von Ihrer Perspektive, aber es ist definitiv ein Fehler.
Michael Sparks
21

Wie in einem der obigen Beiträge erwähnt, gibt es eine Entwurfsentscheidung, diese Funktion nicht zuzulassen. Zum Glück sind auch andere anderer Meinung und haben eine PPA eingerichtet. Sie können diese Entscheidung auch für Ihr System rückgängig machen.

Um Ihr Problem zu lösen, gehen Sie einfach wie folgt vor:

sudo add-apt-repository ppa:leolik/leolik 
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install libnotify-bin
pkill notify-osd

Optional

So fügen Sie send-notify noch mehr Funktionen hinzu, als Sie derzeit haben:

Ab Ubuntu 16.04:

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt update
sudo apt install notifyosdconfig

Für die Versionen 9.10-14.10:

sudo add-apt-repository ppa:amandeepgrewal/notifyosdconfig
sudo apt-get update
sudo apt-get install notifyosdconfig

Weitere Informationen zur obigen Lösung finden Sie in diesem Artikel:

Konfigurierbare Benachrichtigungsblasen für Ubuntu

Fabby
quelle
Leider das Paket das Repository doesnt mehr bieten, sagt E: Failed to fetch http://ppa.launchpad.net/amandeepgrewal/notifyosdconfig/ubun‌​tu/dists/xenial/main‌​/binary-amd64/Packag‌​es 404 Not Found(Zusammenhang: askubuntu.com/questions/50/... )
phil294
@Blauhirn: Ich bin nicht der Entwickler des genannten Pakets. Bitte kontaktieren Sie den Entwickler
Fabby
@Blauhirn: Aktualisierte Antwort ab 16.04.
Fabby
Das hat funktioniert! Als Klarstellung für alle anderen müssen Sie jedoch auch die aktualisierte Version von notify-osd installieren. dh sudo add-apt-repository ppa:leolik/leolik:; sudo add-apt-repository ppa:amandeepgrewal/notifyosdconfig; sudo apt-get update; sudo apt install notify-osd # Updates to actually useful version; sudo apt install notifyosdconfig Danke vielmals!
Michael Sparks
1
@MichaelSparks geändert upgradezu dist-upgrade. Dies sollte Abhilfe schaffen, da notify-osd bereits installiert ist und auf jeden Fall aktualisiert werden sollte.
Fabby
4

Dies war ein absichtlich umgesetzter Verstoß gegen etablierte Konventionen ohne Disqualifikation im Host-Terminal-Umfeld. dh notify-sendsollte nicht länger existieren, da es die gut etablierte erwartete und dokumentierte Funktionalität gefährdet. Stattdessen notify-graffitisollte nun ein neuer Befehl existieren - Was ???? Warten Sie eine Sekunde ... alle Skripte, die die "konventionelle" Befehlsnamenschreibweise verwenden, werden kompromittiert!?! durch Ändern der Konvention, wie der Befehlsname geschrieben wird?!?! - hmmm Diese Philosophie ist außergewöhnlich, paradoxerweise scheinheilig, wie es die Unity-Desktop-Terminal-Oberfläche unterstützt.

Es kann nicht in beide Richtungen getan werden - unter Wahrung einiger Konventionen, z. der Name eines Befehls und noch keine anderen, die Funktionalität eines Befehls wie dokumentiert. Wenn die Funktionalität beeinträchtigt werden soll, sollte dies auch der Befehlsname sein, um die Integrität, Konventionalität, Konsistenz usw. der Benutzererfahrung aufrechtzuerhalten, oder ist dieser Benutzer "frustriert", "verärgert", "irritiert". ..

ref:

Lesezeichen:
Benachrichtigen-Senden ignoriert Timeout?

George Rowell
quelle
Die Links "Non-expiring_notifications" und "Notification | Ubuntu App Developer" sind fehlerhaft (bzw. die Webseite, auf die sie verweisen).
Keith Thompson
2

Es gibt ein kleines praktisches Skript notify-send.sh als Ersatz für notify-send, mit dem Sie zuvor gesendete Benachrichtigungen schließen oder ersetzen können .

Bearbeiten: Wie @Glutanimate hervorhob, unterstützt dieses Skript standardmäßig die Ablaufzeit.

Ich konnte die Ablaufzeit nicht erreichen, um am Ende zu arbeiten, und so ging ich ziemlich schief, um eine Benachrichtigung mit einer Zeitüberschreitung von 2 Sekunden wie folgt zu senden :

notify-send.sh --print-id test | xargs -I {} bash -c "sleep 2 && notify-send.sh --close={}" &

NiMa Thr
quelle
Dieses Skript ist großartig! Danke, dass du es hier geteilt hast. Sieht so aus, als ob es jetzt vollständig mit den ursprünglichen CLI-Argumenten von notify-send kompatibel ist. Dh: Sie können eine Benachrichtigung mit einer Zeitüberschreitung von 2 Sekunden über senden notify-send.sh -t 2 "Hello World!". Ich habe das Skript mit meinem lokalen $ PATH-Verzeichnis verknüpft und es in notify-send umbenannt. Nie mehr mit dieser unterdurchschnittlichen notify-osd-Implementierung zu tun!
Glutanimate
Oh cool @Glutanimate! Vielen Dank, dass Sie uns darüber informiert haben.
NiMa Thr
0

Für Benutzer der Cinnamon-Desktopumgebung gibt es eine Einstellung, die aktiviert werden kann:

Benachrichtigungen> Entfernen Sie Benachrichtigungen nach Erreichen des Timeouts

Shai Coleman
quelle
0

Dies ist in Millisekunden. Ich habe auf XUbuntu 16.04 (Ubuntu XFCE) getestet

notify-send -t 3000 "test"

genau 3 Sekunden

Pawel Cioch
quelle