diff options
Diffstat (limited to 'source/l/pulseaudio')
-rw-r--r-- | source/l/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch | 79 | ||||
-rw-r--r-- | source/l/pulseaudio/0002-allow-autospawn-for-root-default.diff | 27 | ||||
-rw-r--r-- | source/l/pulseaudio/0003-no-root-warn.diff | 14 | ||||
-rw-r--r-- | source/l/pulseaudio/020_no-parallel-make.diff | 22 | ||||
-rw-r--r-- | source/l/pulseaudio/030_posix-completion.diff | 91 | ||||
-rw-r--r-- | source/l/pulseaudio/doinst.sh | 36 | ||||
-rw-r--r-- | source/l/pulseaudio/pulseaudio-autostart.patch | 13 | ||||
-rwxr-xr-x | source/l/pulseaudio/pulseaudio.SlackBuild | 145 | ||||
-rw-r--r-- | source/l/pulseaudio/rc.pulseaudio | 48 | ||||
-rw-r--r-- | source/l/pulseaudio/slack-desc | 19 |
10 files changed, 494 insertions, 0 deletions
diff --git a/source/l/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch b/source/l/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch new file mode 100644 index 00000000..ea54ae3f --- /dev/null +++ b/source/l/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch @@ -0,0 +1,79 @@ +From 1cb5647f76dc8cd7bacbce2a64fac9e6c2dc3b16 Mon Sep 17 00:00:00 2001 +From: Tanu Kaskinen <tanu.kaskinen at linux.intel.com> +Date: Tue, 28 Apr 2015 14:32:43 +0300 +Subject: [PATCH] client-conf: Add allow-autospawn-for-root + +Usually autospawning for root is a bad idea, since it can easily +interfere with other users' PulseAudio instances, but in embedded +environments where only root exists, autospawning is fine. + +Upstream-Status: Submitted [http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/23549] + +Signed-off-by: Tanu Kaskinen <tanu.kaskinen at linux.intel.com> +--- + man/pulse-client.conf.5.xml.in | 9 +++++++++ + src/pulse/client-conf.c | 1 + + src/pulse/client-conf.h | 1 + + src/pulse/client.conf.in | 1 + + src/pulse/context.c | 2 +- + 5 files changed, 13 insertions(+), 1 deletion(-) + +--- ./man/pulse-client.conf.5.xml.in.orig 2016-05-10 07:28:04.000000000 -0500 ++++ ./man/pulse-client.conf.5.xml.in 2016-06-22 13:39:30.494696654 -0500 +@@ -82,6 +82,15 @@ + </option> + + <option> ++ <p><opt>allow-autospawn-for-root=</opt> Allow autospawning also for root. ++ Takes a boolean value, defaults to <opt>no</opt>. If the <opt>autospawn ++ </opt> option is disabled, this option has no effect. Autospawning for ++ root is disabled by default, because running PulseAudio as root will ++ interfere with regular users' PulseAudio instances. This option should be ++ enabled only in environments where there are no regular users at all.</p> ++ </option> ++ ++ <option> + <p><opt>daemon-binary=</opt> Path to the PulseAudio daemon to + run when autospawning. Defaults to a path configured at compile + time.</p> +--- ./src/pulse/client.conf.in.orig 2016-05-03 01:17:39.000000000 -0500 ++++ ./src/pulse/client.conf.in 2016-06-22 13:39:30.527696657 -0500 +@@ -23,6 +23,7 @@ + ; default-dbus-server = + + ; autospawn = yes ++; allow-autospawn-for-root = no + ; daemon-binary = @PA_BINARY@ + ; extra-arguments = --log-target=syslog + +--- ./src/pulse/client-conf.c.orig 2016-05-10 07:28:04.000000000 -0500 ++++ ./src/pulse/client-conf.c 2016-06-22 13:39:30.505696655 -0500 +@@ -138,6 +138,7 @@ + { "default-server", pa_config_parse_string, &c->default_server, NULL }, + { "default-dbus-server", pa_config_parse_string, &c->default_dbus_server, NULL }, + { "autospawn", pa_config_parse_bool, &c->autospawn, NULL }, ++ { "allow-autospawn-for-root", pa_config_parse_bool, &c->allow_autospawn_for_root, NULL }, + { "cookie-file", pa_config_parse_string, &c->cookie_file_from_client_conf, NULL }, + { "disable-shm", pa_config_parse_bool, &c->disable_shm, NULL }, + { "enable-shm", pa_config_parse_not_bool, &c->disable_shm, NULL }, +--- ./src/pulse/context.c.orig 2016-06-01 05:50:54.000000000 -0500 ++++ ./src/pulse/context.c 2016-06-22 13:39:30.536696657 -0500 +@@ -1027,7 +1027,7 @@ + if (!(flags & PA_CONTEXT_NOAUTOSPAWN) && c->conf->autospawn) { + + #ifdef HAVE_GETUID +- if (getuid() == 0) ++ if (!c->conf->allow_autospawn_for_root && getuid() == 0) + pa_log_debug("Not doing autospawn since we are root."); + else { + c->do_autospawn = true; +--- ./src/pulse/client-conf.h.orig 2016-06-22 13:39:30.517696656 -0500 ++++ ./src/pulse/client-conf.h 2016-06-22 13:40:11.754699631 -0500 +@@ -38,6 +38,7 @@ + char *cookie_file_from_application; + char *cookie_file_from_client_conf; + bool autospawn, disable_shm, disable_memfd, auto_connect_localhost, auto_connect_display; ++ bool allow_autospawn_for_root; + size_t shm_size; + } pa_client_conf; + diff --git a/source/l/pulseaudio/0002-allow-autospawn-for-root-default.diff b/source/l/pulseaudio/0002-allow-autospawn-for-root-default.diff new file mode 100644 index 00000000..15c99583 --- /dev/null +++ b/source/l/pulseaudio/0002-allow-autospawn-for-root-default.diff @@ -0,0 +1,27 @@ +--- ./man/pulse-client.conf.5.xml.in.orig 2016-01-06 15:33:09.797022947 -0600 ++++ ./man/pulse-client.conf.5.xml.in 2016-01-06 15:35:34.902019857 -0600 +@@ -73,10 +73,7 @@ + <option> + <p><opt>allow-autospawn-for-root=</opt> Allow autospawning also for root. + Takes a boolean value, defaults to <opt>no</opt>. If the <opt>autospawn +- </opt> option is disabled, this option has no effect. Autospawning for +- root is disabled by default, because running PulseAudio as root will +- interfere with regular users' PulseAudio instances. This option should be +- enabled only in environments where there are no regular users at all.</p> ++ </opt> option is disabled, this option has no effect.</p> + </option> + + <option> +--- ./src/pulse/client.conf.in.orig 2016-01-06 15:33:09.800022947 -0600 ++++ ./src/pulse/client.conf.in 2016-01-06 15:39:33.502014775 -0600 +@@ -22,8 +22,8 @@ + ; default-server = + ; default-dbus-server = + +-; autospawn = yes +-; allow-autospawn-for-root = no ++autospawn = yes ++allow-autospawn-for-root = yes + ; daemon-binary = @PA_BINARY@ + ; extra-arguments = --log-target=syslog + diff --git a/source/l/pulseaudio/0003-no-root-warn.diff b/source/l/pulseaudio/0003-no-root-warn.diff new file mode 100644 index 00000000..c7d31c41 --- /dev/null +++ b/source/l/pulseaudio/0003-no-root-warn.diff @@ -0,0 +1,14 @@ +--- ./src/daemon/main.c.orig 2015-10-30 07:16:48.000000000 -0500 ++++ ./src/daemon/main.c 2016-01-07 15:05:42.131126245 -0600 +@@ -647,10 +647,8 @@ + } + + #ifdef HAVE_GETUID +- if (getuid() == 0 && !conf->system_instance) +- pa_log_warn(_("This program is not intended to be run as root (unless --system is specified).")); + #ifndef HAVE_DBUS /* A similar, only a notice worthy check was done earlier, if D-Bus is enabled. */ +- else if (getuid() != 0 && conf->system_instance) { ++ if (getuid() != 0 && conf->system_instance) { + pa_log(_("Root privileges required.")); + goto finish; + } diff --git a/source/l/pulseaudio/020_no-parallel-make.diff b/source/l/pulseaudio/020_no-parallel-make.diff new file mode 100644 index 00000000..6b552e33 --- /dev/null +++ b/source/l/pulseaudio/020_no-parallel-make.diff @@ -0,0 +1,22 @@ +--- src/Makefile.am.orig 2014-02-14 23:45:45.000000000 +1000 ++++ src/Makefile.am 2014-10-26 21:59:33.220234317 +1000 +@@ -19,6 +19,8 @@ + # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + # USA. + ++.NOTPARALLEL: ++ + ################################### + # Extra directories # + ################################### +--- Makefile.am.orig 2014-01-24 04:57:55.000000000 +1000 ++++ Makefile.am 2014-10-26 21:58:47.090622189 +1000 +@@ -15,6 +15,8 @@ + # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + # USA. + ++.NOTPARALLEL: ++ + ACLOCAL_AMFLAGS = -I m4 + + EXTRA_DIST = \ diff --git a/source/l/pulseaudio/030_posix-completion.diff b/source/l/pulseaudio/030_posix-completion.diff new file mode 100644 index 00000000..de1ef055 --- /dev/null +++ b/source/l/pulseaudio/030_posix-completion.diff @@ -0,0 +1,91 @@ +--- shell-completion/bash/pulseaudio.orig 2015-02-13 00:10:35.000000000 +1000 ++++ shell-completion/bash/pulseaudio 2015-09-12 11:09:36.948222926 +1000 +@@ -1,39 +1,45 @@ + #!/bin/bash + + __cards () { ++ (pactl list cards short 2> /dev/null) |\ + while IFS=$'\t' read idx name _; do + printf "%s %s\n" "$idx" "$name" +- done < <(pactl list cards short 2> /dev/null) ++ done + } + + __sinks () { ++ (pactl list sinks short 2> /dev/null) |\ + while IFS=$'\t' read _ name _ _ _; do + printf "%s\n" "$name" +- done < <(pactl list sinks short 2> /dev/null) ++ done + } + + __sinks_idx () { ++ (pactl list sinks short 2> /dev/null) |\ + while IFS=$'\t' read idx _ _ _ _; do + printf "%s\n" "$idx" +- done < <(pactl list sinks short 2> /dev/null) ++ done + } + + __sources () { ++ (pactl list sources short 2> /dev/null) |\ + while IFS=$'\t' read _ name _ _ _; do + printf "%s\n" "$name" +- done < <(pactl list sources short 2> /dev/null) ++ done + } + + __sink_inputs () { ++ (pactl list sink-inputs short 2> /dev/null) |\ + while IFS=$'\t' read idx _ _ _ _; do + printf "%s\n" "$idx" +- done < <(pactl list sink-inputs short 2> /dev/null) ++ done + } + + __source_outputs () { ++ (pactl list source-outputs short 2> /dev/null) |\ + while IFS=$'\t' read idx _ _ _ _; do + printf "%s\n" "$idx" +- done < <(pactl list source-outputs short 2> /dev/null) ++ done + } + + __ports () { +@@ -77,28 +83,32 @@ + } + + __all_modules () { ++ (pulseaudio --dump-modules 2> /dev/null) |\ + while read name; do + name=${name%% *} + printf "%s\n" "$name" +- done < <(pulseaudio --dump-modules 2> /dev/null) ++ done + } + + __loaded_modules () { ++ (pactl list modules short 2> /dev/null) |\ + while IFS=$'\t' read idx name _; do + printf "%s %s\n" "$idx" "$name" +- done < <(pactl list modules short 2> /dev/null) ++ done + } + + __resample_methods () { ++ (pulseaudio --dump-resample-methods 2> /dev/null) |\ + while read name; do + printf "%s\n" "$name" +- done < <(pulseaudio --dump-resample-methods 2> /dev/null) ++ done + } + + _pacat_file_formats () { ++ (pacat --list-file-formats 2> /dev/null) |\ + while IFS=$'\t' read name _; do + printf "%s\n" "$name" +- done < <(pacat --list-file-formats 2> /dev/null) ++ done + } + + in_array() { diff --git a/source/l/pulseaudio/doinst.sh b/source/l/pulseaudio/doinst.sh new file mode 100644 index 00000000..9b27c9f9 --- /dev/null +++ b/source/l/pulseaudio/doinst.sh @@ -0,0 +1,36 @@ +config() { + NEW="$1" + OLD="$(dirname $NEW)/$(basename $NEW .new)" + # If there's no config file by that name, mv it over: + if [ ! -r $OLD ]; then + mv $NEW $OLD + elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then + # toss the redundant copy + rm $NEW + fi + # Otherwise, we leave the .new copy for the admin to consider... +} + +preserve_perms() { + NEW="$1" + OLD="$(dirname ${NEW})/$(basename ${NEW} .new)" + if [ -e ${OLD} ]; then + cp -a ${OLD} ${NEW}.incoming + cat ${NEW} > ${NEW}.incoming + mv ${NEW}.incoming ${NEW} + fi + config ${NEW} +} + +config etc/pulse/client.conf.new +config etc/pulse/daemon.conf.new +config etc/pulse/default.pa.new +config etc/pulse/system.pa.new +preserve_perms etc/rc.d/rc.pulseaudio.new + +# Make sure the pulse user is in the audio group: +chroot . /usr/sbin/usermod -a -G audio pulse 1> /dev/null 2> /dev/null + +# Make sure the root user is in the audio group: +chroot . /usr/sbin/usermod -a -G audio root 1> /dev/null 2> /dev/null + diff --git a/source/l/pulseaudio/pulseaudio-autostart.patch b/source/l/pulseaudio/pulseaudio-autostart.patch new file mode 100644 index 00000000..eb44bdbc --- /dev/null +++ b/source/l/pulseaudio/pulseaudio-autostart.patch @@ -0,0 +1,13 @@ +diff -up pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in.autostart pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in +--- pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in.autostart 2015-02-12 08:10:35.000000000 -0600 ++++ pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in 2015-06-22 11:24:13.561614127 -0500 +@@ -17,6 +17,9 @@ + + set -e + ++# probe to test if autospawn works, else resort to starting manually ++@PACTL_BINARY@ info > /dev/null 2>&1 || @PA_BINARY@ --start "$@" ++ + if [ x"$DISPLAY" != x ] ; then + + @PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY" > /dev/null diff --git a/source/l/pulseaudio/pulseaudio.SlackBuild b/source/l/pulseaudio/pulseaudio.SlackBuild new file mode 100755 index 00000000..b9b28d15 --- /dev/null +++ b/source/l/pulseaudio/pulseaudio.SlackBuild @@ -0,0 +1,145 @@ +#!/bin/sh + +# Slackware build script for pulseaudio + +# Copyright 2015 Christoph Willing Brisbane, Australia +# Copyright 2016 Patrick J. Volkerding, Sebeka, MN, USA +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PKGNAM=pulseaudio +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-1} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp} +PKG=$TMP/package-$PKGNAM + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +NUMJOBS=${NUMJOBS:-" -j7 "} + +rm -rf $PKG +mkdir -p $TMP $PKG +cd $TMP +rm -rf $PKGNAM-$VERSION +tar xvf $CWD/$PKGNAM-$VERSION.tar.xz || exit 1 +cd $PKGNAM-$VERSION || exit 1 +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \ + -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ + -exec chmod 644 {} \; + +zcat $CWD/020_no-parallel-make.diff.gz | patch -p0 --verbose || exit 1 +zcat $CWD/030_posix-completion.diff.gz | patch -p0 --verbose || exit 1 + +# https://bugzilla.redhat.com/show_bug.cgi?id=1234710 +zcat $CWD/0001-client-conf-Add-allow-autospawn-for-root.patch.gz | patch -p1 --verbose || exit 1 +zcat $CWD/0002-allow-autospawn-for-root-default.diff.gz | patch -p1 --verbose || exit 1 + +# Do not log a warning every time root uses PulseAudio: +zcat $CWD/0003-no-root-warn.diff.gz | patch -p1 --verbose || exit 1 + +sed -i -e '/@PA_BINARY@/ imkdir -p \$HOME/.config/pulse' src/daemon/start-pulseaudio-x11.in +echo "X-MATE-Autostart-Phase=Initialization" >> src/daemon/pulseaudio.desktop.in + +# If autospawn isn't working, start-pulseaudio-x11 should start it manually: +zcat $CWD/pulseaudio-autostart.patch.gz | patch -p1 --verbose || exit 1 + +# Disable "flat volumes" to work more like ALSA's mixer. POLA. +# Have a google for "flat volumes" for more rationale on us not +# using the upstream default here. +sed -i 's/; flat-volumes = yes/flat-volumes = no/g' ./src/daemon/daemon.conf.in + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +./bootstrap.sh \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --disable-tcpwrap \ + --enable-orc \ + --disable-static \ + --disable-hal-compat \ + --disable-bluez4 \ + --with-system-user=pulse \ + --with-system-group=pulse \ + --with-access-group=audio \ + --with-bash-completion-dir=/usr/share/bash-completion/completions \ + --build=$ARCH-slackware-linux || exit 1 + +make $NUMJOBS check || make check || exit 1 +make $NUMJOBS || make || exit 1 +make install-strip DESTDIR=$PKG || exit 1 + +# Remove .la files: +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/lib*.la +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/pulseaudio/lib*.la +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/pulse-*/modules/*.la + +# Move config files to .new: +for f in $( find $PKG/etc/pulse/ -type f ) ; do mv $f $f.new ; done + +# Add an init script for system wide mode. You shouldn't use this, but we'll +# still let you if you really want. +mkdir -p $PKG/etc/rc.d +cp $CWD/rc.pulseaudio $PKG/etc/rc.d/rc.pulseaudio.new +chmod 644 $PKG/etc/rc.d/rc.pulseaudio.new +chown root:root $PKG/etc/rc.d/rc.pulseaudio.new + +# Compress and link manpages: +find $PKG/usr/man -type f -exec gzip -9 {} \; +for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done + +# Install documentation: +mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION +cp -a \ + COPYING* *GPL LICENSE README* \ + $PKG/usr/doc/$PKGNAM-$VERSION + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc +zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh + +cd $PKG +/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz diff --git a/source/l/pulseaudio/rc.pulseaudio b/source/l/pulseaudio/rc.pulseaudio new file mode 100644 index 00000000..31cdf4aa --- /dev/null +++ b/source/l/pulseaudio/rc.pulseaudio @@ -0,0 +1,48 @@ +#!/bin/sh +# +# Start/stop/restart PulseAudio in system mode. +# In this mode, a single system instance of PulseAudio will be shared by +# multiple local users. +# +# Please note: this is not generally the best way to use PulseAudio! +# Normally pulseaudio will start automatically as-needed with an instance +# per audio user. Unless you really need to use system mode you should leave +# this script non-executable. +# +# For more information, see: +# http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide + +pulse_start() { + if [ -x /usr/bin/pulseaudio ]; then + echo "Starting system PulseAudio daemon: /usr/bin/pulseaudio --system --disallow-module-loading &" + rm -rf /var/lib/pulse + # Any errors/warnings will go to the log files: + /usr/bin/pulseaudio --system --disallow-module-loading 1> /dev/null 2> /dev/null & + fi +} + +pulse_stop() { + echo "Stopping PulseAudio: /bin/killall pulseaudio" + /bin/killall pulseaudio 2> /dev/null +} + +pulse_restart() { + pulse_stop + sleep 1 + pulse_start +} + +case "$1" in +'start') + pulse_start + ;; +'stop') + pulse_stop + ;; +'restart') + pulse_restart + ;; +*) + echo "usage $0 start|stop|restart" +esac + diff --git a/source/l/pulseaudio/slack-desc b/source/l/pulseaudio/slack-desc new file mode 100644 index 00000000..cae1b57b --- /dev/null +++ b/source/l/pulseaudio/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +pulseaudio: pulseaudio (PulseAudio sound server) +pulseaudio: +pulseaudio: pulseaudio is a networked low-latency sound server intended to be an +pulseaudio: improved replacement for the Enlightened Sound Daemon (EsounD). +pulseaudio: +pulseaudio: Homepage: http://www.pulseaudio.org +pulseaudio: +pulseaudio: +pulseaudio: +pulseaudio: +pulseaudio: |