通知发送在SSH下不起作用


10

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

我正在运行Ubuntu 14.04。例如,当我通过SSH进入计算机时:

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

我登录到计算机的监视器上没有任何显示。如果我前缀notify-sendDISPLAY=:0.0DISPLAY=:0没有不同情况。我只是从未在当前会话中看到任何通知。

有一些技巧/开关来使它起作用吗?

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


对于其他通过Google将此视为最佳结果的人DISPLAY=:0 notify-send 'hello'(对aikeru而言)(而不是对aikeru)有用,请尝试更复杂的步骤。
2015年

Answers:


9

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

摘抄

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

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

每应用程式方式

notify-send消息加入本地系统的通知程序的一种方法是使用此博客文章概述的方法:通过SSH进行IRC通知和libnotify。对于每种您想通过隧道返回本地通知程序的通知类型,都需要自定义此方法。

通过SSH隧道libnotify

对于更通用的解决方案libnotify-over-ssh,您可能正在寻找更多。

摘抄

这是我编写的客户端服务器perl脚本,因此服务器实际上可以将libnotify消息发送到本地计算机。我主要在weechat中使用此功能,但具有使其更通用的功能。当使用weechat标签调用客户端时,服务器将检查当前焦点窗口的名称。如果以weechat开头,则在未调用notify-send的情况下抑制通知。

在远程服务器上显示

另一方面,如果您只是想用来notify-send在用来ssh连接的远程服务器上显示消息,则可能需要遵循此问题与解答中标题为“ 使用通知发送 ”的建议之一。与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文件的名称将在会话之间更改。


嗯..我增加了一些澄清。我想我不想通过SSH发送消息。我认为通知发送作为终端应用程序,可以与主机(而非客户端)PC交互运行。我想我知道-通知发送本身就是主机上的客户端,这就是您的意思。这是否以某种方式意味着在SSH会话中无法执行此操作?请注意,我并不是想让它出现在SSH客户端上,而仅出现在SSH主机/服务器上。
aikeru 2014年

@aikeru- notify-send可以将消息发送到侦听通知程序守护程序。当您通过SSH登录时,此环境没有与该通知程序进行通信所需的信息,这是潜在的问题。
slm

那么,有什么方法可以附加到当前环境或类似的东西上,从而获得所需的信息?
aikeru 2014年

@aikeru-我发现的大部分内容都表明设置$DISPLAY=:0可以正常工作,但这对我也不起作用。我正在使用Cinnamon作为桌面的Fedora 20。通过strace调试可以看出,通过SSH时没有建立连接,但仍在调查阻止该连接的原因。
slm

@aikeru-查看更新。
slm

0

IMO,也许您可​​以使用:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.