我想远程运行一个程序(通过 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大胆的通过命令行)。