Programa executado no SSH acessando o pulseaudio na máquina em que é executado

10

Gostaria de executar um programa remotamente (através do ssh), mas com o áudio indo para a máquina remota onde o programa realmente é executado. Isso normalmente funcionaria com o ALSA, mas o pulseaudio aparentemente verifica algum autenticador de sessão antes de permitir a conexão de um cliente.

Como tornar essa verificação menos rigorosa?

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
fonte
Verifique a resposta de Hans para uma atualização. pax11publish -rfunciona no meu Ubuntu 19.10.
Stephen Boston

Respostas:

5

No meu caso, o seguinte funcionou para mim:

pax11publish -r
Hans Deragon
fonte
2

O culpado é que o ssh não define o DBUS_SESSION_BUS_ADDRESSque é usado para se conectar ao Pulseaudio. Uma solução (com base nesta postagem ) foi adicionar as seguintes linhas às minhas ~/.bashrc, que são usadas ao conectar-se através do 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

ele usa o PID do nautilus (pode ser necessário alterá-lo para obter algum processo que sempre é executado na sessão) e pesquisa suas variáveis ​​de ambiente DBUS_SESSION_BUS_ADDRESSe exporta-o.

Isso faz com que os programas conectados ao Pulse funcionem bem. Outros programas que se comunicam pela sessão também funcionam com o d-bus (como o audtool para conduzir audaciosamente a linha de comando).

eudoxos
fonte
No Ubuntu 16.04, o comando deve ser 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-)porque pidof retorna processid e parent processid. Mas no meu caso, essa solução não funciona; Eu ainda sofro do connection refusedproblema.
Hans Deragon 31/03/19