ThinClientAudioSupport

Differences between revisions 10 and 18 (spanning 8 versions)
Revision 10 as of 2005-11-02 04:24:55
Size: 4096
Editor: 180_220_103_66-WIFI_HOTSPOTS
Comment:
Revision 18 as of 2005-11-06 00:29:17
Size: 5305
Editor: 209
Comment:
Deletions are marked like this. Additions are marked like this.
Line 25: Line 25:
{{{XXX: Use cases should describe what should happen, not what is currently broken; if you need more detail, use a "current status" section --smurf}}}
{{{YYY: Fixed. --ScottBalneaves}}}
Line 33: Line 30:
 * esound has problems, but is a workable solution, and is used currently.  * esound has problems, but is a workable solution, and is used currently we can use it from gstreamer through the gstreamer-esd audiosink.
Line 36: Line 33:
 * gstreamer: too limited in scope.  * gstreamer: too limited in scope and would at least require to write a sounddaemon for the client.
Line 39: Line 36:
 * vsound: only supports OSS, and not ALSA.  * vsound: only supports OSS, and not ALSA and is dead upstream since some time.
Line 45: Line 42:
For dapper, ltsp should still default to esound but forward the sound through a ssh tunnel to no break the current secure model we use with the ew ltsp implementation. We can automatically detect this in the planned automatic backend for gstreamer. For dapper, ltsp should still default to esound since this is a long term working and proven solution in all LTSP implementations currently, since we dont want to make intrusive changes in dapper release cycle and all other implementations would require the development of a soundserver on the client. esound has known security issues we catch via having a read only filesystem, new sounddaemons would probably introduce new unpredictable bugs or security issues. We can automatically detect this in the planned automatic backend for gstreamer.

Line 49: Line 48:
 * We will start the esound daemon from the ltsp-client bootscript.  * We will start the esound daemon as a system service from the ltsp-client bootscript.
 * running esound as root wont affect security at all here, since thin clients have a read only filesystem
Line 51: Line 51:
 * On the server side, gnome-session needs to use gstreamer-esd as sound output. This wil require a change to the Gnome default session setup we plan to use in dapper, which is currently going to use alsa and dmix.  * On the server side, gnome-session needs to use gstreamer-esd as sound output. This will require a change to the Gnome default session setup we plan to use in dapper, which is currently going to use alsa and dmix.
'''ScottJamesRemnant: that is an approved spec, please indicate the scope of this "replace".'''
Line 57: Line 58:
 * Patches to libesd to make it know where to sent the sound stream to.  * The variables below need to go into the ldm binary or into a config file ldm reads (ldm hands over environment variables to the ltsp session)
Line 61: Line 63:

'''MattZimmerman: Seems simpler to use the esddsp wrapper to wrap the X session'''

 The following needs to be run on session startup (through ldm's session startup script) on the server:
Line 62: Line 68:

'''MattZimmerman: simpler to use esd -public on the client'''
Line 67: Line 76:
{{{000: JeffWaugh says this is entirely sane. This is the way to do thin client audio, it's not weird at all.}}}

'''MattZimmerman: it would be preferable to do this only for thin client sessions, rather than globally. Isn't it possible to make this work more smoothly using the gstreamer autosink?'''

'''ScottJamesRemnant: what about gstreamer's network sink?'''

Summary

Thin Client Audio Support how to get audio to the thin clients

Rationale

Since LTSP sessions currently run fully on the server and there is no tweakage done, the first LTSP Client grabs the available audio device to play sounds. For dapper the sound output needs to get redirected to the Thin Client over the network to use the actual sound device the user listens to Smile :)

Use cases

Ian clicks on a menu item in Gnome and the "plop" sound used for the menu item gets played on the thin client's sound system as expected.

Daniel is playing a tutorial video from a training website on his thin client at work. His phone rings, and he mutes his volume control so he can hear. It works as expected.

Wilma has edited some wav files in the music class at her schoool where a edubuntu LTSP server is used. She can easily play back the edited sound files because there is sound support for the Thin Clients in Edubuntu LTSP.

Scope

Options:

  • ALSA itself does not support network operation, so an intermediary must be used.
  • esound has problems, but is a workable solution, and is used currently we can use it from gstreamer through the gstreamer-esd audiosink.
  • polypaudio is dead upstream.
  • jack needs kernel patches, has a bad security history and is not supportable in main.
  • gstreamer: too limited in scope and would at least require to write a sounddaemon for the client.
  • nas: poor performance leads to "stuttering" audio playback.
  • mas: dead upstream
  • vsound: only supports OSS, and not ALSA and is dead upstream since some time.

Design

Idea (network sound for the poor): Have ALSA output to a file/pipeline, and forward this (netcat/ssh) to the client. We should evaluate whether this works in principle (if this works we should make it the default for dapper+1 !).

For dapper, ltsp should still default to esound since this is a long term working and proven solution in all LTSP implementations currently, since we dont want to make intrusive changes in dapper release cycle and all other implementations would require the development of a soundserver on the client. esound has known security issues we catch via having a read only filesystem, new sounddaemons would probably introduce new unpredictable bugs or security issues. We can automatically detect this in the planned automatic backend for gstreamer.

Implementation

  • We will start the esound daemon as a system service from the ltsp-client bootscript.
  • running esound as root wont affect security at all here, since thin clients have a read only filesystem
  • Create the configuration files necessary to have esound listen to TCP connections.
  • On the server side, gnome-session needs to use gstreamer-esd as sound output. This will require a change to the Gnome default session setup we plan to use in dapper, which is currently going to use alsa and dmix.

ScottJamesRemnant: that is an approved spec, please indicate the scope of this "replace".

  • The correct environment variable will have to be set to allow libesd on the server to be aware to which IP it shall send the sound. This will be done by reading the LTSP_CLIENT environment variable to determine the clients IP, and then creating whatever other environment variables are needed.

Code

  • The variables below need to go into the ldm binary or into a config file ldm reads (ldm hands over environment variables to the ltsp session)
    • export ESPEAKER=${LTSP_CLIENT}:16001
    • export ESDDSP_MIXER=1
    • export LD_PRELOAD="/usr/lib/libesd.so.0 /usr/lib/libesddsp.so.0"

MattZimmerman: Seems simpler to use the esddsp wrapper to wrap the X session

  • The following needs to be run on session startup (through ldm's session startup script) on the server:
    • /usr/bin/esdctl unlock

MattZimmerman: simpler to use esd -public on the client

  • A change to the default setup in the gnome session is required (dapper will go with alsa/dmix by default, we need gstreamer-esd). This should be done by setting the default gstreamer output sink in ltsp-server's postinst/prerm scripts.

XXX:Is that enough detail to actually implement it? (Honest question, I don't have the technical experience in that area to judge that) --smurf YYY: Yes, since the implementation is very straight forward, very easy and already used in older ltsp implementations --ogra ZZZ: Cleaned up a bit --ScottBalneaves 000: JeffWaugh says this is entirely sane. This is the way to do thin client audio, it's not weird at all.

MattZimmerman: it would be preferable to do this only for thin client sessions, rather than globally. Isn't it possible to make this work more smoothly using the gstreamer autosink?

ScottJamesRemnant: what about gstreamer's network sink?

Data preservation and migration

Outstanding issues

BoF agenda and discussion

ThinClientAudioSupport (last edited 2009-07-24 03:11:46 by 201)