程序在 SSH 中运行,访问运行它的计算机上的pulseaudio

程序在 SSH 中运行,访问运行它的计算机上的pulseaudio

我想远程运行一个程序(通过 ssh),但将音频发送到该程序实际运行的远程计算机。这通常可以与 ALSA 一起使用,但在允许客户端连接之前,pulseaudio 显然会检查一些会话验证器。

如何让这个检查不那么严格?

local: $ ssh remote           # remote is running pulseaudio and has sound hardware

remote:$ paplay something.wav
Connection failure: Connection refused

pa_context_connect() failed: Connection refused
remote:$ audacious something.mp3 # opens on local's X11 display
pulseaudio: Failed to connect to server: Connection refused
pulseaudio: Failed to connect to server: Connection refused

答案1

就我而言,以下内容对我有用:

pax11publish -r

答案2

罪魁祸首是 ssh 没有设置DBUS_SESSION_BUS_ADDRESS用于连接 Pulseaudio 的连接。一个解决方案(基于这个帖子) 是将以下行添加到 my ~/.bashrc,通过 ssh 连接时使用:

if [[ -n $SSH_CLIENT ]]; then
    export DBUS_SESSION_BUS_ADDRESS=`cat /proc/$(pidof nautilus)/environ | tr '\0' '\n' | grep DBUS_SESSION_BUS_ADDRESS | cut -d '=' -f2-`
fi

它使用 nautilus 的 PID(您可能需要更改它以获得始终在会话中运行的某个进程)并搜索其环境变量并将DBUS_SESSION_BUS_ADDRESS其导出。

这使得连接到 Pulse 的程序运行良好。其他通过会话 d-bus 进行通信的程序也可以工作(例如用于驱动的​​ audtool大胆的通过命令行)。

相关内容