在 Ubuntu / Linux 上通过 ssh * 在远程机器上播放声音

emk*_*203 10 audio linux ssh

我想通过 SSH 在远程机器上播放声音,而无需 X11 参与。无论用户是否登录到控制台或 X,这都应该有效。

基本上,通过 ssh 登录后,命令行如下

mpg123 test.mp3
Run Code Online (Sandbox Code Playgroud)

应该在这台远程机器上播放 test.mp3。换句话说,一个穷人的公共广播系统。我在 paprefs 面板中允许通过网络进行无密码音频访问,但是当我尝试通过 ssh 播放时仍然没有声音。

实现这一目标的最简单和最可靠的方法是什么?

PS:过去的问题有低质量的答案,不能回答这个问题。

小智 6

设置DISPLAY变量来:0解决我的问题。尝试运行这样的命令:

$ DISPLAY=:0 mpg123 test.mp3
Run Code Online (Sandbox Code Playgroud)


emk*_*203 5

对于最新的 Ubuntu 系统(本例中为 17.10),需要pulseaudio在系统启动时运行或手动通过 ssh 获取音频。pulseaudio默认情况下以每个用户为基础启动,因此如果没有人登录,您只能获得 SSH 登录的空接收器,其中所有音频都会安静地消失。

对于永久解决方案,可以创建 systemd 服务:

cat <<EOF >/etc/systemd/system/pulseaudio.service
[Unit]
Description=Pulse Audio

[Service]
Type=simple
ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disable-shm --exit-idle-time=-1

[Install]
WantedBy=multi-user.target
EOF
Run Code Online (Sandbox Code Playgroud)

这确保了pulseaudio守护进程在用户脉冲启动时启动。由于开发人员强烈不鼓励这样做,因此临时使用的首选解决方案应该是通过 SSH 发布sudo pulseaudio --system -D

如果pulseaudio实例已经在运行,则应将其终止以允许新实例发现硬件。这会影响所有登录用户的音频,应根据具体情况进行处理。

无论如何,登录的用户必须是脉冲访问组的一部分:

sudo usermod -a -G pulse-access userName
Run Code Online (Sandbox Code Playgroud)

现在可以通过 SSH 在远程系统( 或其他系统)上播放mpg123声音mpv。可以通过pactl list short sinks正确的音频接收器检测来检查是否成功。