notify-send ne fonctionne pas sous ssh

10

Peut-être que c'est répondu ailleurs, mais je ne l'ai pas vu.

J'utilise Ubuntu 14.04. Lorsque je SSH dans ma machine, par exemple:

ssh <user>@<machineip> notify-send "Hello"

Je ne vois rien sur le moniteur où je suis connecté à la machine. Si je préfixe notify-sendavec DISPLAY=:0.0ou DISPLAY=:0rien de différent ne se produit. Je ne vois jamais aucune notification sur la session en cours.

Y a-t-il une astuce / un commutateur pour que cela fonctionne?

Dans le cas où cela n'est pas clair, permettez-moi de répéter: De l'ordinateur A, je SSH vers l'ordinateur B. Dans la session SSH, je souhaite exécuter notify-send pour s'exécuter sur l'ordinateur B. J'attends qu'une notification de type grognement apparaisse sur le moniteur de l'ordinateur B.

aikeru
la source
Pour d'autres personnes qui trouvent cela comme le meilleur résultat via Google, ont DISPLAY=:0 notify-send 'hello'travaillé pour moi (pas pour aikeru), essayez cela avant des étapes plus compliquées.
Mark

Réponses:

9

Je pense que vous confondez les différentes technologies et leur fonctionnement. Je ne m'attendrais pas à ce que le démon de notification d'un système puisse envoyer des messages via SSH. La définition de la $DISPLAYfaçon dont X11 envoie la sortie d'une application à une autre à des fins d'affichage, mais notify-sendenvoie un message réel au démon de notification. Ce message est envoyé via la libnotifybibliothèque.

extrait

libnotify est une bibliothèque qui envoie des notifications de bureau à un démon de notification, comme défini dans la spécification Desktop Notifications. Ces notifications peuvent être utilisées pour informer l'utilisateur d'un événement ou afficher une certaine forme d'information sans gêner l'utilisateur.

Source: https://developer.gnome.org/libnotify/

Approche par application

Une méthode pour joindre les notify-sendmessages au notificateur de votre système local consiste à utiliser une approche décrite par ce billet de blog intitulé: Notifications IRC via SSH et libnotify . Cette approche devrait être personnalisée pour chaque type de notification que vous souhaitez renvoyer vers votre notificateur local.

Tunnelling libnotify sur SSH

Pour une solution plus générale libnotify-over-sshpeut être plus ce que vous recherchez.

extrait

Il s'agit d'un script perl client-serveur que j'ai écrit afin que mon serveur puisse essentiellement envoyer des messages libnotify à ma machine locale. Je l'utilise principalement avec weechat mais a une fonctionnalité pour le rendre plus général. Lors de l'appel du client avec la balise weechat, le serveur vérifie le nom de la fenêtre active actuelle. S'il commence par weechat, les notifications sont supprimées si non notifier-envoyer est appelé.

Affichage sur le serveur distant

Si, d'autre part, vous essayez simplement d'utiliser notify-sendpour afficher des messages sur un serveur distant auquel vous vous êtes sshconnecté, vous devrez probablement suivre l'une des suggestions qui ont été faites dans cette Q&R intitulée: Utilisation de notify-send avec cron . Même si plusieurs des réponses suggéraient que cela n'était pas nécessaire, j'ai dû faire ce qui suit, comme d'autres l'ont mentionné dans les commentaires sur mon système Fedora 20 utilisant Cinnamon comme bureau pour faire fonctionner les choses.

Pour notify-sendcommencer à travailler, j'ai dû définir cette variable avec la valeur appropriée de l'environnement de bureau du système distant.

$ export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-wzrbFpDUZQ,guid=82e5bffe1f819506faecc77a53d3ba73

Sur mon système, j'ai pu utiliser un fichier qui est conservé à cet effet précis.

$ ssh me@remote
$ source ~/.dbus/session-bus/6a34f24f9c504e3f813bc094ed0b67af-0
$ notify-send "hi"

REMARQUE: le nom du fichier DBUS changera de session en session.

slm
la source
Hmmm .. J'ai ajouté quelques précisions. Je ne veux pas envoyer de messages via SSH, je pense. Je pense à notify-send comme une application de terminal que je peux exécuter de manière interactive sur le PC hôte (et non client). Je pense que je comprends - notifier-envoyer est un client en soi sur la machine hôte à sa manière - c'est ce que vous dites. Cela signifie-t-il que cela n'est pas possible de faire pendant une session SSH? Attention, je n'essaye pas de faire apparaître ceci sur le client SSH, seulement l'hôte / serveur SSH.
aikeru
@aikeru - notify-sendpeut envoyer des messages au démon de notification d'écoute. Lorsque vous vous connectez via SSH, cet environnement ne dispose pas des informations nécessaires pour communiquer avec ce notificateur, c'est le problème sous-jacent.
slm
Existe-t-il un moyen de se connecter à l'environnement actuel ou à quelque chose comme ça, de sorte qu'il dispose des informations nécessaires?
aikeru
@aikeru - une grande partie de ce que j'ai trouvé montre que le réglage $DISPLAY=:0fonctionnerait, mais cela ne fonctionne pas aussi pour moi. Je suis sur Fedora 20 en utilisant Cinnamon comme bureau. Utiliser stracepour déboguer cela montre qu'il y a une connexion qui ne se fait pas lorsque vous passez par SSH, en recherchant toujours ce qui bloque cela.
slm
@aikeru - voir les mises à jour.
slm
0

OMI, vous pourriez utiliser:

ssh user@host 'export DISPLAY=:0 && notify-send "test message"'

Ceci, bien sûr, en supposant que ": 0" est la vraie valeur de la variable DISPLAY, si c'est le seul utilisateur actuellement connecté. Je pense que nous devons utiliser le mot spécial "export" ici parce que nous envoyons deux commandes et si nous exportons la variable qu'il pourra utiliser pour la deuxième commande "notify-send". Les caractères "&&" nous permettent simplement de lancer les deux commandes sur une seule ligne.

Marco A. Rodriguez G.
la source