通知发送在 ssh 下不起作用

通知发送在 ssh 下不起作用

也许这在其他地方有答案,但我没有看到。

我运行的是 Ubuntu 14.04。当我通过 SSH 连接到我的机器时,例如:

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

我在登录计算机的监视器上看不到任何内容。如果我notify-send加上前缀DISPLAY=:0.0或 则DISPLAY=:0不会发生任何不同的情况。我只是从未在当前会话中看到任何通知。

有什么技巧/开关可以让这个工作吗?

如果这还不清楚,请允许我重申一下:从计算机 A,我通过 SSH 进入计算机 B。在 SSH 会话中,我希望执行通知发送以在计算机 B 上运行。我希望出现咆哮类型的通知在计算机 B 的显示器上。

答案1

我认为您混淆了各种技术及其工作原理。我不希望来自一个系统的通知守护进程可以通过 SSH 发送消息。设置$DISPLAY是 X11 将应用程序的输出发送到另一个应用程序以用于显示目的的方式,但它notify-send是向通知守护程序发送实际消息。此消息是使用libnotify库发送的。

摘抄

libnotify 是一个将桌面通知发送到通知守护程序的库,如桌面通知规范中所定义。这些通知可用于向用户通知事件或显示某种形式的信息,而不会妨碍用户。

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

每个应用程序的方法

一种加入方法notify-send是使用标题为以下的博客文章中概述的方法:通过 SSH 和 libnotify 的 IRC 通知。此方法需要根据您想要通过隧道返回到本地通知程序的每种类型的通知进行自定义。

通过 SSH 建立 libnotify 隧道

对于更通用的解决方案libnotify-over-ssh可能更符合您的需求。

摘抄

这是我编写的客户端服务器 Perl 脚本,以便我的服务器基本上可以将 libnotify 消息发送到我的本地计算机。我主要将其与 weechat 一起使用,但有一个功能可以使其更通用。当使用 weechat 标签调用客户端时,服务器会检查当前焦点窗口的名称。如果它以 weechat 开头,如果不调用 notification-send ,通知将被抑制。

在远程服务器上显示

另一方面,如果您只是尝试在notify-send您用来连接的远程服务器上显示消息ssh,您可能需要遵循此问答中提出的标题为以下的建议之一:将通知发送与 cron 结合使用。尽管一些答案表明这是不必要的,但我必须按照其他人在我的 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 文件的名称会随着会话的不同而改变。

答案2

IMO,也许你可以使用:

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

当然,假设“:0”是 DISPLAY 变量的实际值(如果它是当前登录的唯一用户)。我认为我们必须在这里使用“导出”特殊词,因为我们正在发送两个命令,并且如果我们导出该变量可用于第二个命令“notify-send”。字符“&&”只是允许我们在一行中启动两个命令。

答案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"

相关内容