notify-send funktioniert nicht unter ssh


10

Vielleicht wird das woanders beantwortet, aber ich habe es nicht gesehen.

Ich verwende Ubuntu 14.04. Wenn ich SSH in meinen Computer einbinde, zum Beispiel:

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

Ich sehe nichts auf dem Monitor, auf dem ich am Computer angemeldet bin. Wenn ich das Präfix notify-sendmit DISPLAY=:0.0oder DISPLAY=:0nichts anderes passiert. Ich sehe nur nie eine Benachrichtigung in der aktuellen Sitzung.

Gibt es einen Trick / Schalter, um dies zum Laufen zu bringen?

Falls dies nicht klar ist, erlauben Sie mir Folgendes zu wiederholen: Von Computer A, I SSH in Computer B. Innerhalb der SSH-Sitzung möchte ich notify-send ausführen, um es auf Computer B auszuführen. Ich erwarte, dass eine Benachrichtigung vom Typ Knurren angezeigt wird auf dem Monitor von Computer B.


Für andere Leute, die dies als Top-Ergebnis über Google finden, DISPLAY=:0 notify-send 'hello'die für mich gearbeitet haben (nicht für aikeru), versuchen Sie dies vor komplizierteren Schritten.
Mark

Antworten:


9

Ich denke, Sie verwirren die verschiedenen Technologien und wie sie funktionieren. Ich würde nicht erwarten, dass der Benachrichtigungsdämon von einem System Nachrichten über SSH senden könnte. Wenn Sie festlegen, $DISPLAYwie X11 die Ausgabe einer Anwendung zu Anzeigezwecken an eine andere notify-sendsendet, wird eine tatsächliche Nachricht an den Benachrichtigungsdämon gesendet. Diese Nachricht wird über die libnotifyBibliothek gesendet .

Auszug

libnotify ist eine Bibliothek, die Desktop-Benachrichtigungen an einen Benachrichtigungsdämon sendet, wie in der Desktop-Benachrichtigungsspezifikation definiert. Diese Benachrichtigungen können verwendet werden, um den Benutzer über ein Ereignis zu informieren oder irgendeine Form von Information anzuzeigen, ohne dem Benutzer im Weg zu stehen.

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

Per App Ansatz

Eine Methode zum Verknüpfen der notify-sendNachrichten mit dem Notifier Ihres lokalen Systems besteht darin, einen Ansatz zu verwenden, der in diesem Blog-Beitrag mit dem Titel IRC-Benachrichtigungen über SSH und libnotify beschrieben wird . Dieser Ansatz muss für jede Art von Benachrichtigung angepasst werden, die Sie zu Ihrem lokalen Benachrichtiger zurücktunneln möchten.

Tunneling libnotify über SSH

Für eine allgemeinere Lösung libnotify-over-sshkann mehr sein, was Sie suchen.

Auszug

Dies ist ein Client-Server-Perl-Skript, das ich geschrieben habe, damit mein Server im Wesentlichen libnotify-Nachrichten an meinen lokalen Computer senden kann. Ich benutze dies hauptsächlich mit Weechat, habe aber eine Funktion, um es allgemeiner zu machen. Beim Aufrufen des Clients mit dem Weechat-Tag überprüft der Server den Namen des aktuell fokussierten Fensters. Wenn es mit weechat beginnt, werden Benachrichtigungen unterdrückt, wenn notify-send aufgerufen wird.

Anzeige auf dem Remote-Server

Wenn Sie andererseits lediglich versuchen, notify-sendNachrichten auf einem Remote-Server anzuzeigen, zu dem Sie ssheine Verbindung hergestellt haben, müssen Sie wahrscheinlich einem der Vorschläge folgen, die in dieser Frage und Antwort mit dem Titel " Verwenden von Benachrichtigen-Senden" gemacht wurden mit cron . Obwohl einige der Antworten darauf hinwiesen, dass dies unnötig war, musste ich Folgendes tun, wie andere in den Kommentaren zu meinem Fedora 20-System erwähnt haben, wobei Cinnamon als Desktop verwendet wurde, um die Dinge zum Laufen zu bringen.

Um notify-sendarbeiten zu können, musste ich diese Variable mit dem entsprechenden Wert aus der Desktop-Umgebung des Remote-Systems festlegen.

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

Auf meinem System konnte ich eine Datei verwenden, die genau für diesen Zweck gepflegt wurde.

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

ANMERKUNG: Der Name der DBUS-Datei ändert sich von Sitzung zu Sitzung.


Hmmm .. Ich habe einige Klarstellungen hinzugefügt. Ich möchte keine Nachrichten über SSH senden, denke ich. Ich stelle mir Notify-Send als Terminal-App vor, die ich interaktiv auf dem Host-PC (nicht auf dem Client-PC) ausführen kann. Ich denke, ich verstehe - Benachrichtigen-Senden ist ein Client an sich auf dem Host-Computer auf seine eigene Weise - ist das, was Sie sagen. Bedeutet das irgendwie, dass dies während einer SSH-Sitzung nicht möglich ist? Wohlgemerkt, ich versuche nicht, dies auf dem SSH-Client anzuzeigen, sondern nur auf dem SSH-Host / Server.
Aikeru

@aikeru - notify-sendkann Nachrichten an den Listening Notifier Daemon senden. Wenn Sie sich über SSH anmelden, verfügt diese Umgebung nicht über die erforderlichen Informationen, um mit diesem Benachrichtiger zu kommunizieren. Dies ist das zugrunde liegende Problem.
slm

Gibt es also eine Möglichkeit, sich an die aktuelle Umgebung oder ähnliches anzuschließen, sodass die erforderlichen Informationen vorhanden sind?
Aikeru

@aikeru - vieles, was ich gefunden habe, zeigt, dass die Einstellung $DISPLAY=:0funktionieren würde, aber das funktioniert auch bei mir nicht. Ich bin auf Fedora 20 und verwende Cinnamon als Desktop. Die Verwendung stracezum Debuggen zeigt, dass es eine Verbindung gibt, die beim Durchlaufen von SSH nicht hergestellt wird, und untersucht immer noch, was dies blockiert.
slm

@aikeru - siehe Updates.
slm

0

IMO, vielleicht könnten Sie verwenden:

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

Dies setzt natürlich voraus, dass ": 0" der tatsächliche Wert der DISPLAY-Variablen ist, wenn dies der einzige Benutzer ist, der derzeit angemeldet ist. Ich denke, wir müssen hier das spezielle Wort "export" verwenden, da wir zwei Befehle senden und exportieren Die Variable, die für den zweiten Befehl "notify-send" verwendet werden kann. Mit den Zeichen "&&" können wir die beiden Befehle einfach in einer Zeile starten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.