уведомить-отправить не работает под SSH

10

Может быть, это ответили где-то еще, но я этого не видел.

Я использую Ubuntu 14.04. Когда я SSH в мою машину, например:

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

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

Есть какой-то трюк / переключатель, чтобы заставить это работать?

В случае, если это не ясно, позвольте мне повторить: с компьютера A я подключаюсь по SSH к компьютеру B. В рамках сеанса SSH я хочу выполнить команду notify-send для запуска на компьютере B. Я ожидаю появления уведомления рычажного типа на мониторе компьютера Б.

aikeru
источник
Для других людей, которые считают это лучшим результатом через 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, уведомления подавляются, если не вызывается notify-send.

Отображение на удаленном сервере

Если, с другой стороны, вы просто пытаетесь использовать notify-sendдля отображения сообщений на удаленном сервере, к которому вы sshподключались, вам, вероятно, потребуется выполнить одно из предложений, сделанных в этом разделе вопросов и ответов под названием « Использование notify-send». с хрон . Несмотря на то, что в нескольких ответах говорилось, что в этом нет необходимости, я должен был сделать следующее, о чем другие упоминали в комментариях к моей системе 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 будет меняться от сеанса к сеансу.

SLM
источник
Хммм .. Я добавил некоторые уточнения. Я не хочу отправлять сообщения через SSH, я думаю. Я думаю о уведомлении-отправке как о терминальном приложении, которое я могу запустить в интерактивном режиме на хост-компьютере (а не на клиенте). Я думаю, я понимаю - notify-send является клиентом по-своему на хост-машине по-своему - это то, что вы говорите. Значит ли это, что это невозможно сделать во время сеанса SSH? Имейте в виду, я не пытаюсь заставить это появляться на клиенте SSH, только хост / сервер SSH.
aikeru
@aikeru - notify-sendможет отправлять сообщения демону уведомлений о прослушивании. Когда вы входите через SSH, эта среда не имеет информации, необходимой для связи с этим уведомителем, является основной проблемой.
SLM
Так есть ли способ присоединиться к текущей среде или что-то в этом роде, чтобы он имел необходимую информацию?
aikeru
@aikeru - многое из того, что я нашел, показывает, что настройка $DISPLAY=:0будет работать, но это не работает и для меня. Я на Fedora 20 использую Cinnamon в качестве рабочего стола. Использование straceдля отладки показывает, что существует соединение, которое не выполняется при прохождении через SSH, все еще исследуя, что блокирует это.
SLM
@aikeru - смотрите обновления.
СЛМ
0

ИМО, может быть, вы могли бы использовать:

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

Это, конечно, при условии, что «: 0» является реальным значением переменной DISPLAY, если это единственный пользователь, вошедший в систему в данный момент. Я думаю, что мы должны использовать здесь специальное слово «export», потому что мы посылаем две команды, и если мы экспортируем переменная, которую он будет использовать для второй команды «уведомить-отправить». Символы «&&» просто позволяют нам запускать две команды в одной строке.

Марко А. Родригес Г.
источник