Red Hat Bugzilla – Bug 451633
pulseaudio esound compatibility is broken for older binaries
Last modified: 2008-09-09 16:08:15 EDT
Older applications which use esound (and are not dynamically linked against
current libesound) don't work. In other words, binary compatibility is broken.
The pulseaudio esound compatibility layer creates socket /tmp/.esd-<uid>
Esound applications try to open /tmp/.esd
This is as much an esound as a pulse issue, since esd now does the same thing.
But since pulse is the currently "supported" sound server, and it was Lennart
who changed this behavior in esound (Aug 2007, according to the changelog in
esound.spec), I'll file the bug here.
The work-around is to create a symlink from /tmp/.esd to /tmp/.esd-<uid>.
The problem with /tmp/.esd is that it breaks multi-user setups. And hence I fear
this is an unfixable problem.
Sorry, that's unacceptable. Binary compatibility must be preserved, and other
parts of the system make a lot of investment in that policy, so you can't just
break sound because you think it isn't easy. Anyway, what's the point of your
esound compatibility layer when it isn't actually compatible???
Anyway, I can think of some solutions... like creating the symlink like I do and
updating it when users are switched. This should work pretty well, because the
symlink is dereferenced at the time an app opens, thereafter it has a filehandle
to the right socket even through a user switch.
We break binary compatibility all the time -- in certain areas which we don't
consider part of the official ABI to program aginst. And quite frankly I'd
consider the socket path to be part of the non-exported interface of esd.
The esound compat layer works perfectly fine, if you build your stuff
dynamically. Also, it's not just Fedora which does things like this. It's Ubuntu
too. And other clueful distros. And this patch to our esd libs has been ok'ed by
if you need this kind of compatibility then feel free to create the link
yourself. Alternatively you may enable network access via paprefs. libesd will
try to connect to the well known esd port on localhost if it doesn't find the
unix socket to work. Or finally, just edit default.pa and pass
'socket=/tmp/.esd' to module-protocol-esd-unix.