ฉันจะใช้ 'การแจ้งเตือน - ส่ง' เพื่อแทนที่การแจ้งเตือนที่มีอยู่ทันทีได้อย่างไร


23

เมื่อฉันใช้notify-sendเพื่อแสดงการแจ้งเตือนบนเดสก์ท็อปและจากนั้นใช้อีกครั้งเพื่อแสดงการแจ้งเตือนที่แตกต่างกันฉันได้สังเกตเห็นว่าการแจ้งเตือนที่สองแสดงเฉพาะหลังจากที่การแจ้งเตือนครั้งแรกหายไป

มีวิธีในnotify-sendการเปลี่ยนการแจ้งเตือนที่มีอยู่ทันทีด้วยอันที่แตกต่างกันหรือไม่?

คำตอบ:


16

คุณทำได้ แต่คุณต้องใช้libnotify ที่ได้รับการแก้ไขแล้ว

notify-sendไม่มีความสามารถในการแทนที่การแจ้งเตือนที่มีอยู่ก่อนที่จะหมดเวลา (หรือหายไป) นี่คือปัญหาที่รู้จักกัน อย่างไรก็ตามผู้วิจารณ์ในรายงานข้อผิดพลาดได้โพสต์โปรแกรมแก้ไขเพื่อแก้ไข

การติดตั้งlibnotify-bin ที่แพตช์จาก PPA

ฉันได้สร้างแพ็คเกจ libnotify-binเวอร์ชันที่แพตช์แล้วซึ่งช่วยให้สามารถแทนที่ใน PPA ของฉันได้ ปัจจุบันมีไว้สำหรับ Ubuntu 12.04 เท่านั้น แต่หากคุณต้องการสำหรับรุ่นอื่น ๆ ที่รองรับในปัจจุบันโปรดโพสต์ความคิดเห็นและฉันจะพยายามอย่างดีที่สุดเพื่อให้พร้อมใช้งาน

หากต้องการติดตั้งให้เปิดเทอร์มินัลและ:

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

วิธีใช้ความสามารถในการทดแทน

แพตช์ที่notify-sendมีสวิตช์ใหม่สองตัว-p(หรือ--print-id ) และ-r(หรือ--replace-id ) --helpอธิบายว่า:

  -p, --print-id พิมพ์ ID การแจ้งเตือน
  -r, --replace-id = REPLACE_ID ID ของการแจ้งเตือนที่จะแทนที่
  • ด้วย-pแต่ละคนnotify-sendจะส่งคืน ID N (ตัวเลข / จำนวนเต็ม)
  • ออกอีกnotify-sendด้วย-r Nจะเข้ามาแทนที่การแจ้งเตือนก่อนหน้านี้ได้ทันที
  • ตัวอย่างเช่นสำหรับ bash คุณสามารถบันทึก ID จากnotify-send -p ...ด้วย:

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

    แล้วแทนที่ด้วย:

    notify-send -r $NID "MESSAGE-2"
  • คุณสามารถใช้ทั้ง-pและ-rซ้ำในสคริปต์ตราบใดที่ตัวแปร-rถูกกำหนดค่าเริ่มต้นเป็น 0 ที่จุดเริ่มต้น

  • นี่เป็นสคริปต์ง่ายๆที่แสดงการแจ้งเตือนนับตั้งแต่ 0 ถึง 100 ในช่วงครึ่งวินาที:

    #! / bin / bash 
    NID = 0
    สำหรับฉันใน {0..100..10}    ทำ       NID = $ (แจ้งเตือน - ส่ง -p -r $ NID $ i)       นอน 0.5    เสร็จแล้ว

ฉันจะได้รับ 404 สำหรับppa.launchpad.net/izx/askubuntu/ubuntu/dists/trusty/main/... ที่เก็บนี้ล้าสมัยหรือไม่?
vp_arth

1
คุณสามารถใช้สคริปต์ไพ ธ อนของฉันที่ทำงานเหมือนการแจ้งเตือนส่ง: github.com/phuhl/notify-send.py
user3637541

11

คุณสามารถใช้คำแนะนำ "ซิงโครนัส" เพื่อสร้างการแจ้งเตือน "ยืนยัน" ที่จะแทนที่การแจ้งเตือนการยืนยันก่อนหน้านี้ ตัวอย่างเช่น:

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

คำแนะนำ "x-canonical-private-synchronous" ถูกระบุไว้ในเอกสารนี้ -h type:name:valueเพื่อระบุคำแนะนำการใช้งาน ประเภทที่นี่คือstringชื่อคือx-canonical-private-synchronousและดูเหมือนว่าค่าสามารถเป็นสิ่งที่คุณต้องการ

ดังนั้นหากการแจ้งเตือนครั้งแรกของคุณถูกสร้างขึ้นด้วยคำใบ้นั้นและข้อที่สองก็เช่นกันข้อที่สองจะแทนที่การแจ้งเตือนครั้งแรกทันที (ดูภาพเคลื่อนไหวและระยะเวลาในเอกสารประกอบในคอลัมน์สำหรับ "ฟองอากาศยืนยัน")


string:x-canonical-private-synchronous:anythingเป็นสิ่งที่ฉันต้องการ ขอบคุณสำหรับคำตอบนี้ นอกจากนี้สำหรับการเชื่อมโยงไปยังเอกสาร
avk

มันใช้งานไม่ได้กับ GNOME ....
โยฮันเนสเลมมอนด์

1
เห็นได้ชัดว่ามันใช้งานได้กับอูบุนตูเท่านั้น
bschlueter

10

X-ref:
จะบังคับให้มีการแจ้งเตือนใหม่ใน notification-osd เพื่อแสดงโดยไม่ต้องรอก่อนหน้านี้เพื่อออกได้อย่างไร

คุณสามารถทำได้ง่ายๆ

#!/bin/bash

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

คั่นหน้า:
ฉันจะใช้ 'แจ้งเตือน - ส่ง' เพื่อแทนที่การแจ้งเตือนที่มีอยู่ทันทีได้อย่างไร


ส่งข้อผิดพลาด alert-osd (2592): ไม่อนุญาตให้ใช้งาน นั่นหมายความว่าอย่างไร?

อาจหมายถึงสิทธิ์ที่ต้องการไม่เพียงพอ:

sudo killall notify-osd

notify-osd(2592): Operation not permittedส่งข้อผิดพลาด นั่นหมายความว่าอย่างไร?
VedVals

5

ฉันสร้างสคริปต์หลามง่ายที่ทำงานใกล้เคียงกับแจ้ง-ส่ง --replaces-idแต่มีการสนับสนุน

notify-send.py

เว็บ: https://github.com/phuhl/notify-send.py

สคริปต์ python สำหรับส่งการแจ้งเตือนทางเดสก์ท็อปจากเชลล์

เกี่ยวกับ

Libnotify เป็นส่วนหนึ่งของสคริปต์มากมายในโลก Linux มันใช้คุณสมบัติที่ระบุจำนวนมากของข้อกำหนดการแจ้งเตือนของเดสก์ท็อปและทำให้สามารถเข้าถึงเชลล์สคริปต์ได้ มันไม่ได้replaces-idแต่อนุญาตให้มีการเปลี่ยนการแจ้งเตือนที่มีอยู่ด้วย นี่เป็นข้อผิดพลาดที่รู้จักกันมาตั้งแต่ปี 2008 และมีการแก้ไขตั้งแต่ปี 2012 แพทช์ยังไม่ได้อัปสตรีมแม้ว่า (2018)

สคริปต์ไพ ธ อนนี้ใช้แพคเกจinform2และแสดงการทำงานกับเชลล์

ความแตกต่างระหว่าง alert-send.py และ alert-send

  • ในการnotify-send.py -h แสดงความช่วยเหลือแทนที่จะเป็นพารามิเตอร์สำหรับคำแนะนำ --hintคำแนะนำสำหรับการใช้งาน
  • ในnotify-send.py -r IDและnotify-send.py --replaces-id ID มีอยู่ เพื่อแทนที่การแจ้งเตือนnotify-send.py ด้วย ID ที่ถูกส่งคืนโดยการแจ้งเตือนที่จะถูกแทนที่
  • notify-send.py ส่งคืน ID ของการแจ้งเตือนที่สร้างขึ้นใหม่
  • notify-send.py --replaces-process NAMEที่มีอยู่ การแจ้งเตือนทั้งหมดที่สร้างขึ้นด้วย NAME เดียวกันจะแทนที่การแจ้งเตือนทุกรายการก่อนหน้าด้วย NAME เดียวกัน ถ้าเรียกว่ามีพารามิเตอร์นี้อาจบล็อกที่ดีที่สุดที่จะเรียกว่ามีต่อท้ายnotify-send.py&

การติดตั้ง

ต้องการ python3

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

การใช้

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

แจ้ง - ส่ง [.py] ในฐานะผู้ใช้รูท

เพื่อที่จะแสดงการแจ้งเตือนแม้ว่า libnotify หรือ

notify-send.py

ถูกใช้จากผู้ใช้รูททั้งสองสคริปต์นี้มีประโยชน์

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

ด้วย notify-send.shเช่นนี้

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

ดูสิ่งนี้ด้วย

ดูการแจ้งเตือนภูตของฉันที่ได้รับแรงบันดาลใจจากDunstแต่ด้วยการปรับปรุงหลายประการรวมถึงความเป็นไปได้ของพื้นหลังโปร่งใสและศูนย์การแจ้งเตือนที่เก็บการแจ้งเตือน


วิธีนี้ใช้ได้สำหรับฉันบน Ubuntu 18.10 ไม่มีวิธีแก้ปัญหาอื่นที่ดูเหมือนจะใช้ได้เช่นกัน
Dreamcat4
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.