在本地机器上通过 ssh 在 finch 中播放声音/通知

tes*_*ter 10 bash ssh audio

所以我有finch一个命令行聊天客户端(想想 pidgin)在我ssh进入的远程机器上运行。finch具有通知声音并且可以在发生某些事件时运行命令,让您将声音文件作为%s. 例如mplayer %s

从远程机器上,当通知发生时,我可以运行什么样的命令来播放%s本地机器上的任何内容?

and*_*coz 9

如果您使用pulse-audio作为声音服务器,您可以使用它module-native-protocol-tcp来接受来自远程机器的tcp 连接。

在以下示例中,我使用 ssh 隧道将音频请求从远程机器转发到本地机器。

在本地机器上,执行以下操作:

pactl load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
ssh -R 9999:127.0.0.1:4713 you@remotehost
Run Code Online (Sandbox Code Playgroud)

然后在远程机器上你可以使用 paplay

paplay -s 127.0.0.1:9999 soundfile.wav
Run Code Online (Sandbox Code Playgroud)

添加我发现它auth-ip-acl不接受localhost作为有效参数,您必须使用127.0.0.1(或任何您的机器使用本地主机地址)。

编辑它应该是ssh -R,不是ssh -L(我们将远程端口转发到本地端口)。


如果您有旧版本的脉冲音频(0.9.3 之前),您可以使用基于 cookie 的授权。

pactl load-module module-native-protocol-tcp auth-anonymous=1 auth-cookie-enabled=0
scp ~/.pulse-cookie you@remotehost:
ssh -R 9999:localhost:4713 you@remotehost
Run Code Online (Sandbox Code Playgroud)

显然,您可以简单地在脉冲音频中不使用任何身份验证,但我不能向您推荐此解决方案。至少使用防火墙来避免远程连接。