ฉันจะกรองฟองการแจ้งเตือนบางอย่างที่มาจากแหล่งที่มาที่เฉพาะเจาะจงได้อย่างไร


12

ฉันมีการกำหนดค่าระบบของฉันเมื่อฉันได้รับจดหมายใหม่บอลลูนแจ้งเตือนจะปรากฏขึ้นบนหน้าจอ สะดวกในบางครั้งและเบี่ยงเบนความสนใจในเวลาอื่น โดยไม่ต้องถอนการติดตั้งการรวม Gmail ที่ฉันใช้อยู่มีวิธีที่จะสลับจากส่วนกลางว่าการแจ้งเตือนบางประเภทจะปรากฏขึ้นหรือไม่

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


1
ต่างจากการแจ้งเตือนของ Gnome-Shell บนแอปพลิเคชัน Ubuntu ไม่ได้ลงทะเบียนในบริการการแจ้งเตือน มันใช้ libnotify สำหรับการแจ้งเตือนซึ่งกำหนดค่าตายตัวในแอปพลิเคชัน คุณสามารถลองปิดการแจ้งเตือนจากการตั้งค่าแอปพลิเคชันหากมีการตั้งค่าการแจ้งเตือน (เช่น gwibber, วิวัฒนาการ, Thunderbird ฯลฯ )
Khurshid Alam


@orschiro นี่ไม่ใช่คำถามที่ซ้ำกัน (เพิ่งโพสต์) ที่คุณอ้างถึง - คำถามนี้เกี่ยวกับความสามารถในการกรองการแจ้งเตือนบางประเภทโดยทางโปรแกรมขณะที่อนุญาตให้ผู้อื่นผ่าน คำถามอื่น ๆ เกี่ยวกับการปิดเสียงการแจ้งเตือนทั้งหมดโดยเฉพาะ
Mark

โอ้คุณพูดถูก ฉันพลาดสิ่งนี้ได้อย่างรวดเร็วก่อน ขอขอบคุณ!
orschiro

คำตอบ:


2

คุณอาจจะสามารถกรองสิ่งนี้ได้ในระดับ d-bus แต่ดูเหมือนว่าจะใช้งานได้มาก อันดับแรกดูโพสต์นี้เพื่อรับข้อมูลเชิงลึกเกี่ยวกับวิธีการใช้งาน OSD

เริ่ม dbus-monitor ก่อนที่คุณจะส่งการเรียกใช้ 'การแจ้งเตือน - ส่ง' บนคอนโซลแยกต่างหาก

เมธอด sender sender =: 1.2450 -> dest = org.freedesktop.DBus serial = 5 path = / org / freedesktop / DBus; อินเตอร์เฟซ = org.freedesktop.DBus; สมาชิก = GetNameOwner
   สตริง "org.freedesktop.Notifications"
เมธอด sender sender =: 1.2450 -> dest =: 1.41 serial = 6 path = / org / freedesktop / การแจ้งเตือน; อินเตอร์เฟซ = org.freedesktop.Notifications; สมาชิก = GetServerInformation
method return sender =: 1.41 -> dest =: 1.2450 reply_serial = 6
   สตริง "แจ้ง -osd"
   สตริง "Canonical Ltd"
   สตริง "1.0"
   สตริง "1.1"
เมธอด sender sender =: 1.2450 -> dest =: 1.41 serial = 7 path = / org / freedesktop / การแจ้งเตือน; อินเตอร์เฟซ = org.freedesktop.Notifications; = สมาชิกแจ้ง
   สตริง "แจ้งเตือน - ส่ง"
   uint32 0
   สตริง "/usr/share/pixmaps/debian-logo.png"
   สตริง "ชื่อของฉัน"
   สตริง "เนื้อหาข้อความบางส่วน"
   อาร์เรย์ [
   ]
   อาร์เรย์ [
      รายการ dict (
         สตริง "เร่งด่วน"
         ไบต์ของตัวแปร 1
      )
   ]
   int32 -1

แจ้ง-osd จะอยู่บน dbus

dpkg -L alert-osd
/usr/share/dbus-1/services/org.freedesktop.Notifications.service

แต่ไม่มีข้อ จำกัด เพิ่มเติมสำหรับบริการนี้ใน /etc/dbus-1/system.d

ดังนั้นคุณอาจสร้างไฟล์ปรับแต่งที่สามารถกรองเหตุการณ์การแจ้งเตือนตามแหล่งที่มาและบรรลุการควบคุมที่คุณทำ นั่นเป็นสิ่งที่ดีที่สุดที่ฉันสามารถทำได้โดยไม่ต้องขุดลงไปในปัญหาและข้อมูลจำเพาะของ dbus ฉันหวังว่านี่จะช่วยได้สิ่งที่คุณตามมาควรจะง่ายกว่าในการกำหนดค่าเริ่มต้น


2

... แต่ดูเหมือนว่าจะทำงานมาก ...

มันไม่ได้เลวร้ายนักอย่างน้อยสำหรับวิธีแก้ปัญหาทั่วไปแบบหยาบ

นี่คือสำเนาของรายละเอียดจากคำตอบของฉันไปยังโพสต์ของปีที่แล้ว (กันยายน 2555)

วิธีการปิดการใช้งานการแจ้งเตือนจากเครือข่ายผู้จัดการ

dbus-monitor "interface='org.freedesktop.Notifications'"                \
| grep --line-buffered  'string "NetworkManager"'                       \
| sed -u -e  's/.*/killall notify-osd/g'                                \
| bash

แทนที่string "NetworkManager"ด้วย RE ที่ต้องการเพื่อกำหนดการบล็อก

หากต้องการทราบว่ารูปแบบ RE ใดที่ตรงกับการค้นหา:
dbus-monitor "interface='org.freedesktop.Notifications'"
และดูผลลัพธ์ในขณะที่การแจ้งเตือนปรากฏขึ้น

กล่าวคือ หากต้องการลบnotify-sendข้อความให้ใช้grepบรรทัดนี้แทน:

| grep --line-buffered  'string "NetworkManager"\|string "notify-send"'  \

Caveat :
killall notify-osdเป็นการไม่แบ่งแยกและจะลบการแจ้งเตือนทั้งหมดของข้อความที่รอดำเนินการอย่างสมบูรณ์โดยไม่คำนึงว่าตัวแทนนั้นจะแจ้งNetworkManagerหรือไม่notify-sendก็ตาม

วิธีแก้ปัญหาที่ "ซื่อสัตย์" จำเป็นต้องคำนึงถึงสภาพการแข่งขันที่เป็นไปได้เมื่อจำเป็นต้องทำการล้างการแจ้งเตือนระหว่างนั้นและทำการแก้ไขการแจ้งเตือนอื่นจะปรากฏขึ้นที่ควรจะปรากฏขึ้นและไม่ได้ถูกกำจัดส่วนที่เหลือ

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

นี่เป็นงานที่ต้องใช้แรงงานคนมาก!

เป็นการดีที่การใช้ dbus โดยตรงของ

method void org.freedesktop.Notifications.CloseNotification(uint id)     [1]

หากต้องการกำหนดเป้าหมายเฉพาะการแจ้งเตือนที่ต้องการเป็นที่น่าเสียดายที่ไม่ชัดเจน ... อย่างไรก็ตาม ...

คำตอบอื่น
สามารถ org.freedesktop.Notifications.CloseNotification (uint id) สามารถเรียกใช้และเรียกใช้ผ่าน DBus ได้หรือไม่
แสดงวิธีใช้[1]อย่างน้อยด้วยnotify-sendแต่น่าเสียดายที่ไม่ได้แจ้งให้ aps โดยพลการ แม้ว่าบางแอป มีอินเทอร์เฟซแบบกำหนดเองเพื่อควบคุมการแจ้งเตือนแบบผุดขึ้น

ข้าม refs:

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