SSH で通知送信が機能しません。

SSH で通知送信が機能しません。

たぶん他の場所に答えがあるかもしれませんが、私はそれを見ることができません。

私はUbuntu 14.04を実行しています。 SSH経由で自分のコンピュータに接続するときは、次のようになります。

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

ログインしたコンピューターのモニターには何も表示されません。notify-send前にDISPLAY=:0.0or を付けるとDISPLAY=:0何も起こりません。現在のセッションでは通知はまったく表示されません。

これを行うために必要なトリック/スイッチはありますか?

これが明確でない場合は、もう一度強調します。コンピュータAからコンピュータBにSSHを実行します。 SSHセッション内でコンピュータBで実行されるように通知を送信したいと思います。コンピューターBのモニターに轟音通知が表示されます。

答え1

さまざまな技術とその仕組みを混同しているようです。あるシステムの通知デーモンがSSH経由でメッセージを送信できるようにしたくありません。設定は、$DISPLAY表示目的でアプリケーションの出力を別のアプリケーションに送信するX11の方法ですが、notify-send実際のメッセージは通知デーモンに送信されます。このメッセージはlibnotifyライブラリを使用して送信されます。

抜粋

libnotifyは、デスクトップ通知仕様で定義されているように、通知デーモンにデスクトップ通知を送信するためのライブラリです。このような通知は、ユーザにイベントを知らせたり、ユーザを邪魔することなく任意の形式の情報を表示するために使用することができる。

源泉:https://developer.gnome.org/libnotify/

アプリケーション固有のメソッド

サインアップする1つの方法notify-sendは、次のブログ記事に記載されている方法を使用することです。SSHとlibnotifyによるIRC通知。この方法は、ローカル通知に再トンネリングしたい通知タイプごとにカスタマイズする必要があります。

SSHによるlibnotifyトンネルの設定

より一般的な解決策のためにlibnotify-over-sshあなたのニーズにもっと合うことができます。

抜粋

これは私のサーバーがデフォルトで私のローカルマシンにlibnotifyメッセージを送信できるように私が書いたクライアントサーバーPerlスクリプトです。主にウィチャットとして使用しますが、より多様に活用できる機能があります。 weechatタグを使用してクライアントを呼び出すと、サーバーは現在フォーカスがあるウィンドウの名前を解決します。 weechat で始まる場合、通知の送信が呼び出されないと通知は表示されません。

リモートサーバーに表示

一方、接続notify-sendに使用するリモートサーバーにメッセージを表示したい場合は、sshこのQ&Aに記載されている提案のいずれかに従うことができます。cronに通知を送信する。一部の回答ではこれは不要であることを示唆していますが、CinnamonをFedora 20システムでデスクトップとして使用している他の人の意見で述べたように、次のことを行う必要がありました。

作業を開始するには、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ファイルの名前はセッションごとに変更されます。

答え2

IMO、おそらく次のものを使用できます。

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

もちろん、これは「:0」がDISPLAY変数の実際の値であると仮定します(現在ログインしている唯一のユーザーの場合)。 2つのコマンドを送信して変数をエクスポートすると、2番目のコマンド「notify-send」で変数を使用できるため、ここでは「エクスポート」特殊単語を使用する必要があると思います。 "&&"文字を使用すると、1行に2つのコマンドを開始できます。

答え3

  1. ローカルポート:7272をdbus抽象ソケットに渡す
@local $ echo $DBUS_SESSION_BUS_ADDRESS
unix:abstract=/tmp/dbus-pH1JnDeLNA,guid=5fe0907d81e722390f1ce02d6033ad76
@local $ socat TCP-LISTEN:7272,reuseaddr,fork ABSTRACT-CONNECT:/tmp/dbus-pH1JnDeLNA
  1. リモートホストでポート7272転送を再開する
@local $ ssh -R localhost:7272:localhost:7272 remotehostname
  1. 抽象ソケットを localhost:7272 に渡す
@remote $ socat ABSTRACT-LISTEN:/tmp/custom_dbus_name,fork TCP:localhost:7272
  1. 通知の送信を開始
@remote $ export DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/custom_dbus_name,guid=5fe0907d81e722390f1ce02d6033ad76'
@remote $ notify-send "Hello, World"

関連情報