Forwarding audio like X in SSH

27

18

While it is possible to use X applications remotely by using -X switch in ssh, the sound is being played in remote machine's speaker only. For example if I view a film in VLC/Totem only video is visible and I can't hear the audio. Is there a way to forward audio too? [without digging through Pulse-audio's setup, I mean; Like how ssh understands X forwarding by itself.]

I have tried this only in Ubuntu (in various Ubuntu versions from 9.10 through 10.10), if that helps.

Akilan

Posted 2011-01-11T20:06:55.030

Reputation: 528

Answers

30

First, run paprefs, go to Network Server and check Enable network access to local sound devices. This will load "module-native-protocol-tcp" in PulseAudio.

You can now access the PulseAudio server in several ways:

Manually forward the TCP connection over SSH

  1. Use pax11publish to discover your PulseAudio listener port (usually 4713);
  2. Connect to another computer with ssh -R 24713:localhost:4713 (the remote port '24713' was chosen arbitrarily);
  3. Copy your authentication cookie (~/.config/pulse/cookie) to that computer;
  4. Finally run export PULSE_SERVER="tcp:localhost:24713" and test with pactl info.

Use automatic direct connection with X11-based discovery

Whenever you SSH with X11 forwarding enabled, PulseAudio programs use X11 to discover your sound server (use pax11publish or xprop -root PULSE_SERVER to see for yourself). They will try to establish a direct (non-SSH, unencrypted) connection to your computer for audio streaming.

Use automatic direct connection with DNS-SD discovery

If you have avahi-daemon and pulseaudio-zeroconf installed, you can activate "Allow other machines to discover local devices". This will load "module-zeroconf-publish".

Other computers, with the option "Make discoverable network devices available locally" enabled (module-zeroconf-discover), will automatically list outputs (sinks) that your computer exports. They will use a direct (unencrypted) connection for audio streaming.

This method also requires ~/.config/pulse/cookie to be identical across hosts.

user1686

Posted 2011-01-11T20:06:55.030

Reputation: 283 655

2Where does ~/.pulse_cookie exist? On the remote or locally? – HSchmale – 2015-12-29T00:29:48.533

2Both. It's generated by the pulseaudio daemon, then read by connecting clients (like a password), so you'll want to copy it from the server to clients. (Note that the path has since been changed to ~/.config/pulse/cookie; if one doesn't work, try the other.) – user1686 – 2015-12-29T15:29:58.603

2Note that after changing the settings in paprefs, you must manually restart at least pulseaudio. In my case, after spending hours trying to figure out what was wrong, I just rebooted, and then everything worked :). – crazy2be – 2016-06-01T23:59:09.643

This worked for me, thanks. Using a remote raspberry pi with rtl-sdr, hence wanting to get audio over ssh working. – Paul M – 2019-04-17T13:18:02.580