J'essaie de filtrer chaque notification via espeak. Cependant, je n'arrive pas à trouver un moyen d'obtenir le corps de notification à partir d'un script python, ou même quel signal_name écouter.
bus.add_signal_receiver(espeak,
dbus_interface="org.freedesktop.Notifications",
signal_name="??")
Essayer de google pour cela semble seulement donner des résultats impliquant la création de nouvelles notifications, donc je suis complètement perdu maintenant.
N'importe qui peut m'aider avec ça?
En bref, ce que je veux, c'est écouter les notifications entrantes en utilisant python, et obtenir l'attribut "body" de la notification.
dbus-monitor "type='signal',interface='org.freedesktop.Notifications'"
ne montre rien mais qu'elledbus-monitor "interface='org.freedesktop.Notifications'"
affiche des notifications (le type est 'method_call' et non 'signal').Réponses:
Pour garder cela à jour: à partir de dbus 1.5, quelque chose d'un paramètre supplémentaire est requis lors de l'ajout d'une chaîne de correspondance avec
bus.add_match_string_non_blocking
pour s'assurer que nous recevons tout.Le code résultant serait le suivant:
la source
unable to connect to session bus: Operation was cancelled
. Nous passonsbus
au filtre.from gi.repository import GLib as glib
de faire ce travail.Par notifications, vous entendez les "bulles OSD" que certains logiciels envoient, comme le changement de volume, le chat IM, etc.? Vous voulez créer un programme python pour les capturer?
Eh bien, Ask Ubuntu n'est pas l'AQ d'un programmeur, et le développement de logiciels est un peu au-delà de la portée, mais voici un petit code que j'ai fait capturer des bulles de notification:
Laissez cela s'exécuter dans un terminal, puis ouvrez une autre fenêtre de terminal et testez-le:
Et le programme affichera ceci:
Comme vous l'avez peut-être deviné,
message.get_args_list()[0]
est l'expéditeur, [2] pour l'icône, [3] pour le résumé et [4] pour le corps du texte.Pour la signification des autres champs, consultez les documents officiels de spécifications
la source
J'ai eu du mal à faire fonctionner les autres exemples, mais j'y suis finalement arrivé. Voici un exemple de travail:
Si vous souhaitez voir un exemple de travail plus détaillé, je vous recommande de consulter Notifications.py dans le projet recent_notifications .
la source