มีวิธีที่จะทำให้ Ubuntu อ่านการแจ้งเตือนหรือไม่?


9

Ubuntu มีระบบการแจ้งเตือนที่ยอดเยี่ยมมาก มีวิธีทำให้ Ubuntu อ่านการแจ้งเตือนเมื่อปรากฏหรือไม่

หรือเป็นไปได้ที่จะเชื่อมโยงข้อความในการแจ้งเตือนไปespeak?


bugs.launchpad.net/ubuntu/+source/notify-osd/+bug/345357รัฐออร์ก้านี้ไม่ได้และตอนนี้จะทำอีกครั้ง (?)
Rinzwind

1
ปลาวาฬเพชรฆาตอ่านทุกอย่างและเป็นที่น่ารำคาญมากสิ่งที่กำลังมองหาวิธีที่จะอ่านเฉพาะการแจ้งเตือนต่อไปขอบคุณสำหรับการสนับสนุนที่ :)
Meow

คำตอบ:


17

คำถามนี้น่าสนใจจริง ๆ เพื่อเป็นคำตอบ

dbus-monitorเมื่อดำเนินการรอสัญญาณและเมื่อมาถึงก็จับและให้ข้อมูลที่เหมาะสมเกี่ยวกับมัน ในทำนองเดียวกันก็สามารถดำเนินการได้รับข้อมูลเกี่ยวกับการแจ้งเตือน เมื่อดำเนินการ:

dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "member=Notify\|string"

มันจะรอการแจ้งเตือนและเมื่อการแจ้งเตือนใด ๆ มาถึงมันจะให้ข้อมูลของการแจ้งเตือน

ตัวอย่างเช่นเมื่อเสียงเพิ่มขึ้น / ลดลงหรือมีการเปลี่ยนแทร็กเพลงหรืออื่น ๆ ที่ให้ข้อความ ฉันสร้างการแจ้งเตือนบนเดสก์ท็อปด้วยตนเองโดยใช้notify-send คำสั่งบนเทอร์มินัลอื่น:

notify-send "Hello How are you?"

จากนั้นเทอร์มินัลแรกที่dbus-monitorรันคำสั่งจะให้ข้อความดังนี้:

saurav@saurav-P4I45Gx-PE:~$ dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "member=Notify\|string"
   string ":1.473"
method call sender=:1.474 -> dest=:1.475 serial=7    path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications;  member=Notify
   string "notify-send"
   string ""
   string "Hello How Are You?"
   string ""
         string "urgency"

ตอนนี้การส่งออกดังกล่าวข้างต้นสามารถส่งผ่านไปespeakยังข้อความที่อ่านได้อย่างง่ายดาย ตัวอย่างเช่น,

การแทนที่dbus-monitorคำสั่งด้านบนด้วยข้อความต่อไปนี้จะอ่านข้อความแจ้งเตือน:

ตรวจสอบมันทำงานอย่างไร:

  • ดำเนินการคำสั่งนี้ในเทอร์มินัลและปล่อยให้มันรันอยู่:

    dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "string" | grep --line-buffered -e method -e ":" -e '""' -e urgency -e notify -v | grep --line-buffered '.*(?=string)|(?<=string).*' -oPi | grep --line-buffered -v '^\s*$' | xargs -I '{}' espeak {}
    

    ฉันรู้ว่ามันยาวมาก แต่ไม่มีวิธีอื่นที่จะทำให้เล็กเพราะการกรองการแจ้งเตือนจริงทำให้มันยาว

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

    notify-send "Hello! I am Saurav Kumar."
    

    ทันทีที่คุณดำเนินการคำสั่งมันจะพูด (อ่าน) การแจ้งเตือน

แม้ว่ามันกิน 4-5 ชั่วโมงของฉัน แต่ตอนนี้ฉันมีความสุขที่จะทำให้มันทำงาน

คุณยังสามารถสร้างคำสั่งของคุณเองsaynotiและดำเนินการทุกครั้งที่คุณต้องการการแจ้งเตือนการอ่าน โดยทำตามขั้นตอนเหล่านี้คุณสามารถทำได้:

  • saynotiขั้นแรกให้บันทึกคำสั่งที่แท้จริงไฟล์ที่เรียกว่า คุณสามารถใช้ชื่อไฟล์ใดก็ได้ที่จะกลายเป็นชื่อคำสั่งจริงของคุณ

  • จากนั้นให้ไฟล์ที่ปฏิบัติการได้และย้ายหรือคัดลอกไปที่/bin:

    chmod +x saynoti
    sudo cp saynoti /bin
    
  • ตอนนี้คุณสามารถดำเนินการคำสั่งใหม่ของคุณเพื่อเริ่มพูดการแจ้งเตือน :

    saynoti
    
  • เพื่อฆ่ากระบวนการทำงานคุณสามารถดำเนินการคำสั่งนี้:

    pkill dbus-monitor
    

    หรือเพียงแค่กดCtrl+ Cบนเทอร์มินัลที่saynotiกำลังทำงานอยู่

  • นอกจากนี้คุณยังสามารถเรียกใช้saynotiทุกครั้งที่ระบบของคุณเริ่มต้นด้วยการทำให้มันเป็นแอพลิเคชันที่เริ่มต้นขึ้น

ฉันอยากจะบอกว่าขอบคุณสำหรับคำถามนี้ เนื่องจากคำถามนี้ฉันเรียนรู้หลายสิ่งหลายอย่าง :)

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


@ Meow: ฟังดูดีที่คุณพอใจกับผลลัพธ์ ในอนาคตหากคุณต้องการแก้ไขใด ๆ เพียงแค่ ping ฉันที่นี่
Saurav Kumar

@ Meow: ตรวจสอบรุ่นสุดท้ายที่ใช้งานได้ ฉันแก้ไขปัญหาทั้งหมดแล้วและใช้งานได้ดี คุณจะมีความสุขที่ได้รับรุ่นนี้
Saurav Kumar

2
เพื่อนของคุณไม่สามารถถามอะไรอีกเลย; ฉันวางไว้ในรายการเริ่มต้นของฉันและใช้งานได้อย่างไม่มีที่ติ Merci beaucoup
Meow

คุณต้องการเรียนรู้จากที่ใดdbus-monitorฉันต้องการเริ่มเรียนรู้
Edward Torvalds

@edwardtorvalds: คุณสามารถเรียนรู้ได้จากเว็บไซต์อย่างเป็นทางการเกี่ยวกับ Dbus และ Dbus-Monitor 1. freedesktop.org/wiki/Software/dbus 2. dbus.freedesktop.org/doc/dbus-monitor.1.html
Saurav Kumar

0

ฉันมีปัญหากับพิเศษ "ในที่อยู่อีเมลของฉันดังนั้นฉันได้เพิ่มนี้ในบรรทัดรหัสข้างต้นเป็น espeak ไม่จำเป็นต้อง" เลยอ่านออก;)

| sed 's / \ "// g' |

=>

| grep --line-buffered -v '^ \ s * $' | sed 's / \ "// g' | xargs -I '{}' espeak {}

ทำงานเย็น ดีกว่าส่งทวีต - ส่ง lib เอง 4 "สวัสดี! ฉันชื่อ Saurav Kumar"

ปรับปรุง: ไม่ทำงานอย่างต่อเนื่อง ฉันจะใช้ tee -a $ file |

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