मौजूदा अधिसूचना को तुरंत बदलने के लिए मैं 'सूचना-भेजें' का उपयोग कैसे करूं?


23

जब मैं notify-sendडेस्कटॉप पर एक अधिसूचना दिखाने के लिए उपयोग करता हूं , और फिर एक अलग अधिसूचना दिखाने के लिए फिर से उपयोग करता हूं, तो मैंने देखा है कि पहले वाले के गायब होने के बाद दूसरा केवल दिखाता है ।

क्या notify-sendकिसी मौजूदा अधिसूचना को तुरंत किसी दूसरे के साथ बदलने का कोई तरीका है ?

जवाबों:


16

तुम्हें पता है, लेकिन आप एक समझौता का उपयोग करना चाहिए कर सकते हैं libnotify ऐसा करने के लिए

notify-sendमौजूदा अधिसूचनाओं को बदलने की क्षमता नहीं है इससे पहले कि वे समय से बाहर हो गए (या गायब हो गए)। यह एक ज्ञात बग है । हालांकि, बग रिपोर्ट के एक टिप्पणीकार ने इसे ठीक करने के लिए एक पैच पोस्ट किया है।

PPA से पैच किए गए libnotify-bin को स्थापित करना

मैंने libnotify-bin पैकेज का एक पैच संस्करण बनाया है जो मेरे PPA में प्रतिस्थापन की अनुमति देता है। वर्तमान में यह केवल उबंटू 12.04 के लिए है, लेकिन यदि आपको किसी अन्य समर्थित रिलीज़ के लिए इसकी आवश्यकता है, तो कृपया एक टिप्पणी पोस्ट करें और मैं इसे उपलब्ध कराने की पूरी कोशिश करूंगा।

स्थापित करने के लिए, एक टर्मिनल खोलें और:

sudo apt-add-repository ppa: izx / askubuntu
sudo apt-get update
sudo apt-get install कामेच्छा-बिन

प्रतिस्थापन क्षमताओं का उपयोग कैसे करें

पैच notify-sendमें दो नए स्विच शामिल हैं, -p(या --print-id ), और -r(या --replace-id )। उनका --helpवर्णन इस प्रकार है:

  -p, --print-id नोटिफिकेशन आईडी प्रिंट करें।
  -r, --replace-id = REPLACE_ID बदलने के लिए अधिसूचना की आईडी।
  • साथ -p, प्रत्येक notify-sendएक आईडी वापस आ जाएगी एन (संख्या / पूर्णांक)।
  • के notify-sendसाथ एक और जारी -r Nकरना पिछले अधिसूचना को तुरंत बदल देगा ।
  • उदाहरण के लिए, बैश के लिए, आप आईडी को इससे बचा सकते हैं notify-send -p ...:

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

    और फिर इसे इसके साथ बदलें:

    notify-send -r $NID "MESSAGE-2"
  • आप स्क्रिप्ट में दोनों -p और -r का पुन: उपयोग कर सकते हैं , जब तक कि -r चर को शुरुआत में 0 से शुरू किया जाता है।

  • यहाँ एक सरल स्क्रिप्ट है जो आधे से दूसरे अंतराल पर 0 से 100 तक की गिनती की सूचना दिखाती है:

    #! / बिन / बैश 
    NID = 0
    i में {0..100..10} के लिए    करना       एनआईडी = $ (सूचना-भेजें -p -r $ एनआईडी $ i)       नींद ०.५    किया हुआ

मुझे ppa.launchpad.net/izx/askubuntu/ubuntu/dists/trusty/main/ ... के लिए 404 मिलते हैं । क्या यह भंडार पुराना है?
vp_arth

1
आप मेरी python स्क्रिप्ट का उपयोग कर सकते हैं जो सूचना-भेजने की तरह काम करती है: github.com/phuhl/notify-send.py
user3637541

11

आप एक "पुष्टिकरण" अधिसूचना बनाने के लिए "सिंक्रोनस" संकेत का उपयोग कर सकते हैं जो पिछली पुष्टिकरण सूचनाओं को बदल देगा। उदाहरण के लिए:

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

"एक्स-कैनोनिकल-प्राइवेट-सिंक्रोनस" संकेत इस दस्तावेज़ में निर्दिष्ट है । एक संकेत निर्दिष्ट करने के लिए, का उपयोग करें -h type:name:value। यहाँ प्रकार है string, नाम है x-canonical-private-synchronous, और ऐसा लगता है कि मान जो चाहें वह हो सकता है।

इसलिए यदि आपका पहला नोटिफिकेशन उस संकेत के साथ बना है और दूसरा भी है, तो दूसरा तुरंत पहले की जगह लेगा। ( "पुष्टि बुलबुले" के लिए कॉलम में प्रलेखन में एनिमेशन और अवधि देखें ।)


string:x-canonical-private-synchronous:anythingवास्तव में मैं क्या जरूरत थी। इस उत्तर के लिए धन्यवाद। दस्तावेज़ीकरण से जोड़ने के लिए भी
av

यह गनोम के साथ काम नहीं करता है ....
जोहान्स लेमोंड

1
यह कुछ हद तक स्पष्ट रूप से केवल ubuntu पर काम करता है।
bschlueter

10

एक्स-
रे: पहले से बाहर निकलने के लिए इंतजार किए बिना सूचना-ओएसडी में एक नई अधिसूचना को मजबूर करने के लिए कैसे?

पैच के बिना आप बस कर सकते हैं

#!/bin/bash

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

बुकमार्क:
मैं मौजूदा अधिसूचना को तुरंत बदलने के लिए 'सूचना-भेजें' का उपयोग कैसे करूं?


एक त्रुटि सूचित- osd (2592) भेजता है: ऑपरेशन की अनुमति नहीं है। इसका क्या मतलब है?

इसका मतलब यह हो सकता है कि विशेषाधिकार अपर्याप्त हैं:

sudo killall notify-osd

एक त्रुटि भेजता है notify-osd(2592): Operation not permitted। इसका क्या मतलब है?
वेदवल्स

5

मैंने एक साधारण अजगर लिपि बनाई जो लगभग सूचित-भेजने के समान काम करती है, लेकिन इसके लिए समर्थन है --replaces-id

notify-send.py

वेब: https://github.com/phuhl/notify-send.py

शेल से डेस्कटॉप सूचनाएं भेजने के लिए एक पायथन स्क्रिप्ट।

के बारे में

लिबनॉट लिनक्स दुनिया में कई लिपियों का हिस्सा है। यह डेस्कटॉप अधिसूचना विनिर्देश की कई निर्दिष्ट विशेषताओं का उपयोग करता है और उन्हें शेल-स्क्रिप्ट के लिए सुलभ बनाता है। हालाँकि यह मौजूदा अधिसूचना को इसके साथ बदलने की अनुमति नहीं देता है replaces-id। यह 2008 से एक ज्ञात बग है और इसमें एक पैच है 2012 से है। पैच अभी भी ऊपर नहीं है हालांकि (2018)।

यह अजगर स्क्रिप्ट नोटिफ़ 2 पैकेज का उपयोग करता है और शेल के लिए कार्यक्षमता को उजागर करता है।

सूचना-send.py और सूचना-भेजने के बीच अंतर

  • में notify-send.py -h शो के बजाय संकेत के लिए पैरामीटर होने का मदद करते हैं। संकेत उपयोग के लिए --hint
  • में notify-send.py -r IDऔर notify-send.py --replaces-id ID मौजूद है। एक अधिसूचना कॉल notify-send.py को उस आईडी से बदलने के लिए जिसे अधिसूचना द्वारा वापस किया गया था।
  • notify-send.py नए बनाए गए नोटिफिकेशन की आईडी लौटाता है।
  • 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]

सूचनाओं को प्रदर्शित करने के लिए, भले ही परिवाद या

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 "$@" &

यह भी देखें

डंस्ट से प्रेरित मेरे अधिसूचना-डेमन पर भी एक नज़र डालें , लेकिन कई सुधारों के साथ, एक पारदर्शी पृष्ठभूमि की संभावना और अधिसूचना केंद्रों को संग्रहीत करने वाले अधिसूचना केंद्र सहित।


इस समाधान ने ubuntu 18.10 पर मेरे लिए काम किया। अन्य समाधानों में से कोई भी काम नहीं कर रहा था।
ड्रीमकैट 4
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.