0

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

ssh user_name@B_ip 'notify-send hello'

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

4

2 回答 2

1

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

工作流程是:

  1. 将 dbus 套接字公开到本地 TCP 端口(仅可从 localhost 获得)
  2. 在远程机器上反向隧道此本地 TCP 端口(使用 SSH)
  3. 在远程机器上,将此 TCP 端口公开为抽象套接字
  4. 告诉 notify-send 连接哪个 dbus 会话(创建的抽象套接字)

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

  1. 转发本地端口:7272到dbus抽象socket(后面会用到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"
于 2021-03-04T13:04:57.513 回答
1

您必须设置DISPLAY变量

DISPLAY=:0.0 notify-send hello

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

于 2017-10-18T18:27:17.260 回答