powiadom-wyślij nie działa w ssh


10

Może odpowiedź na to pytanie jest gdzie indziej, ale nie widziałem tego.

Używam Ubuntu 14.04. Kiedy SSH do mojego komputera, na przykład:

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

Nic nie widzę na monitorze, na którym jestem zalogowany do komputera. Jeśli prefiks notify-sendz DISPLAY=:0.0lub DISPLAY=:0nic nie różni się dzieje. Po prostu nigdy nie widzę żadnego powiadomienia o bieżącej sesji.

Czy jest jakiś trik / przełącznik, żeby to zadziałało?

W przypadku, gdy nie jest to jasne, pozwól mi powtórzyć: Z komputera A przesyłam SSH do komputera B. W sesji SSH chcę wykonać powiadomienie-wyślij, aby uruchomić na komputerze B. Oczekuję, że pojawi się powiadomienie typu warczenie na monitorze komputera B.


Dla innych osób, które uznają to za najlepszy wynik w Google, DISPLAY=:0 notify-send 'hello'pracował dla mnie (nie dla aikeru), spróbuj tego przed bardziej skomplikowanymi krokami.
Mark

Odpowiedzi:


9

Myślę, że mylisz różne technologie i ich działanie. Nie spodziewałbym się, że demon powiadomień z jednego systemu może wysyłać wiadomości przez SSH. Ustawianie $DISPLAYsposobu, w jaki X11 wysyła dane wyjściowe z aplikacji do innej w celu wyświetlenia, ale notify-sendwysyła rzeczywistą wiadomość do demona powiadomień. Ta wiadomość jest wysyłana za pomocą libnotifybiblioteki.

fragment

libnotify to biblioteka, która wysyła powiadomienia na pulpicie do demona powiadomień, zgodnie ze specyfikacją Desktop Notifications. Powiadomień tych można użyć do poinformowania użytkownika o zdarzeniu lub wyświetlenia jakiejś formy informacji bez wchodzenia mu w drogę.

Źródło: https://developer.gnome.org/libnotify/

Podejście według aplikacji

Jedną z metod dołączania notify-sendwiadomości do powiadamiającego systemu lokalnego jest zastosowanie podejścia opisanego w tym poście na blogu: Powiadomienia IRC za pośrednictwem SSH i libnotify . To podejście należy dostosować do każdego rodzaju powiadomienia, które chcesz tunelować z powrotem do lokalnego powiadamiającego.

Tunelowanie libnotify przez SSH

Bardziej ogólne rozwiązanie libnotify-over-sshmoże być tym, czego szukasz.

fragment

Jest to skrypt perla serwera klienta, który napisałem, aby mój serwer mógł zasadniczo wysyłać komunikaty libnotify na mój komputer lokalny. Używam tego głównie z Weechat, ale ma funkcję, która czyni go bardziej ogólnym. Podczas wywoływania klienta za pomocą znacznika weechat serwer sprawdza nazwę aktualnie aktywnego okna. Jeśli zaczyna się od weechat, powiadomienia są pomijane, jeśli nie jest wywoływane powiadomienie-send.

Wyświetlanie na zdalnym serwerze

Jeśli z drugiej strony po prostu próbujesz notify-sendwyświetlić wiadomości na zdalnym serwerze, z którym sshsię łączyłeś, prawdopodobnie będziesz musiał zastosować się do jednej z sugestii podanych w tym pytaniu zatytułowanym: Korzystanie z wysyłania powiadomień z cronem . Chociaż kilka odpowiedzi sugerowało, że nie było to konieczne, musiałem wykonać następujące czynności, jak wspomniano w komentarzach do mojego systemu Fedora 20, używając Cinnamon jako pulpitu, aby wszystko działało.

Aby zacząć notify-senddziałać, musiałem ustawić tę zmienną z odpowiednią wartością ze środowiska pulpitu systemu zdalnego.

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

W moim systemie mogłem skorzystać z pliku, który jest utrzymywany w tym właśnie celu.

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

UWAGA: Nazwa pliku DBUS zmieni się w zależności od sesji.


Hmmm .. Dodałem trochę wyjaśnień. Chyba nie chcę wysyłać wiadomości przez SSH. Myślę o powiadomieniu-wysyłaniu jako aplikacji terminalowej, którą mogę interaktywnie uruchamiać na komputerze hosta (nie klienta). Wydaje mi się, że rozumiem - powiadamianie-wysyłanie jest klientem per se na komputerze hosta na swój własny sposób - tak mówisz. Czy to w jakiś sposób oznacza, że ​​nie jest to możliwe podczas sesji SSH? Pamiętaj, że nie próbuję tego wyświetlić na kliencie SSH, tylko na hoście / serwerze SSH.
aikeru

@ aikeru - notify-sendmoże wysyłać wiadomości do demona powiadamiającego nasłuchującego. Podczas logowania przez SSH to środowisko nie ma informacji niezbędnych do komunikowania się z tym powiadomieniem, jest to podstawowy problem.
slm

Czy jest więc jakiś sposób na dołączenie do obecnego środowiska lub coś takiego, na przykład, że ma potrzebne informacje?
aikeru

@ aikeru - wiele z tego, co znalazłem, pokazuje, że ustawienie $DISPLAY=:0działałoby, ale to też nie działa dla mnie. Korzystam z Fedory 20 i używam Cinnamon jako pulpitu. Użycie stracedo debugowania pokazuje, że istnieje połączenie, które nie zostaje wykonane podczas przechodzenia przez SSH, wciąż badając, co to blokuje.
slm

@ aikeru - zobacz aktualizacje.
slm

0

IMO, być może możesz użyć:

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

To oczywiście zakładając, że „: 0” jest rzeczywistą wartością zmiennej DISPLAY, jeśli jest to jedyny zalogowany użytkownik. Myślę, że musimy tutaj użyć słowa specjalnego „eksportuj”, ponieważ wysyłamy dwie komendy i eksportujemy zmienna, którą będzie można użyć dla drugiego polecenia „powiadom-wyślij”. Znaki „&&” pozwalają nam po prostu uruchomić dwa polecenia w jednym wierszu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.