बैश से गुब्बारा पॉपअप कैसे साफ़ करें


5

मैं notify-sendएक स्क्रिप्ट में एक अधिसूचना सेट कर रहा हूं । एकमात्र समस्या यह है कि जब स्क्रिप्ट को कई बार कॉल किया जाता है, तो सभी सूचनाओं को एक अधिसूचना स्टैक में जोड़ा जाता है और केवल एक के बाद एक कॉल किया जाता है।

क्या स्क्रीन पर सभी सूचनाएं साफ़ करने और नया प्रदर्शित करने का कोई तरीका है?

जवाबों:


4

दुर्भाग्य से, आप notify-osdसूचनाओं को स्पष्ट या "खारिज" नहीं कर सकते । आपके पास ज़ेनिटी का उपयोग करने से बेहतर भाग्य हो सकता है ; इसके पास नोटिफ़िकेशन-सेंड से अधिक विकल्प हैं

--timeoutकुछ सेकंड बीतने के बाद आप अधिसूचना को खारिज करने के विकल्प का उपयोग कर सकते हैं ।

zenity --info --timeout=5 --title="Test Notification" --text "$(date +%Y%m%d-%H%M%S): My notification"

आप पिछली अधिसूचनाओं की प्रक्रिया आईडी (एक पर्यावरण चर या फ़ाइल में) की एक सूची भी रख सकते हैं और उन्हें HUPएक नया अधिसूचना प्रदर्शित करने से पहले उन्हें खाली करने के लिए एक संकेत भेज सकते हैं ।

i=0
pids=
for x in $(seq 1 5); do
    i=$((i + 1))
    zenity --info --title="Test Multiple Notifications" --text "$(date +%Y%m%d-%H%M%S): Notification number $i" &
    pids+="$! "
done
sleep 5
for p in $pids; do kill -HUP $p >/dev/null 2>&1; done
i=$((i + 1))
zenity --info --timeout=2 --title="Test Multiple Notifications" --text "$(date +%Y%m%d-%H%M%S): Notification number $i" &

या zenityनई अधिसूचना प्रदर्शित करने से पहले सभी प्रक्रियाओं को मार दें :

killall zenity
zenity --info --title="Test Notifications" --text "$(date +%Y%m%d-%H%M%S): My notification" &

या zenityएक नई अधिसूचना प्रदर्शित करने से पहले कुछ प्रक्रियाओं को मार डालो :

ps ho pid,args | grep -i 'zenity.\+--title=test notifications' | sed -e 's/^ *\([0-9]\+\).*$/\1/'
zenity --info --title="Test Notifications" --text "$(date +%Y%m%d-%H%M%S): My notification" &

यह अनुचित होगा यदि मैंने इसे अस्वीकार कर दिया है, लेकिन आप स्पष्ट रूप से गलत हैं । सूचनाओं के संबंध में, विकल्पों की तुलना में zenityकहीं अधिक खराब सेट है notify-send। और यह किसी भी तरह से समस्या को हल नहीं करता है, क्योंकि यह पहले से ही भेजे गए सूचनाओं पर नियंत्रण नहीं देता है।
jankes

@jankes: क्षमा करें, मैंने मूल रूप से अपने मोबाइल पर उत्तर दिया था और वास्तव में मेरे उत्तर को विस्तृत नहीं कर सका। विस्तृत करने के लिए मेरे उत्तर का संपादन किया।
डैन क्रूज़

आपने जो प्रस्तुत किया है वह सूचना संवाद है , सूचना नहीं । उन्हें विकल्प के रूप में इस्तेमाल किया जा सकता है, लेकिन वे पूरी तरह से अलग प्रकृति के हैं। के साथ सूचनाएं बनाने के लिए zenity, आपको --notificationएक साथ विकल्प का उपयोग करने की आवश्यकता है --listen
jankes

@DanCruz यह काम कर रहा है, लेकिन मुझे यह त्रुटि मिलती है: "** (zenity: 8624): चेतावनी **: अभिगम्यता बस पते को पुनः प्राप्त करने में त्रुटि: org.freedesktop.DBus.Error.ServiceUn बने: नाम org.a11y.Bus प्रदान नहीं किया गया था।" किसी भी .service फ़ाइलों द्वारा Gtk-Message: GtkDialog बिना क्षणिक माता-पिता के मैप किए गए। यह अस्वीकृत है। "
डॉ। जेकै

13

यह वास्तव में सूचित-उपयोग का उपयोग करने योग्य है:

notify-send --hint int:transient:1 "Title" "Body"

transientसंकेत सेट करने से , जब अधिसूचना समाप्त हो जाती है या खारिज हो जाती है, तो यह अधिसूचना बार में नहीं घूमती है।


4

शायद सबसे अच्छा विकल्प नहीं है, लेकिन यहां एक विकल्प है: आप बस notify-osdप्रक्रिया को मार सकते हैं और इसे पुनरारंभ कर सकते हैं। फिर अपनी अधिसूचना प्रकाशित करें।

pkill notify-osd
/usr/lib/x86_64-linux-gnu/notify-osd &
notify-send "Hello!"

मेरे लिए, xfce का उपयोग करते हुए, प्रक्रिया का नाम नहीं दिया गया , notify-osdबल्कि इसके बजाय xfce4-notifyd, विशेष रूप से /usr/lib/x86_64-linux-gnu/xfce4/notifyd/xfce4-notifyd। मैं इसके बजाय कर सकता था pkill xfce4-notifydऔर यह मौजूदा अधिसूचना को मार देगा। अगली बार जब नोटिफिकेशन भेजा गया, तो ऑटो ने xfce4-Informd प्रक्रिया को फिर से बनाया, इसलिए यह सुरक्षित लग रहा था।
स्कॉट

1

दुर्भाग्य से यह सूचनाओं द्वारा निर्धारित सूचनाओं से संभव नहीं है notify-sendसूचना-भेजें.c के स्रोत कोड पर एक नज़र है - यह एक अधिसूचना बनाता है, इसके मापदंडों को सेट करता है, लेकिन कहीं भी इसके संदर्भ को संग्रहीत नहीं करता है। इसके बजाय, यह कॉल करता है g_object_unref, जो, जैसा कि मैं यहां से समझता हूं , प्रभावी रूप से संदेश के साथ बाहरी बातचीत की संभावना को हटा देता है। इसलिए, सूचनाओं पर उन्नत प्रबंधन शक्ति रखने के लिए, आपको notify-send(शायद एक कस्टम एप्लिकेशन) की तुलना में अलग टूल का उपयोग करना होगा ।


अपने लक्ष्य को प्राप्त करने के लिए एक संभावित क्रूड हैक xautomation टूल का उपयोग करके एक स्क्रिप्ट होगी । आप हो सकता है उन्हें इस्तेमाल सभी अधिसूचना पॉप-अप पर "बंद" बटन का पता लगाने और उनमें से प्रत्येक पर एक माउस क्लिक अनुकरण करने के लिए। लेकिन यह इतना आसान नहीं है और निश्चित रूप से एक साफ समाधान नहीं है ।

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