以SSH方式运行的程序在其运行的计算机上访问pulseaudio


10

我想远程(通过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

检查汉斯答案的更新。pax11publish -r适用于我的Ubuntu 19.10。
史蒂芬·波士顿

Answers:



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 )。


在Ubuntu 16.04上,该命令必须为export DBUS_SESSION_BUS_ADDRESS=$(sudo cat /proc/$(pidof nautilus | cut -f1 -d" ")/environ | tr '\0' '\n' | grep DBUS_SESSION_BUS_ADDRESS | cut -d '=' -f2-)pidof ,因为它同时返回processid和父进程id。但就我而言,这种解决方案不起作用。我仍然遭受这个connection refused问题。
汉斯·德拉贡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.