DISPLAY=:0 を設定しても、ssh 経由の通知送信には影響しません。

DISPLAY=:0 を設定しても、ssh 経由の通知送信には影響しません。

私はフラットメイトのコンピュータ(Ubuntu 14.04)にsshでアクセスできます。ssh経由で彼女にメッセージを送りたいので、次のコマンドを使用します。

export DISPLAY=:0 && notify-send "sample message"

コマンドは0で終了しますが、メッセージは表示されません。一方、エクスポート DISPLAY=:0そして例えばxterm、xterm が正常に開きます。 libnotifyインストールしたら、通知送信ローカルでは表示されます。また、別のコンピューターで ssh 経由でこのコマンドを試すと、機能します。

なぜこのようなことが起こるのか、何かアイデアはありますか? ありがとうございます

答え1

友人のセッション内で通知を送信できるようにするには、notify-send にセッション資格情報が必要です。これらは、ログイン時にセッションに含まれる環境変数に保存され、不正なバックグラウンド プロセスによってデスクトップが混乱するのを防ぎます。

これらのセッション資格情報を利用可能にする(そしてデスクトップのセキュリティを完全に破壊する)簡単な方法は、デスクトップ セッションで画面セッションを開始し、それをバックグラウンドにすることです。

その後、SSH で接続し、screen セッションに接続すると、notify-send が機能します。これを行う場合は、フラットメイトに、デスクトップとファイルへの完全なアクセス権があることを完全に認識させる必要があります。

スクリーンセッションを構成するには:

ダッシュから「スタートアップアプリケーション」を実行します

[追加] をクリックし、名前を付けて、次のコマンドを入力します。

screen -dmS desktop_session

次にssh経由で接続すると

screen -r desktop_session
notify-send "Insecure message"

その後、任意のコマンドを実行して、そのグラフィカル出力をそのデスクトップ セッションに表示できます。

これを対話的に行う必要があります。非対話的に行う場合は、シェル スクリプトでファイルをポーリングし、データがある場合はそれを送信して通知します。または、インスタント メッセージ クライアントを使用することもできます。

答え2

私も同じようなことをしなければなりませんでした。1 台のコンピューターで更新を実行し、別のコンピューターに通知を送信したいと考えていました。私は以下を使用しましたsshpass:

sshpass -p user_password ssh -X user_name@ip_address DISPLAY=:0 notify-send "The message"

user_passwordここで、user_nameと をip_address特定のユーザー/マシンに置き換えます。

関連情報