Уведомление-отправка игнорирует тайм-аут?

47

Может быть, я делаю что-то не так, но не должны команды (запускаются отдельно)

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

Есть разные таймауты? Первый почти мгновенный, второй занимает 1 секунду, а третий - 100 секунд. Во всех случаях это занимает около шести секунд.

Есть ли способ обойти поведение? Поскольку разработчики помечают это как «фичу» вместо ошибки, я бы хотел несколько альтернатив ...

Увлеченные
источник
1
да они мне подтвердили
Ringtail
Для меня это работает, как и ожидалось, используя XFCE4.
Грамбель
@BlueXrider вы видите ту же проблему, что и я? Если да, то какую версию вы используете?
подключил
Я подтвердил, что тестовый код работает правильно. Я получаю тайм-ауты, как указано.
Ringtail
6
В качестве альтернативы вы можете использовать notify-send "Text Here" ; sleep 3 ; killall notify-osd(где sleep 3пример истечения срока действия (фактического убийства) через 3 секунды)!
Pandya

Ответы:

44

Это известная ошибка: https://bugs.launchpad.net/ubuntu/+source/notify-osd/+bug/390508

(Это считается «дизайнерским решением» сопровождающего.)

Борис Бух
источник
3
Это не совсем ошибка. Это дизайнерское решение.
Эрен Тантекин
68
Неправильное дизайнерское решение может быть ошибкой.
Борис Бух
24
Когда программное обеспечение заявляет, что оно делает одно, а другое - это ошибка. Если разработчики не хотят, чтобы мы считали это ошибкой, то не утверждайте, что это действует так, как будто это не так.
Hytromo
10
Это не особенность. Это ошибка! Когда вы предоставляете рычаг для включения стеклоочистителей, и он не работает, он ломается.
Мэтт Х
3
@ChristopherDone С уважением, это ошибка. Справка для notify-send (часть notify-osd) гласит: notify-send --help | grep timeout -t, --expire-time = TIME Указывает время ожидания в миллисекундах, в течение которого истекает уведомление. Это основной интерфейс для пользователя инструмента. Этот основной интерфейс принадлежит пользователю и поэтому является ошибкой. Это либо ошибка с текстом справки, либо реализация, в зависимости от вашей перспективы, но это определенно ошибка.
Майкл Спаркс
21

Как упомянуто в одном из постов выше, есть дизайнерское решение, чтобы запретить эту функцию. К счастью для вас, другие люди тоже не согласны и создали PPA, и вы можете отменить это решение и для своей системы.

Чтобы решить вашу проблему просто:

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

По желанию

Чтобы добавить еще больше функций для отправки-уведомления, чем у вас есть:

Начиная с Ubuntu 16.04 и далее:

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

Для версий 9.10-14.10:

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

Для получения дополнительной информации о решении выше, прочитайте эту статью:

Настраиваемые пузыри уведомлений для Ubuntu

Fabby
источник
К сожалению, хранилище больше не предоставляет пакет, говоря E: Failed to fetch http://ppa.launchpad.net/amandeepgrewal/notifyosdconfig/ubun‌​tu/dists/xenial/main‌​/binary-amd64/Packag‌​es 404 Not Found(связанный: askubuntu.com/questions/50/… )
phil294
@Blauhirn: я не разработчик указанного пакета. Пожалуйста, свяжитесь с разработчиком
Fabby
@Blauhirn: обновленный ответ для 16.04 и далее
Fabby
Это сработало! Как пояснение для всех остальных, вы также должны установить обновленную версию notify-osd. а именно: 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 Большое спасибо!
Майкл Спаркс
1
@MichaelSparks изменился upgradeна dist-upgrade. Это должно заботиться о вещах, поскольку notify-osd уже установлен и должен быть обязательно обновлен.
Fabby
4

Это было намеренно реализованным нарушением установленных соглашений без дисквалификации в среде хост-терминала. то есть. notify-sendбольше не должно существовать, так как это ставит под угрозу хорошо установленную ожидаемую и документированную функциональность, поэтому вместо этого notify-graffitiтеперь должна существовать новая команда - Что ???? Подождите секунду ... все те сценарии, которые используют "обычное" написание имени команды, будут скомпрометированы!?! изменив соглашение о том, как пишется название команды?!?! - Хммм. Эта философия исключительно, как это ни парадоксально лицемерна, так как поддерживается интерфейсом настольного терминала Unity.

Это не может быть сделано в обоих направлениях - сохранение некоторых соглашений, т.е. имя команды и еще не все, функциональность команды, как документировано. Если функциональность должна быть скомпрометирована, то и имя команды должно быть таким, чтобы поддерживать целостность, условность, согласованность и т. Д. «Опыта» пользователя, или это «разочарование», «раздражение», «раздражение» пользователя. ..

ссылка:

Закладка:
Уведомить-отправить игнорирует тайм-аут?

Джордж Роуэлл
источник
Ссылки «Non-expiring_notifications» и «Notification | Ubuntu App Developer» не работают (точнее, веб-страница, на которую они ссылаются).
Кит Томпсон
2

Существует небольшой удобный скрипт notify-send.sh в качестве замены для уведомления-отправки, который позволяет закрыть или заменить ранее отправленные уведомления.

Редактировать: как указал @Glutanimate, этот скрипт по умолчанию поддерживает время истечения.

Я не мог получить время истечения, чтобы работать в конце, поэтому я пошел довольно хакерский способ отправить уведомление с тайм-аутом в 2 секунды, как это:

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

NiMa Thr
источник
Этот сценарий великолепен! Спасибо, что поделились этим здесь. Похоже, теперь он полностью совместим с исходными аргументами CLI для notify-send. Т.е. вы можете отправить уведомление с 2-секундным таймаутом через notify-send.sh -t 2 "Hello World!". Я сделал ссылку на скрипт в своем локальном каталоге $ PATH и переименовал его в notify-send. Больше не нужно иметь дело с этой реализацией subpar notify-osd!
Glutanimate
О, круто @Glutanimate! Спасибо, что сообщили нам об этом.
NiMa Thr
0

Для тех, кто использует среду рабочего стола Cinnamon, есть параметр, который можно включить:

Уведомления> Удалить уведомления после истечения времени ожидания

Шай Коулман
источник
0

Это в миллисекундах. Я тестировал на XUbuntu 16.04 (Ubuntu XFCE)

notify-send -t 3000 "test"

ровно 3 секунды

Павел Cioch
источник