Program działa w SSH uzyskując dostęp do pulseaudio na maszynie, na której działa

10

Chciałbym uruchomić program zdalnie (przez ssh), ale z dźwiękiem przechodzącym na zdalną maszynę, na której program faktycznie działa. Normalnie działałoby to z ALSA, ale pulseaudio najwyraźniej sprawdza uwierzytelnianie sesji przed zezwoleniem na połączenie z klientem.

Jak sprawić, by ta kontrola była mniej rygorystyczna?

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
eudoksos
źródło
Sprawdź odpowiedź Hansa na aktualizację. pax11publish -rdziała na moim Ubuntu 19.10.
Stephen Boston

Odpowiedzi:

5

W moim przypadku działało dla mnie:

pax11publish -r
Hans Deragon
źródło
2

Winowajcą jest to, że ssh nie ustawia, DBUS_SESSION_BUS_ADDRESSktóry jest używany do łączenia się z Pulseaudio. Rozwiązaniem (na podstawie tego postu ) było dodanie następujących wierszy do mojego ~/.bashrc, które są używane podczas łączenia przez 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

wykorzystuje PID nautilusa (być może trzeba to zmienić, aby uzyskać jakiś proces, który zawsze jest uruchamiany w sesji) i wyszukuje jego zmienne środowiskowe DBUS_SESSION_BUS_ADDRESSi eksportuje je.

Dzięki temu programy łączące się z Pulsem działają poprawnie. Inne programy komunikujące się w trakcie sesji d-bus również działają (np. Audtool do prowadzenia zuchwałej przez linię poleceń).

eudoksos
źródło
W systemie Ubuntu 16.04 polecenie musi być wykonane, 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-)ponieważ pidof zwraca zarówno processid, jak i macierzysty processid. Ale w moim przypadku to rozwiązanie nie działa; Nadal mam connection refusedproblem.
Hans Deragon