39

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.

1 Answer 1

39

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.

12
  • 2
    Where does ~/.pulse_cookie exist? On the remote or locally?
    – HSchmale
    Commented Dec 29, 2015 at 0:29
  • 2
    Both. 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.)
    – grawity
    Commented Dec 29, 2015 at 15:29
  • 2
    Note 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
    Commented Jun 1, 2016 at 23:59
  • 2
    you may add if test "$SSH_CLIENT" ; then pax11publish -i ; export PULSE_SERVER=tcp:localhost:24713 ; fi to the remote .bashrc : this will set the pulsecookie and the env variable automatically when you ssh
    – am70
    Commented Jan 7, 2021 at 11:05
  • 2
    It's quite important to be clear about what procedures are to be done on which machine. If the words "client" and "server" are used, it's also important to be clear about who those are. With X, programs run on an X client and are displayed on an X server, which is inverse of what may be intuited by the two words. So who is the first computer and who is the "other"? Commented Jun 26, 2022 at 5:22

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .