Mevcut bir bildirimi hemen değiştirmek için 'notify-send'i nasıl kullanırım?


23

notify-sendMasaüstünde bir bildirim göstermek için kullanıp , ardından farklı bir bildirim göstermek için tekrar kullandığımda, ikincisinin yalnızca birincinin kaybolduktan sonra gösterdiğini fark ettim .

notify-sendMevcut bir bildirimi derhal başka bir bildirimle değiştirmenin bir yolu var mı ?

Yanıtlar:


16

Yapabilirsin, ama bunu yapmak için yamalı bir libnotify kullanmalısın

notify-sendZaman aşımına uğramadan (veya kaybolmadan) önce var olan bildirimleri değiştirme olanağına sahip değildir. Bu bilinen bir hatadır . Ancak, hata raporundaki bir yorumcu düzeltmek için bir düzeltme eki gönderdi .

Yamalı takma libnotify-bin PPA dan

PPA'mdaki değişikliklere izin veren libnotify-bin paketinin yamalı bir versiyonunu oluşturdum . Şu anda sadece Ubuntu 12.04 için, ancak şu anda desteklenen diğer yayınlar için ihtiyacınız varsa, lütfen bir yorum gönderin; kullanılabilir duruma getirmek için elimden geleni yapacağım.

Takmak için bir terminal açın ve:

sudo apt-add-repository ppa: izx / askubuntu
sudo apt-get update
sudo apt-get kurulum libnotify-bin

Değiştirme yetenekleri nasıl kullanılır?

Yamalı notify-sendiki yeni anahtarlar içerir -p(ya da --print-id ) ve -r(veya --replace-id ). --helpOnları olarak anlatılmaktadır:

  -p, --print-id Bildirim kimliğini yazdır.
  -r, --replace-id = REPLACE_ID Değiştirilecek bildirimin kimliği.
  • İle -p, her biri notify-sendbir ID N (sayı / tam sayı) döndürür .
  • Başka bir notify-sendtane vermek -r N, önceki bildirimin derhal yerine geçecektir .
  • Örneğin, bash için kimliği şuradan kaydedebilirsiniz notify-send -p ...:

    NID=$(notify-send -p "MESSAGE-1")

    ve sonra ile değiştirin:

    notify-send -r $NID "MESSAGE-2"
  • Sen yinelemeli hem kullanabilirsiniz -p ve -r sürece, bir komut -r değişken başında 0'a başlatılır.

  • İşte yarım saniyelik aralıklarla 0 ile 100 arasında sayılan bildirimleri gösteren basit bir betik:

    #! / bin / bash 
    NID = 0
    i için {0..100..10}    yap       NID = $ (notify-gönder -p -r $ NID $ i)       0,5 uyu    tamam


1
: Sen eserler haber-send gibi bu benim piton komut dosyasını kullanabilirsiniz github.com/phuhl/notify-send.py
user3637541

11

Önceki onay bildirimlerinin yerini alacak bir "onay" bildirimi oluşturmak için "senkronize" ipucunu kullanabilirsiniz. Örneğin:

notify-send "Message" -h string:x-canonical-private-synchronous:anything

"X-canonical-private-synchron" ipucu bu belgede belirtilmiştir . Bir ipucu belirtmek için kullanın -h type:name:value. Buradaki tür string, isim x-canonical-private-synchronousve görünüşe göre değer ne istersen olabilir.

Bu nedenle, ilk bildiriminiz bu ipucuyla oluşturulmuşsa ve ikincisi de geçerliyse , ikincisi derhal ilk yerine geçecektir. (Bkz . Belgelerdeki Animasyonlar ve Süreler , "onay balonları" sütununda.)


string:x-canonical-private-synchronous:anythingtam ihtiyacım olan şeydi. Bu cevap için teşekkürler. Ayrıca belgelere bağlantı için
avk

GNOME ile çalışmaz ....
Johannes Lemonde

1
Bu biraz açıkçası sadece ubuntu üzerinde çalışır.
bschlueter

10

X-ref:
Notify-osd'daki yeni bir bildirimin, bir öncekinin çıkmasını beklemeden gösterilmesine nasıl zorlanır?

yamalar olmadan kolayca yapabilirsiniz

#!/bin/bash

for i in {0..100..10}
    do
          killall notify-osd
          notify-send "testing" $i
          sleep 1
    done

Yer imi:
Mevcut bir bildirimin hemen yerini almak için 'notify-send'i nasıl kullanırım?


Bir hata gönderir notify-osd (2592): İşleme izin verilmedi. Bu ne anlama geliyor?

Ayrıcalıkların yetersiz kaldığı anlamına gelebilir:

sudo killall notify-osd

Bir hata gönderir notify-osd(2592): Operation not permitted. Bu ne anlama geliyor?
VedVals

5

Neredeyse notify-send ile aynı şekilde çalışan ancak desteği olan basit bir python betiği oluşturdum --replaces-id.

notify-send.py

web: https://github.com/phuhl/notify-send.py

Kabuktan masaüstü bildirimleri göndermek için kullanılan bir python betiği.

hakkında

Libnotify, Linux dünyasındaki birçok senaryoların bir parçasıdır. Masaüstü Bildirimleri Belirtimi'nin belirtilen özelliklerinin çoğunu kullanır ve bunları kabuk komut dosyalarına erişilebilir hale getirir. O mu değil ancak mevcut bir bildirim gelmesini sağlamasını replaces-id. Bu, 2008'den beri bilinen bir hatadır ve 2012'den beri bir yamaya sahiptir . Yama yine de yukarı akışta değildir (2018).

Bu python betiği notify2 paketini kullanır ve işlevselliği kabuğa gösterir.

Notify-send.py ve notify-send arasındaki farklar

  • Gelen notify-send.py -h gösterileri yerine ipuçları için parametre olmanın yardımcı olur. İpuçları için kullanın --hint.
  • İçinde notify-send.py -r IDve notify-send.py --replaces-id ID var. Bir bildirimi değiştirmek için, değiştirilecek bildirimin notify-send.py döndürdüğü kimlik numarasıyla arayın .
  • notify-send.py yeni oluşturulan bildirimin kimliğini döndürür.
  • notify-send.py --replaces-process NAMEbulunmaktadır. Aynı NAME ile oluşturulan her bildirim, önceki NAME ile aynı bildirimlerin yerine geçecektir. Bu parametre ile çağrılırsa notify-send.pyengelleyebilir, en sonunda bir takip ile çağrılabilir &.

Kurulum

Python3 gerektirir.

git clone https://github.com/phuhl/notify-send.py
cd notify-send.py
sudo pip install notify2
sudo python setup.py install

kullanım

$ notify-send.py -h
usage: notify-send.py [-h] [-u LEVEL] [-t TIME] [-a APP_NAME]
                  [-i ICON[,ICON...]] [-c TYPE[,TYPE...]]
                  [--hint TYPE:NAME:VALUE] [-r ID]
                  [--replaces-process NAME]
                  SUMMERY [BODY]

positional arguments:
      SUMMERY
      BODY

optional arguments:
      -h, --help        show this help message and exit
      -u LEVEL, --urgency LEVEL
                        Specifies the urgency level (low, normal, critical).
      -t TIME, --expire-time TIME
                        Specifies the timeout in milliseconds at which to
                        expire the notification.
      -a APP_NAME, --app-name APP_NAME
                        Specifies the app name for the icon
      -i ICON[,ICON...], --icon ICON[,ICON...]
                        Specifies an icon filename or stock icon to display.
      -c TYPE[,TYPE...], --category TYPE[,TYPE...]
                        Specifies the notification category.
      --hint TYPE:NAME:VALUE
                        Specifies basic extra data to pass. Valid typesare
                        int, double, string and byte.
      -r ID, --replaces-id ID
                        Specifies the id of the notification that should be
                        replaced.
     --replaces-process NAME
                        Specifies the name of a process that should take care
                        of replacing notifications for this process.

notify-send [.py] root kullanıcısı olarak

Bildirimleri görüntülemek için, libnotize etseniz veya

notify-send.py

Kök kullanıcıdan kullanılan bu iki script yardımcı olur.

#!/bin/bash
username=<your username here>
if [ "$(id -u)" != "1000" ] ; then
    sudo -u $username DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send.sh "$@"
else
    notify-send.sh "$@"
fi

Bunun notify-send.shgibi:

#!/bin/bash
notify-send.py "$@" &

Ayrıca bakınız

Ayrıca Dunst'tan ilham alan bildirim arka planıma bir göz atın , ancak saydam bir arka plan ve bildirimleri saklayan bir bildirim merkezi de dahil olmak üzere çeşitli iyileştirmeler yapıldı.


Bu çözüm benim için ubuntu 18.10'da çalıştı. Diğer çözümlerin hiçbiri de işe yaramadı.
Dreamcat4
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.