Linux und Ich

Blog über Ubuntu, Linux, Android und IT

Lizenziert unter CC by-sa von Trond Viggo Håpnes auf Flickr

PulseAudio auf der NSLU2

| 6 Kommentare

Als kleinen “Allzweck”-Server habe ich hier eine Linksys NSLU2 rumstehen. Das Ding ist nicht gerade eine Rakete (Datenübertragungsrate via NFS nur rund 4MB/s), doch das Feine ist, dass man auf dem Gerät ohne größere Schwierigkeiten Debian installieren kann. Damit steht einem eine unendliche Welt an Spielereien zur Verfügung.

Guides und Howtos, um auf einer Slug (so der liebevolle Spitzname) Debian zu installieren, gibt es im Internet in rauen Mengen. Auf die “Hauptanleitung” habe ich ja schon verlinkt. Wozu man leider relativ wenig findet ist PulseAudio und die Slug. Dass PulseAudio eine feine Sache ist, habe ich ja schon hier beschrieben, so richtig Sinn macht die Sache jedoch erst, wenn man PulseAudio im Netzwerk benutzen kann. Und hier kommt nun die Slug ins Spiel.

Nslu2 mit USB-Soundkarte. Debian läuft dabei vom USB-Stick. Da später noch eine Festplatte angeschlossen werden soll braucht man noch einen USB-Hub.

Die Slug selber besitzt zwar keine Soundkarte, doch es gibt mittlerweile USB-Soundkarten die nicht mehr als ein paar Euro kosten. Ich hab auf gut Glück einen DIGITUS USB Audio Controller erstanden und siehe da, das Ding funktioniert bei Debian Lenny oder auch Ubuntu Intrepid Ibex

root@nslu2:~$ tail -f /var/log/messages
Feb 17 18:02:09 nslu2 kernel: [43362489.130000] usb 2-1: new full speed USB device using ohci_hcd and address 2
Feb 17 18:02:09 nslu2 kernel: [43362489.320000] usb 2-1: configuration #1 chosen from 1 choice
Feb 17 18:02:09 nslu2 kernel: [43362489.350000] usb 2-1: New USB device found, idVendor=0d8c, idProduct=0103
Feb 17 18:02:09 nslu2 kernel: [43362489.350000] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb 17 18:02:09 nslu2 kernel: [43362489.360000] usb 2-1: Product: C-Media USB Audio       
Feb 17 18:02:09 nslu2 kernel: [43362489.370000] usb 2-1: Manufacturer: C-Media INC.
Feb 17 18:02:12 nslu2 kernel: [43362491.840000] usbcore: registered new interface driver snd-usb-audio

root@nslu2:~$ cat /proc/asound/cards 
 0 [default        ]: USB-Audio - C-Media USB Audio       
                      C-Media INC. C-Media USB Audio        at usb-0000:00:01.1-1, full speed

out-of-the-box, es wird also auch an der Slug funktionieren…

Einen kleinen Hinweis am Rande. Ich habe meine Slug DeUnderclocked, also den Widerstand, der ältere Slugs auf die halbe Taktrate einbremst, entfernt. Da PulseAudio etwas Performance braucht und die Slug davon nicht gerade viel hat, ist dies ein wichtiger Punkt…

Im folgenden Versuche ich euch an die Hand zu nehmen und PulseAudio auf der Slug zu installieren, so dass ihr Sound von einem anderen Linux-Rechner über PA zur Slug, die ihr natürlich an eine Stereoanlage oder gute Boxen angeschlossen habt, umleiten könnt.

Als erstes müssen eine Reihe von Paketen installiert werden

root@nslu2:~$ apt-get install --no-install-recommends alsa-utils libasound2-plugins pulseaudio pulseaudio-module-zeroconf pulseaudio-utils alsa-utils libasound2-plugins hal pulseaudio-module-hal

Damit nicht halb GNOME mitinstalliert wird, benutze ich die Option –no-install-recommends, so werden die empfohlenen Abhängigkeiten nicht mit installiert. Als nächstes muss man den eigenen Benutzer auf der Slug zu den passenden Gruppen hinzufügen.

root@nslu2:~$ adduser $USER pulse
root@nslu2:~$ adduser $USER pulse-access
root@nslu2:~$ adduser $USER pulse-rt
root@nslu2:~$ adduser $USER audio

Danach muss man sich von der Slug abmelden und über SSH wieder einloggen, damit die Gruppenzugehörigkeiten auch aktiv werden. Im nächsten Schritt müssen Endgeräte für Pulseaudio angelegt werden. Dies erfolgt in der Datei /etc/asound.conf. In diese muss der Inhalt

pcm.pulse {    
        type pulse
}    
ctl.pulse {
        type pulse
}
pcm.!default {
        type pulse
}
ctl.!default {
        type pulse
}

eingefügt werden. Nun muss man PulseAudio etwas in die Schranken weisen. PA kann eine Menge Performance schlucken. Performance, die auf einer Slug gar nicht vorhanden ist. Würde man jetzt PA starten, so würde man gar keinen oder nur sehr stotternden Sound hören. PulseAudio kennt dazu Qualitätsstufen, die über /etc/pulse/daemon.conf eingestellt werden können. Mit

[...]
resample-method = speex-float-0
[...]

sollte PA beim Abspielen rund 20% Last erzeugen und somit die Slug nicht allzusehr auslasten. Wer immer noch stotternden Sound bekommt, der kann

[...]
resample-method = trivial
[...]

einstellen, was jedoch auch die geringste Qualität bedeutet. Nun kann man PA zum ersten mal starten.

me@nslu2:~$ pulseaudio
W: main.c: setrlimit(RLIMIT_NICE, (31, 31)) failed: Operation not permitted
W: main.c: setrlimit(RLIMIT_RTPRIO, (9, 9)) failed: Operation not permitted
ALSA lib control.c:909:(snd_ctl_open_noupdate) Invalid CTL front:0

Die Meldungen dabei kann man ignorieren. Spielt man jetzt einen Klang von einem zweiten SSH-Terminal aus ab

me@nslu2:~$ aplay /usr/share/sounds/alsa/Front_Right.wav

sollte man den Sound aus den angeschlossenen Boxen der Slug hören. Nun geht es weiter zur Netzwerkkonfiguration von PulseAudio. Wie eingangs erwähnt und in diesem Beitrag beschrieben kann PulseAudio den Audiostream einer Anwendung von einem PA-Server zum nächsten leiten. So kann man Musik auf dem kleinen Netbook abspielen und der PA-Server auf der Slug spielt diese dann über die angeschlossene Stereoanlage ab. Damit dies möglich ist, müssen in der /etc/pulse/default.pa die dafür nötigen Module module-zeroconf-publish und module-native-protocol-tcp aktiviert werden

[...]
### Network access (may be configured with paprefs, so leave this commented
### here if you plan to use paprefs)
#load-module module-esound-protocol-tcp 
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
load-module module-zeroconf-publish 
[...]

Bei module-native-protocol-tcp kann man gleich noch einen IP-Bereich festlegen, der den PA-Server ansprechen darf. Nun ist PA fertig konfiguriert, es fehlt nur noch eine Einstellung dass PA beim Starten der Slug anläuft. Dies macht man über die /etc/default/pulseaudio. Hier muss der Start als “Daemon”

# Start the PulseAudio sound server in system mode.
# (enables the pulseaudio init script)
# System mode is not the recommended way to run PulseAudio as it has some
# limitations (such as no shared memory access) and could potentially allow
[...]
# System->Preferences->Sound). For other sessions, you can simply start
# PulseAudio with "pulseaudio --daemonize".
# 0 = don't start, 1 = start
PULSEAUDIO_SYSTEM_START=1
[...]

aktiviert werden. Nun kann man PulseAudio über

root@nslu2:~$ /etc/init.d/pulseaudio restart

starten und stoppen. Ab jetzt kann man wie hier beschrieben Sounds vom eigenen Rechner auf die Slug umleiten und ordentlichen Sound auch aus der kleinsten Kiste bekommen.

Das war das “Howto”, aber wie gut funktioniert es? PulseAudio fordert die Slug schon deutlich. Solange die Slug sonst nichts zu tun hat funktioniert es auch richtig gut. Doch ist bspw. zur selben Zeit ein Dateitransfer via Samba oder NFS aktiv, so kommt der Sound schon ins Stocken. Als “reiner” Soundserver ist die Slug schon so zu gebrauchen, doch wenn man eine Eierlegendevollmilchsau sucht, so liegt man mit der NLUS2 falsch.

Autor: Christoph Langner

Hallo, ich bin Christoph -- Linux-User, Blogger und pragmatischer Fan freier Software. Wie Ihr ohne Zweifel bemerkt haben solltet schreibe ich hier über Linux im Allgemeinen, Ubuntu im Speziellen, sowie Android und andere Internet-Themen. Wenn du Freude an meinen Artikel gefunden haben solltest, dann kannst du mir über Facebook, Google+ oder Twitter oder natürlich dem Blog folgen.

6 Kommentare

  1. Vielen Dank für dieses HowTo, werde ich nachher gleich mal testen. Ich habe auch noch eine SLUG und eine alte USB-Soundkarte im Schrank…

  2. Irgendwie liebe ich solche genialen kleinen GNU/Linux-Spielereien :)

    >PulseAudio fordert die Slug schon deutlich. Solange die Slug sonst nichts zu tun hat funktioniert es auch richtig gut. Doch ist bspw. zur selben Zeit ein Dateitransfer via Samba oder NFS aktiv, so kommt der Sound schon ins Stocken.

    spontane Idee: schon mal versucht den nice-Wert vom PulseAudio-Prozess zu verändern?
    Was die Last vermutlich noch verschlimmert ist, dass USB die CPU relativ stark belastet. Keine Ahnung ob man da etwas verbessern kann.

  3. @Mike1
    Mit nice habe auch schon rumgespielt. Leider beißt sich die Katze oft in den Schwanz. Entweder ist genug Leistung für die Soundwiedergabe da, oder es stockt das Übertragen der Daten. Liegt die Musik also auf einem per Slug freigegebenen Laufwerk, so wirds hacklig ;)

  4. Ich glaube, in der apt-get-Zeile oben fehlt noch pulseaudio-esound-compat (bei mir gings übers Netz erst, nachdem ich das installiert hatte, das ist wohl das tcp-Modul), und die Sache mit dem Cookie bzw. auth-anonymous=1 sollte man vielleicht auch erwähnen. Vorsichtshalber hab ich auch, wie hier und da angegeben, die Zeile in hosts.allow hinzugefügt. Weiß jetzt nicht was im Endeffekt verantwortlich war, aber nachdem ich das alles gemacht hatte, gings übers Netzwerk. – Danke fürs Tutorial! :)

  5. Hallo Crissi, gerne. Danke für das Lob :)

    Thema pulseaudio-esound-compat:

    Nein, das kann eigentlich nicht sein, pulseaudio-esound-compat ist eine Zwischenschicht damit der ESD PulseAudio ansprechen kann. Da hat mit der Netzwerkfähigkeit nichts zu tun.

    Thema hosts.allow:

    Wenn keine Ports von außen auf den “Soundserver” weitergeleitet werden, so sehe ich in einem vertrausenswürdigen LAN keinen Grund Sicherheitsmaßnahmen zu ergreifen.

  6. Danke für den Artikel, er hat mir geholfen auf meinem SheevaPlug PulseAudio als Netzwerk-Soundserver einzusetzen.
    Zusätzlich musste ich noch das Paket “avahi-daemon” installieren, da dieses auf meinem Debian-System noch nicht vorhanden war. Danach publizierte mein Server dann die Infos zum vorhandenen PulseAudio-Daemon.

Hinterlasse eine Antwort

Auf Linux und Ich darf anonym kommentiert werden. Die Felder für Name und E-Mail-Adresse dürfen beim Eintragen eures Kommentars leer bleiben. Ich freue mich aber über jeden Kommentar, zu dem der Autor mit seinem Namen steht.