Programme exécuté en SSH accédant à pulseaudio sur la machine où il s'exécute

10

Je voudrais exécuter un programme à distance (via ssh) mais avec le son allant vers la machine distante où le programme s'exécute réellement. Cela fonctionnerait normalement avec ALSA, mais pulseaudio vérifie apparemment un authentificateur de session avant d'autoriser la connexion à partir d'un client.

Comment rendre ce contrôle moins strict?

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
eudoxos
la source
Vérifiez la réponse de Hans pour une mise à jour. pax11publish -rfonctionne sur mon Ubuntu 19.10.
Stephen Boston

Réponses:

5

Dans mon cas, les éléments suivants ont fonctionné pour moi:

pax11publish -r
Hans Deragon
la source
2

Le coupable est que ssh ne définit pas DBUS_SESSION_BUS_ADDRESSce qui est utilisé pour se connecter à Pulseaudio. Une solution (basée sur ce post ) a été d'ajouter les lignes suivantes à my ~/.bashrc, qui sont utilisées lors de la connexion via 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

il utilise le PID de nautilus (vous devrez peut-être le changer pour obtenir un processus qui est toujours exécuté dans la session) et recherche ses variables d'environnement DBUS_SESSION_BUS_ADDRESSet les exporte.

Cela permet aux programmes de connexion à Pulse de fonctionner correctement. D'autres programmes communiquant via la session d-bus fonctionnent également (comme audtool pour conduire audacieusement sur la ligne de commande).

eudoxos
la source
Sur Ubuntu 16.04, la commande doit être 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-)car pidof renvoie à la fois processid et parent processid. Mais dans mon cas, cette solution ne fonctionne pas; Je souffre toujours du connection refusedproblème.
Hans Deragon