![程序在 SSH 中运行,访问运行它的计算机上的pulseaudio](https://linux22.com/image/62076/%E7%A8%8B%E5%BA%8F%E5%9C%A8%20SSH%20%E4%B8%AD%E8%BF%90%E8%A1%8C%EF%BC%8C%E8%AE%BF%E9%97%AE%E8%BF%90%E8%A1%8C%E5%AE%83%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%B8%8A%E7%9A%84pulseaudio.png)
我想远程运行一个程序(通过 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大胆的通过命令行)。