可以使用notify-send通过ssh向Windows X服务器发送弹出通知吗?

可以使用notify-send通过ssh向Windows X服务器发送弹出通知吗?

我希望我的备份脚本在完成后发出通知。我将 Ubuntu 作为无头服务器运行,并使用 Windows 上的 PuTTY 登录。我已经安装了 x11-apps,并验证了 xclock 和 xcalc 可以在 Windows X 服务器 (Xming) 上成功运行。

如果这不可能的话,我可以使用哪种通知系统来代替?

答案1

如果您的服务器是“真正”无头的 - 就像您安装 Ubuntu 的服务器版本时一样 - 那么它将不会安装 X 库,因此无法充当​​ X 客户端,所以它无法控制 Windows 上的 X 服务器。 (请注意,甚至不会xterm安装。)

如果您的 PuTTY 会话仍然打开,那么服务器可以用来wall使通知出现在所有终端上。

否则,通知管理员的惯常(且有弹性)方式是发送电子邮件。如果您使用计划任务要触发备份作业,您甚至不需要为此做任何事情。我对 Windows 有点陌生,但我想您可以让 Windows 在收到特定电子邮件时通知您。

答案2

我已经成功地做到了这一点窗户发出咆哮声。以下是一些可以帮助您快速入门的内容:

  • 为 Windows 安装 growl
  • 在 growl 配置的“安全”选项卡上,禁用“需要 LAN 应用程序密码”(YMMV,我使用 Windows 防火墙管理安全性)并启用“允许网络通知”

以上操作将在 Windows 上启用通知服务器(将 Windows 的 growl 添加到启动应用程序中,以便始终运行它)

有很多方法可以从您的 ubuntu 服务器发送通知,这里有一个使用 python 的简单方法: - 安装 python/virtualenv - 安装 gntp 包:$ pip install gntp

现在打开文本编辑器并粘贴以下内容:

#!/usr/bin/env python
import gntp.notifier


def send(description, applicationName='Sample Application', noteType="Message",
    title="Msg", applicationIcon=None, hostname='127.0.0.1',
    password=None, port=23053, sticky=False, priority=None,
    callback=None, notificationIcon=None, identifier=None):

    growl = gntp.notifier.GrowlNotifier(
        applicationName=applicationName,
        notifications=[noteType],
        defaultNotifications=[noteType],
        applicationIcon=applicationIcon,
        hostname=hostname,
        password=password,
        port=port,
        )

    result = growl.register()

    return growl.notify(
        noteType=noteType,
        title=title,
        description=description,
        icon=notificationIcon,
        sticky=sticky,
        priority=priority,
        callback=callback,
        identifier=identifier,
        )


if __name__ == '__main__':
    send('Testing sample application')

这假设您的 ssh 客户端正在将端口 23053 转发到您的 Windows 机器。

答案3

可能notify-send无法在 ubuntu 无桌面服务器上运行。但是,使用少量脚本zenity几乎可以达到同样的效果。notify-send

zenity --info --text="Notification body"

例如尝试

alias alrt='error_code=$?; __f(){ [[ $1 -eq 0 ]] && zenity --info --text 'Success' || zenity --error --text 'Error';  }; __f $error_code'
true; alrt
false; alrt

原始警报行为模仿

原始警报

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

使用 zenity 而不是通知发送 (notify-send) 调整警报

alias alert='zenity "$([ $? = 0 ] && echo --info || echo --error)" --text "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

用法:

  • echo happy command; alert check this out
  • echo sorrow command; false; alert check this out

相关内容