notify-send不通过SSH工作

时间:2017-10-18 12:19:39

标签: shell ssh notify-send

我想使用PC A 通过SSH向PC B 发送通知,但我没有在B上看到通知。

ssh user_name@B_ip 'notify-send hello'

我也试过这个:在 B 上使用SSH登录 A ,然后重新登录 B ,然后发送通知。但它仍然没有奏效。没有在B上看到通知。

2 个答案:

答案 0 :(得分:1)

您必须设置 DISPLAY 变量

DISPLAY=:0.0 notify-send hello

有关此变量的一些信息,请参阅this

答案 1 :(得分:1)

通知通过 dbus(用户会话)发送。您需要通过 SSH 建立 dbus 套接字的隧道,以便在另一台计算机上运行的程序可以向您的桌面发送通知。

工作流程是:

  1. 将 dbus 套接字暴露给本地 TCP 端口(仅从本地主机可用)
  2. 在远程机器上反向隧道这个本地 TCP 端口(使用 SSH)
  3. 在远程机器上,将此 TCP 端口公开为抽象套接字
  4. 告诉通知发送连接哪个 dbus 会话(创建的抽象套接字)

@local 代表您的桌面,@remote 代表您 ssh 到的机器。

  1. 将本地端口:7272 转发到 dbus 抽象套接字(稍后将使用 guid)
@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(替换 $REMOTE_HOSTNAME)
@local $ ssh -R localhost:7272:localhost:7272 $REMOTE_HOSTNAME
  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"