我是一名开发人员,在 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 服务执行时则没有声音!
我该怎么做才能解决这个问题?
答案1
更新答案
声音应该在服务器上播放,但问题是只有用户登录后它才会播放。
我在 Lubuntu 和 Xubuntu Bionic 的测试系统中测试了这一点(无论如何我正在测试它们)。我安装了openssh-server
(espeak
在 Xubuntu-Core 和 Ubuntu 中,您还需要程序包gnome-system-tools
才能获取该程序users-admin
)。
然后有一个简单的解决办法:
- 选择使用音频设备在
users-admin
- 按OK。
您可能需要移动窗口(带有alt+ left mouse button)来找到OK按钮。
然后它仍然在登录屏幕上播放声音ssh
,我猜也可以通过其他网络服务播放,
ssh [email protected] "espeak 'Hello while still at the log in screen'"
修改用户ID和网络地址以符合您的情况。
为了使事情顺利进行(使用ssh
),你应该使用密钥登录,但我不知道这是否是一个问题你的网络服务。
我希望这可以帮助您播放服务器中的任务完成时可以听到的声音。
原始答案
假设ssh
客户端要播放的声音
如果您通过登录,ssh
声音是在服务器上,而不是在客户端。我猜你想将声音传输到客户端。
可以将声音传输到客户端,但这并不简单。当您使用以下搜索字符串浏览互联网时,也许您会发现一些有用的东西,客户端的 Linux 声音。我想我做过(但没有测试过)。
但是有一个更简单的解决方法。在服务器上运行任务,这样当任务完成后,你就可以在客户端本地播放声音。
例子:
openssh-server
安装在我的工作站上,我可以通过本地网络从任何其他计算机连接到它。
安装espeak
,
sudo apt install espeak
下面的脚本演示了发生的情况,
ssh [email protected] \
"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
[email protected]'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:~$
如果您能听到两台计算机的声音,那么您将先听到服务器的“说话”,然后听到客户端的“说话”。否则,您将听到客户端的“说话”。