Program berjalan di SSH mengakses pulseaudio pada mesin di mana ia berjalan

10

Saya ingin menjalankan program dari jarak jauh (melalui ssh) tetapi dengan audio pergi ke mesin jarak jauh di mana program sebenarnya berjalan. Ini biasanya bekerja dengan ALSA, tetapi pulseaudio tampaknya memeriksa beberapa autentikator sesi sebelum mengizinkan koneksi dari klien.

Bagaimana cara membuat pemeriksaan ini tidak terlalu ketat?

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
sumber
Periksa jawaban Hans untuk pembaruan. pax11publish -rbekerja di Ubuntu 19.10 saya.
Stephen Boston

Jawaban:

5

Dalam kasus saya, berikut ini bekerja untuk saya:

pax11publish -r
Hans Deragon
sumber
2

Penyebabnya adalah ssh tidak mengatur DBUS_SESSION_BUS_ADDRESSyang digunakan untuk terhubung ke Pulseaudio. Solusi (berdasarkan pada posting ini ) adalah menambahkan baris berikut ke my ~/.bashrc, yang digunakan saat menghubungkan over 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

ia menggunakan PID nautilus (Anda mungkin perlu mengubahnya sehingga untuk mendapatkan beberapa proses yang selalu berjalan di sesi) dan mencari variabel lingkungannya untuk DBUS_SESSION_BUS_ADDRESSdan mengekspornya.

Ini membuat program yang terhubung ke Pulse berjalan dengan baik. Program lain yang berkomunikasi melalui sesi d-bus juga berfungsi (seperti audtool untuk mengemudi dengan berani melalui baris perintah).

eudoxos
sumber
Pada Ubuntu 16.04, perintah tersebut harus 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-)sejak pidof mengembalikan baik processid dan parent processid. Tetapi dalam kasus saya, solusi ini tidak bekerja; Saya masih menderita connection refusedmasalah.
Hans Deragon