Ubuntuに通知を読み上げる方法はありますか?


9

Ubuntuには非常に優れた通知システムがあります。通知が表示されたときにUbuntuに通知を読み上げる方法はありますか?

または、通知のテキストをにリンクすることは可能espeakですか?


このバグ.launchpad.net / ubuntu / + source / notify-osd / + bug / 345357は、orcaがそうでなかったことを今や繰り返します(?)
Rinzwind

1
orcaはすべてを読み取り、探しているものが非常に迷惑です。サポートのおかげでとにかく通知のみを読み取る方法です:)
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システムを起動アプリケーションにすることで、システムが起動するたびに実行することもできます

この質問をありがとうございます。この質問のために、私は多くのことを学びました。:)

問題が発生した場合、またはさらに変更/修正が必要な場合は返信してください。最終的な作業バージョンを入手していただければ幸いです。


@ニャー:あなたは結果に満足しているようですね。今後、変更が必要な場合は、ここでpingしてください。
Saurav Kumar 2013

@ニャー:最終的な作業バージョンを確認してください。私はすべての問題を解決し、それは素晴らしい働きをしています。あなたはこのバージョンを喜んで入手します。
Saurav Kumar 2013

2
すごい、他に何も尋ねることはできません。私はそれを私のスタートアップリストに入れて、それは完璧に動作しますmerci beaucoup
Meow

についてどこから学びましたかdbus-monitor、私は学び始めたいと思います
エドワードトーバルズ

@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 {}

クールな仕事。notify-send lib自体を微調整するよりもはるかに優れています4「こんにちは!私はSaurav Kumarです。」

更新:安定して動作しません。使用します| tee -a $ file |

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.