Bagaimana cara saya menggunakan 'notify-send' untuk segera mengganti notifikasi yang ada?

23

Ketika saya menggunakan notify-senduntuk menampilkan notifikasi di desktop, dan kemudian menggunakannya lagi untuk menampilkan notifikasi yang berbeda, saya perhatikan bahwa yang kedua hanya muncul setelah yang pertama menghilang.

Apakah ada cara untuk notify-sendsegera mengganti notifikasi yang ada dengan yang berbeda?

ish
sumber

Jawaban:

16

Anda bisa, tetapi Anda harus menggunakan libnotify yang ditambal untuk melakukannya

notify-sendtidak memiliki kemampuan untuk mengganti notifikasi yang ada sebelum habis waktu (atau menghilang). Ini adalah bug yang dikenal . Namun, komentator pada laporan kutu telah memposting tambalan untuk memperbaikinya.

Menginstal libnotify-bin yang ditambal dari PPA

Saya telah membuat versi tambalan paket libnotify-bin yang memungkinkan penggantian pada PPA saya. Saat ini hanya untuk Ubuntu 12,04, tetapi jika Anda memerlukannya untuk rilis lain yang saat ini didukung, silakan kirim komentar dan saya akan mencoba yang terbaik untuk membuatnya tersedia.

Untuk menginstal, buka terminal dan:

sudo apt-add-repositori ppa: izx / askubuntu
sudo apt-get pembaruan
sudo apt-get install libnotify-bin

Cara menggunakan kemampuan penggantian

Ditambal The notify-sendmencakup dua switch baru, -p(atau --print-id ), dan -r(atau --replace-id ). Yang --helpmenggambarkan mereka sebagai:

  -p, --print-id Cetak ID notifikasi.
  -r, --replace-id = REPLACE_ID ID pemberitahuan yang akan diganti.
  • Dengan -p, masing notify-send- masing akan mengembalikan ID N (angka / integer).
  • Menerbitkan lain notify-senddengan -r Nakan menggantikan pemberitahuan sebelumnya segera .
  • Misalnya, untuk bash, Anda dapat menyimpan ID dari notify-send -p ...dengan:

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

    lalu ganti dengan:

    notify-send -r $NID "MESSAGE-2"
  • Anda bisa secara rekursif menggunakan -p dan -r dalam skrip, selama variabel -r diinisialisasi ke 0 di awal.

  • Berikut ini skrip sederhana yang menampilkan notifikasi yang dihitung dari 0 hingga 100 dalam interval setengah detik:

    #! / bin / bash 
    NID = 0
    untuk saya di {0..100..10}    melakukan       NID = $ (beri tahu-kirim -p -r $ NID $ i)       tidur 0,5    selesai
ish
sumber
Saya mendapatkan 404 untuk ppa.launchpad.net/izx/askubuntu/ubuntu/dists/trusty/main/… . Apakah repositori ini sudah usang?
vp_arth
1
Anda dapat menggunakan skrip python saya yang berfungsi seperti beri tahu-kirim: github.com/phuhl/notify-send.py
user3637541
11

Anda dapat menggunakan petunjuk "sinkron" untuk membuat pemberitahuan "konfirmasi" yang akan menggantikan pemberitahuan konfirmasi sebelumnya. Sebagai contoh:

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

Petunjuk "x-canonical-private-syncous" ditentukan dalam dokumen ini . Untuk menentukan petunjuk, gunakan -h type:name:value. Jenis di sini adalah string, nama x-canonical-private-synchronous, dan tampaknya nilainya dapat berupa apa pun yang Anda inginkan.

Jadi jika notifikasi pertama Anda dibuat dengan petunjuk itu dan yang kedua juga, yang kedua akan segera menggantikan yang pertama. (Lihat Animasi dan Durasi dalam dokumentasi, di kolom untuk "gelembung konfirmasi".)

Markus L
sumber
string:x-canonical-private-synchronous:anythingpersis apa yang saya butuhkan. Terima kasih atas jawaban ini. Juga untuk menghubungkan ke dokumentasi
avk
Itu tidak berfungsi dengan GNOME ....
Johannes Lemonde
1
Ini agak jelas hanya berfungsi di ubuntu.
bschlueter
10

X-ref:
Bagaimana memaksa Notifikasi baru di notify-osd muncul tanpa menunggu yang sebelumnya keluar?

tanpa tambalan yang bisa Anda lakukan

#!/bin/bash

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

Bookmark:
Bagaimana cara saya menggunakan 'notify-send' untuk segera mengganti notifikasi yang ada?


Mengirim kesalahan notify-osd (2592): Operasi tidak diizinkan. Apa artinya?

Ini mungkin berarti bahwa hak istimewa tidak memadai yang membutuhkan:

sudo killall notify-osd
george rowell
sumber
Mengirim kesalahan notify-osd(2592): Operation not permitted. Apa artinya?
VedVals
5

Saya membuat skrip python sederhana yang berfungsi hampir sama dengan memberi tahu-kirim tetapi memiliki dukungan untuk --replaces-id.

notify-send.py

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

Skrip python untuk mengirim pemberitahuan desktop dari shell.

Tentang

Libnotify adalah bagian dari banyak skrip di dunia Linux. Ini menggunakan banyak fitur yang ditentukan dari Spesifikasi Pemberitahuan Desktop dan membuatnya dapat diakses oleh skrip shell. Namun itu tidak memungkinkan untuk mengganti notifikasi yang ada dengan replaces-id. Ini adalah bug yang dikenal sejak 2008 dan memiliki tambalan sejak 2012. Patch masih belum hulu (2018).

Skrip python ini menggunakan paket notify2 dan memperlihatkan fungsi ke shell.

Perbedaan antara notify-send.py dan notify-send

  • Di notify-send.py -h show help alih-alih menjadi parameter untuk hints. Untuk petunjuk gunakan --hint.
  • Ada notify-send.py -r IDdan notify-send.py --replaces-id ID ada. Untuk mengganti panggilan notifikasi notify-send.py dengan ID yang dikembalikan oleh notifikasi untuk diganti.
  • notify-send.py mengembalikan ID pemberitahuan yang baru dibuat.
  • notify-send.py --replaces-process NAMEada Setiap notifikasi yang dibuat dengan NAME yang sama akan menggantikan setiap notifikasi sebelumnya dengan NAME yang sama. Jika dipanggil dengan parameter ini notify-send.pymungkin memblokir, sebaiknya dipanggil dengan trailing &.

Instalasi

Membutuhkan python3.

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

Pemakaian

$ 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.

beri tahu-kirim [.py] sebagai pengguna root

Untuk menampilkan pemberitahuan, meskipun libnotify atau

notify-send.py

digunakan dari pengguna root, kedua skrip ini sangat membantu.

#!/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

Dengan notify-send.shseperti ini:

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

Lihat juga

Lihat juga notifikasi-daemon saya yang terinspirasi oleh Dunst , tetapi dengan beberapa perbaikan, termasuk kemungkinan latar belakang yang transparan dan pusat notifikasi yang menyimpan notifikasi.

pengguna3637541
sumber
Solusi ini bekerja untuk saya di ubuntu 18.10. Tidak ada solusi lain yang tampaknya berhasil juga.
Dreamcat4