]> code.delx.au - pulseaudio/blobdiff - doc/FAQ.html.in
add documentation for module-volume-restore
[pulseaudio] / doc / FAQ.html.in
index 074561c1f748ffb3f8eff7c2055b0ed285038d77..a042dd7b2e8da2c668a8ddecd59d860700103501 100644 (file)
   embed Polypaudio in the aRts process.</p></li>
 
   <li><p><b>I often hear noises when playing back with Polypaudio, what can I do?</b></p>
-  <p>There are to possible solutions: either make the polypaudio
-  binary SUID root (<tt>chmod u+s /usr/bin/polypaudio</tt>) and run it
-  with argument <tt>-r</tt> or increase the fragment sizes of the audio
+  <p>There are to possible solutions: run polypaudio with argument
+<tt>--high-priority=1</tt> and make yourself member of the group
+<tt>realtime</tt>, or increase the fragment sizes of the audio
   drivers. The former will allow Polypaudio to activate
   <tt>SCHED_FIFO</tt> high priority scheduling (root rights are dropped
-  immediately after this).</p></li>
+  immediately after this). Keep in mind that this is a potential security hole!</p></li>
+
+   <li><p><b>The <tt>polypaudio</tt>  executable is installed SUID root by default. Why this? Isn't this a potential security hole?</b></p>
+
+  <p>Polypaudio activates <tt>SCHED_FIFO</tt> scheduling if the user
+passes <tt>--high-priority=1</tt>. This will only succeed when
+executed as root, therefore the binary is marked SUID root by
+default. Yes, this is a potential security hole. However, polypaudio
+tries its best to minimize the security threat: immediately after
+startup polypaudio drops all capabilities except
+<tt>CAP_SYS_NICE</tt> (At least on systems that support it, like Linux; see <tt>man 7
+capabilities</tt> for more information). If the calling user is not a
+member of the group <tt>realtime</tt> (which is required to have a GID
+< 1000), root rights are dropped immediately. This means, you can
+install polypaudio SUID root, but only a subset of your users (the
+members of the group <tt>realtime</tt>) may make use of realtime
+scheduling. Keep in mind that these users might load their own binary
+modules into the polypaudio daemon which may freeze the machine. The
+daemon has a minimal protection against CPU hogging (the daemon is
+killed after hogging more than 70% CPU for 5 seconds), but this may
+be circumvented easily by evildoers.</p></li>
+  
+  <li><p><b>I want to run polypaudio only when it is needed, how do I do this?</b></p>
+
+  <p>Set <tt>autospawn = yes</tt> in <tt>client.conf</tt>. That
+configuration file may be found either in <tt>/etc/polypaudio/</tt> or
+in <tt>~/.polypaudio/</tt>.</p></li>
+
+  <li><p><b>How do I list all polypaudio modules installed?</b></p>
+
+   <p><tt>polypaudio --dump-modules</tt></p>
+
+   <p>Add <tt>-v</tt> for terse usage instructions.</p>
+
+<li><p><b>How do I use polypaudio over the network?</b></p>
+
+<p>Just set <tt>$POLYP_SERVER</tt> to the host name of the polypaudio
+server. For authentication you need the same auth cookies on all sides. For
+that copy <tt>~./polypaudio-cookie</tt> to all clients that shall
+be allowed to connect.</p>
+
+<p>Alternatively the authorization cookies can be stored in the X11 server.</p></li>
+
+<li><p><b>Is polypaudio capable of providing synchronized audio playback over the network for movie players like <tt>mplayer</tt>?</b></p>
+
+<p>Yes! Unless your network is congested in some way (i.e. transfer latencies vary strongly) it works perfectly. Drop me an email for experimental patches for MPlayer.</p>
+
+   <li><p><b>What environment variables does polypaudio care about?</b></p>
+
+<p>The client honors: <tt>POLYP_SINK</tt> (default sink to connect to), <tt>POLYP_SOURCE</tt> (default source to connect to), <tt>POLYP_SERVER</tt> (default server to connect to, like <tt>ESPEAKER</tt>), <tt>POLYP_BINARY</tt> (the binary to start when autospawning a daemon), <tt>POLYP_CLIENTCONFIG</tt> (path to the client configuration file).</p>
+
+<p>The daemon honors: <tt>POLYP_SCRIPT</tt> (default CLI script file run after startup), <tt>POLYP_CONFIG</tt> (default daemon configuration file), <tt>POLYP_DLPATH</tt> (colon separated list of paths where to look for modules)</p></li>
+
+
+<li><p><b>I saw that SIGUSR2 provokes loading of the module <tt>module-cli-protocol-unix</tt>. But how do I make use of that?</b></p>
+
+<p>A brilliant guy named Lennart Poettering once wrote a nifty tool
+for that purpose: <a
+href="http://0pointer.de/lennart/projects/bidilink/">bidilink</a>. To
+connect to a running polypaudio daemon try using the following commands:</p>
+
+<pre>killall -USR2 polypaudio
+bidilink unix-client:/tmp/polypaudio/cli</pre>
+
+<p><i>BTW: Someone should package this great tool for Debian!</i></p>
+
+<p><b>New:</b> There's now a tool <tt>pacmd</tt> that automates sending SIGUSR2 to the daemon and running a bidilink like tool for you.</p>
+</li>
+
+<li><p><b>How do the polypaudio libraries decide where to connect to?</b></p>
+<p>The following rule applies:</p>
+<ol>
+  <li>If the the application using the library specifies a server to connect to it is used. If the connection fails, the library fails too.</li>
+  <li>If the environment variable <tt>POLYP_SERVER</tt> is defined the library connects to that server. If the connection fails, the library fails too.</li>
+  <li>If <tt>$DISPLAY</tt> is set, the library tries to connect to that server and looks for the root window property <tt>POYLP_SERVER</tt> for the host to connect to. If <tt>POLYP_COOKIE</tt> is set it is used as authentication cookie.</li>
+  <li>If the client configuration file (<tt>~/.polypaudio/client.conf</tt> or <tt>/etc/polypaudio/client.conf</tt>) sets the server address, the library connects to that server. If the connection fails, the library fails too.</li>
+  <li>The library tries to connect to the default local UNIX socket for polypaudio servers. If the connection fails, it proceeds with the next item.</li>
+  <li>The library tries to connect to the default local TCP socket for polypaudio servers. If the connection fails, it proceeds with the next item.</li>
+  <li>If <tt>$DISPLAY</tt> is set, the library tries to connect to the default TCP port of that host. If the connection fails, it proceeds with the next item.</li>
+  <li>The connection fails.</li>
+</ol>
+</li>
+
+<li><p><b>Why the heck does libpolyp link against libX11?</b></p>
+<p>The Polypaudio client libraries look for some X11 root window
+properties for the credentials of the Polypaudio server to access. You
+may compile Polypaudio without X11 for disabling this feature.</p></li>
+
+<li><p><b>How can I use Polypaudio as an RTP based N:N multicast
+conferencing solution for the LAN?</b></p> <p>After loading all the
+necessary audio drivers for recording and playback, just load the RTP
+reciever and sender modules with default parameters:</p>
+
+<pre>
+load-module module-rtp-send
+load-module module-rtp-recv
+</pre>
+
+<p>As long as the Polypaudio daemon runs, the microphone data will be
+streamed to the network and the data from other hosts is played back
+locally. Please note that this may cause quite a lot of traffic. Hence
+consider passing <tt>rate=8000 format=ulaw channels=1</tt> to the
+sender module to save bandwith while still maintaining good quality
+for speech transmission.</p></li>
+
+<li><p><b>What is this RTP/SDP/SAP thing all about?</b></p>
+
+<p>RTP is the <i>Realtime Transfer Protocol</i>. It is a well-known
+protocol for transferring audio and video data over IP. SDP is the <i>Session
+Description Protocol</i> and can be used to describe RTP sessions. SAP
+is the <i>Session Announcement Protocol</i> and can be used to
+announce RTP sessions that are described with SDP. (Modern SIP based VoIP phones use RTP/SDP for their sessions, too)</p>
+
+<p>All three protocols are defined in IETF RFCs (RFC3550, RFC3551,
+RFC2327, RFC2327). They can be used in both multicast and unicast
+fashions. Polypaudio exclusively uses multicast RTP/SDP/SAP containing audio data.</p>
+
+<p>For more information about using these technologies with Polypaudio have a look on the <a href="modules.html#rtp">respective module's documentation</a>.
+
+<li><p><b>How can I use Polypaudio to stream music from my main PC to my LAN with multiple PCs with speakers?</b></p>
+
+<p>On the sender side create an RTP sink:</p>
+
+<pre>
+load-module module-null-sink sink_name=rtp
+load-module module-rtp-send source=rtp_monitor
+set-default-sink rtp
+</pre>
+
+<p>This will make <tt>rtp</tt> the default sink, i.e. all applications will write to this virtual RTP device by default.</p>
+
+<p>On the client sides just load the reciever module:</p>
+<pre>
+load-module module-rtp-recv
+</pre>
+
+<p>Now you can play your favourite music on the sender side and all clients will output it simultaneously.</p>
+
+
+<p>BTW: You can have more than one sender machine set up like this. The audio data will be mixed on the client side.</p></li>
+
+<li><p><b>How can I use Polypaudio to share a single LINE-IN/MIC jack on the entire LAN?</b></p>
+
+<p>On the sender side simply load the RTP sender module:</p>
+
+<pre>
+load-module module-rtp-send
+</pre>
+
+<p>On the reciever sides, create an RTP source:</p>
+
+<pre>
+load-module module-null-sink sink_name=rtp
+load-module module-rtp-recv sink=rtp
+set-default-source rtp_monitor
+</pre>
+
+<p>Now the audio data will be available from the default source <tt>rtp_monitor</tt>.</p></li>
+
+<li><p><b>When sending multicast RTP traffic it is recieved on the entire LAN but not by the sender machine itself!</b></p>
+
+<p>Pass <tt>loop=1</tt> to the sender module!</p></li>
+
+<li><p><b>Can I have more than one multicast RTP group?</b></p>
+
+<p>Yes! Simply use a new multicast group address. Use
+the <tt>destination</tt>/<tt>sap_address</tt> arguments of the RTP
+modules to select them. Choose your group addresses from the range
+<tt>225.0.0.x</tt> to make sure the audio data never leaves the LAN.</p></li>
+
+
+<li><p><b>Can I use Polypaudio to playback music on two sound cards simultaneously?</b></p>
+
+<p>Yes! Use <a href="modules.html#module-combine"><tt>module-combine</tt></a> for that.</p>
+
+<pre>
+load-module module-oss-mmap device="/dev/dsp" sink_name=output0
+load-module module-oss-mmap device="/dev/dsp1" sink_name=output1
+load-module module-combine sink_name=combined master=output0 slaves=output1
+set-sink-default combined
+</pre>
+
+<p>This will combine the two sinks <tt>output0</tt> and
+<tt>output1</tt> into a new sink <tt>combined</tt>. Every sample
+written to the latter will be forwarded to the former two. Polypaudio
+will make sure to adjust the sample rate of the slave device in case
+it deviates from the master device. You can have more than one slave
+sink attached to the combined sink, and hence combine even three and
+more sound cards.</p> </li>
+
+<li><p><b>Can I use Polypaudio to combine two stereo soundcards into a virtual surround sound card?</b></p>
+
+<p>Yes! You can use use <a href="modules.html#module-combine"><tt>module-combine</tt></a> for that.</p>
+
+<pre>
+load-module module-oss-mmap device="/dev/dsp" sink_name=output0 channel_map=left,right channels=2
+load-module module-oss-mmap device="/dev/dsp1" sink_name=output1 channel_map=rear-left,rear-right channels=2
+load-module module-combine sink_name=combined master=output0 slaves=output1 channel_map=left,right,rear-left,rear-right channels=4
+</pre>
+
+<p>This is mostly identical to the previous example. However, this
+time we manually specify the channel mappings for the sinks to make
+sure everything is routed correctly.</p>
+
+<p>Please keep in mind that Polypaudio will constantly adjust the
+sample rate to compensate for the deviating quartzes of the sound
+devices. This is not perfect, however. Deviations in a range of
+1/44100s (or 1/48000s depending on the sampling frequency) can not be
+compensated. The human ear will decode these deviations as minor
+movements (less than 1cm) of the positions of the sound sources
+you hear. </p>
+
+</li>
+
+
 
 </ol>
 
 <hr/>
-<address class="grey">Lennart Poettering &lt;@PACKAGE_BUGREPORT@&gt;, September 2004</address>
+<address class="grey">Lennart Poettering &lt;@PACKAGE_BUGREPORT@&gt;, April 2006</address>
 <div class="grey"><i>$Id$</i></div>
 </body> </html>