сповіщення-відправлення не працює під ssh


10

Можливо, на це відповіли десь ще, але я цього не бачив.

Я запускаю Ubuntu 14.04. Наприклад, коли я ввімкнув SSH у свою машину:

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

Я нічого не бачу на моніторі, де я ввійшов до машини. Якщо я приставку notify-sendз DISPLAY=:0.0або DISPLAY=:0нічого іншого не трапиться. Я просто не бачу жодного повідомлення про поточну сесію.

Чи є якийсь трюк / перехід до того, щоб це працювати?

Якщо це не зрозуміло, дозвольте мені ще раз повторити: З комп’ютера A я входжу в комп'ютер B. У межах сеансу SSH я хочу виконати сповіщення-відправлення для запуску на комп’ютері B. Я очікую, що з’явиться повідомлення про тип гарчання на моніторі комп’ютера Б.


Для інших людей, які вважають це найкращим результатом через Google, DISPLAY=:0 notify-send 'hello'працював на мене (а не на aikeru), спробуйте це перед складнішими кроками.
Марк

Відповіді:


9

Я думаю, що ви плутаєте різні технології та те, як вони працюють. Я не очікував, що демон-повідомлення з однієї системи може надсилати повідомлення через SSH. Налаштування $DISPLAYполягає в тому, як X11 відправляє вихід з програми в іншу для демонстрації цілей, але повідомлення notify-sendнадсилає фактичне повідомлення демону сповіщень. Це повідомлення надсилається за допомогою libnotifyбібліотеки.

витяг

libnotify - це бібліотека, яка надсилає сповіщення на робочому столі до демона сповіщень, як визначено у специфікації сповіщень на робочому столі. Ці сповіщення можна використовувати для інформування користувача про подію або відображення певної форми інформації, не заважаючи користувачеві.

Джерело: https://developer.gnome.org/libnotify/

За підхід до програми

Одним із способів приєднання notify-sendповідомлень до оповіщувача вашої локальної системи є використання підходу, описаного в цій публікації блогу під назвою: IRC-повідомлення через SSH та libnotify . Цей підхід потрібно налаштувати під кожен тип сповіщень, які ви хочете повернути тунелю до місцевого сповіщувача.

Тунелювання libnotify над SSH

Для більш загального рішення libnotify-over-sshможе бути більше того, що ви шукаєте.

витяг

Це сценарій perl для клієнтського сервера, який я написав, щоб мій сервер міг фактично надсилати повідомлення libnotify на мою локальну машину. Я використовую це в основному з weechat, але має особливість зробити його більш загальним. Під час виклику клієнта з тегом weechat сервер перевіряє ім'я поточного зосередженого вікна. Якщо це починається з weechat, сповіщення призупиняється, якщо не викликається повідомлення notify-send.

Відображення на віддаленому сервері

Якщо з іншого боку ви просто намагаєтеся використовувати notify-sendдля відображення повідомлень на віддаленому сервері, з яким ви раніше sshпідключалися, вам, ймовірно, доведеться дотримуватися однієї з пропозицій, що були зроблені в цьому запитанні під назвою: Використання сповіщення-відправлення з кроном . Незважаючи на те, що кілька відповідей підказують, що це непотрібно, я повинен був зробити наступне, як інші згадували в коментарях до моєї системи Fedora 20, використовуючи Cinnamon як робочий стіл, щоб налагодити роботу.

Для notify-sendроботи мені довелося встановити цю змінну з відповідним значенням із середовища робочого столу віддаленої системи.

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

У моїй системі я зміг використати файл, який підтримується саме для цієї мети.

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

ПРИМІТКА: Ім'я файлу DBUS буде змінюватися від сеансу до сеансу.


Хммм .. я додав дещо уточнення. Я не хочу надсилати повідомлення через SSH, я думаю. Я думаю, що сповістити-надіслати як термінальний додаток, що я можу інтерактивно працювати на хост (не клієнт) ПК. Я думаю, я розумію - сповіщення-відправлення - це клієнт сам по собі на хост-машині - це те, що ви говорите. Це якось означає, що це неможливо зробити під час сеансу SSH? Зауважте, я не намагаюся, щоб це відображалось на клієнті SSH, лише хості / сервері SSH.
aikeru

@aikeru - notify-sendможе надсилати повідомлення на демон демона слухача. Коли ви входите через SSH, це середовище не містить інформації, необхідної для зв'язку з цим сповіщувачем, є основною проблемою.
slm

Так чи є спосіб приєднатись до поточного середовища чи чогось подібного, таким, щоб він мав необхідну інформацію?
aikeru

@aikeru - багато з того, що я знайшов, показує, що налаштування $DISPLAY=:0буде працювати, але це також не працює для мене. Я в Fedora 20, використовуючи Cinnamon в якості робочого столу. Використання straceдля налагодження це показує, що існує з’єднання, яке не відбувається під час проходження через SSH, і все ж досліджує, що це блокує.
slm

@aikeru - див. оновлення.
slm

0

ІМО, можливо, ви можете використовувати:

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

Це, звичайно, припускаючи, що ": 0" - це реальне значення змінної DISPLAY, якщо це єдиний користувач, який наразі увійшов. змінна, яку буде доступна для використання для другої команди "notify-send". Символи "&&" просто дозволяють запустити дві команди в одному рядку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.