Ubuntu 16.04 – 如何在后台运行来自webservice的脚本播放声音

我是一名开发人员,并在ubuntu 16.04上配置了服务器,运行Web服务。

那些Web服务在本地调用一些脚本文件,脚本正在执行某项任务,并且应该在任务完成时播放声音。

问题是脚本被调用,任务完成,但声音没有播放。

这是我的清单:

  • 声音工作正常并在计算机上正确配置。
  • 如果我从终端命令行调用我的脚本,则任务完成,并播放声音。
  • 如果我从Web服务调用脚本,则任务已完成,但声音未播放。

这是我测试过的一个例子:

# script name : eject.sh # ... here I do some stuff, which are working fine... play -q /mnt/datas/wifi_started.mp3 >/dev/null cvlc --play-and-exit /mnt/datas/wifi_started.mp3 &>/dev/null & nohup mplayer /mnt/datas/wifi_started.mp3 > /dev/null 2>&1 

上面的所有行都是从终端执行脚本文件时播放声音,而从Web服务执行时没有声音!

我该怎么做才能解决这个问题?

更新的答案

声音应该在服务器上播放,但问题是它只会在用户登录时播放。

我在Lubuntu和Xubuntu Bionic(我正在测试)的测试系统中对此进行了测试。 我安装了openssh-serverespeak (在Xubuntu-Core和Ubuntu中你还需要程序包gnome-system-tools来获取程序users-admin )。

然后有一个简单的解决方法:

  1. 选择在users-admin 使用音频设备
  2. 确定

您可能需要移动窗口(使用alt + 鼠标左键 )以找到“ 确定”按钮。

在此处输入图像描述

然后它仍然在登录屏幕上工作,通过ssh播放声音,我猜也可以通过其他网络服务,

 ssh tester@192.168.0.10 "espeak 'Hello while still at the log in screen'" 

修改用户ID和网络地址以匹配您的案例。

为了使事情顺利(使用ssh ),您应该使用密钥登录,但我不知道您的 Web服务是否存在问题。

我希望这可以帮助您播放当服务器中的任务完成时您能听到的声音。

原始答案

假设ssh和声音要在客户端播放

如果您通过ssh则声音在服务器上,而不是在客户端。 我猜你想把声音转移到客户端。

  • 可以将声音传输到客户端,但这不是直截了当的。 当您使用以下搜索字符串浏览互联网时,也许您会发现有用的东西, 客户端的linux声音 。 我想我做了(但没有测试)。

  • 但有一种解决方法,更简单。 在服务器上运行任务,以便在任务完成后可以在客户端本地播放声音。

例:

openssh-server安装在我的工作站中,我可以通过本地网络从任何其他计算机连接到它。

安装espeak

 sudo apt install espeak 

以下shellcript说明了发生了什么,

 ssh sudodus@192.168.0.2 \ "echo 'Who am I to do this?'| tee /dev/stderr |espeak; whoami| \ tee /dev/stderr |espeak| tee /dev/stderr |espeak;\ echo 'At which server?'| tee /dev/stderr |espeak;hostname -A| tee /dev/stderr|espeak" sleep 1 echo 'Who am I to check this?'| tee /dev/stderr |espeak; whoami| tee /dev/stderr |espeak echo 'At which client?' | tee /dev/stderr |espeak hostname -A| tee /dev/stderr |espeak 

这是使用Lubuntu的实时驱动器的书面输出。

 lubuntu@lubuntu:~$ ./tasks-at-server_reported-at-client sudodus@192.168.0.2's password: Who am I to do this? sudodus At which server? xw8400 Who am I to check this? lubuntu At which client? lubuntu lubuntu@lubuntu:~$ 

如果您可以听到两台计算机,您将听到服务器“说话”,然后听到客户“说话”。 否则你会听到客户’说’。