Pulseaudio: Unterschied zwischen den Versionen
Dirk (Diskussion | Beiträge) K interwiki |
Robert (Diskussion | Beiträge) pacman -Sy angepasst, siehe https://bbs.archlinux.de/viewtopic.php?id=17347 |
||
Zeile 12: | Zeile 12: | ||
Alle Pakete sind im community Repository vorhanden, du musst dieses also aktiviert haben. Um PulseAudio zu installieren: | Alle Pakete sind im community Repository vorhanden, du musst dieses also aktiviert haben. Um PulseAudio zu installieren: | ||
pacman - | pacman -Syu pulseaudio | ||
Zusätzlich kannst du einige GTK Oberflächen für Pulseaudio installieren (empfohlen): | Zusätzlich kannst du einige GTK Oberflächen für Pulseaudio installieren (empfohlen): | ||
pacman - | pacman -Syu padevchooser paman paprefs pavucontrol | ||
Für Anwendungen die zwar [http://wiki.archlinux.org/index.php/ALSA ALSA] aber nicht PulseAudio unterstützen, ist es empfohlen die alsalib um das PulseAudio Plugin zu erweitern. Das Plugin befindet im alsa-plugins Paket: | Für Anwendungen die zwar [http://wiki.archlinux.org/index.php/ALSA ALSA] aber nicht PulseAudio unterstützen, ist es empfohlen die alsalib um das PulseAudio Plugin zu erweitern. Das Plugin befindet im alsa-plugins Paket: | ||
pacman - | pacman -Syu alsa-plugins | ||
== Installation unter GNOME == | == Installation unter GNOME == | ||
Zeile 127: | Zeile 127: | ||
=== Konfiguration von GStreamer für PulseAudio === | === Konfiguration von GStreamer für PulseAudio === | ||
Damit GStreamer PulseAudio benutzt, musst du gstreamer0.10-pulse installieren und /system/gstreamer/0.10/default/audiosink sowie /system/gstreamer/0.10/default/audiosrc für PulseAudio setzen, entweder mit dem gconf-editor oder CLI): | Damit GStreamer PulseAudio benutzt, musst du gstreamer0.10-pulse installieren und /system/gstreamer/0.10/default/audiosink sowie /system/gstreamer/0.10/default/audiosrc für PulseAudio setzen, entweder mit dem gconf-editor oder CLI): | ||
pacman - | pacman -Syu gstreamer0.10-pulse | ||
gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosink pulsesink | gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosink pulsesink | ||
gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosrc pulsesrc | gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosrc pulsesrc | ||
Zeile 144: | Zeile 144: | ||
=== Konfiguration von libao für PulseAudio === | === Konfiguration von libao für PulseAudio === | ||
pacman - | pacman -Syu libao-pulse | ||
Füge in /etc/libao.conf ein: | Füge in /etc/libao.conf ein: |
Version vom 5. September 2010, 09:30 Uhr
Dieser Artikel oder Artikelabschnitt ist noch nicht vollständig!
Hier werde ich den Englischen Text übersetzen und teilweise mit meinen eigenen Erfahrungen anreichern. Allerdings habe ich keine Ahnung, ob das, was ich getan habe, die Sicherheit beeinträchtigt, oder in der Art auch so gemacht werden soll. Als Quellen wurden das ubuntuusers-wiki und das englische arch-wiki verwendet.
Anmerkungen von mir sind in [eckigen Klammern].
Einleitung
PulseAudio (vormals PolypAudio) ist ein Soundserver für POSIX und Win32 Systeme. Mit ihm können mehrere Programme gleichzeitig Sound auf einem Computer ausgeben, zudem hat er viele weitere Features. PulseAudio ist ein "drop-in"-Ersatz (ein direkter Ersatz) für den Enlightened Sound Daemon (esd oder esound). Programme, die esd verwenden, können problemlos auch PulseAudio verwenden.
Dieser Artikel beschreibt hauptsächlich die grundlegenden Features von Pulseaudio.
Installation
Alle Pakete sind im community Repository vorhanden, du musst dieses also aktiviert haben. Um PulseAudio zu installieren:
pacman -Syu pulseaudio
Zusätzlich kannst du einige GTK Oberflächen für Pulseaudio installieren (empfohlen):
pacman -Syu padevchooser paman paprefs pavucontrol
Für Anwendungen die zwar ALSA aber nicht PulseAudio unterstützen, ist es empfohlen die alsalib um das PulseAudio Plugin zu erweitern. Das Plugin befindet im alsa-plugins Paket:
pacman -Syu alsa-plugins
Installation unter GNOME
Alle neueren GNOME Versionen verwenden PulseAudio als Standard, es ist nicht nötig die nachfolgenden Schritte zu verwenden. Die Anleitung ist nur noch für alte Versionen relevant. GNOME Versionen die älter sind als 2.18 unterstützen ESD und starten dies bei einem Sitzungsbeginn. Da man PulseAudio als Ersatz von ESD verwenden kann, gibt es eine Möglichkeit GNOME auszutricksen und anstatt von ESD PulseAudio beim Sitzungsbeinn zu laden. Um das zu erreichen musst du das esdcompat Skript einsetzten welches standardmäßig bei PulseAudio dabei ist.
Erstelle einen Systemlink von /usr/bin/esd der auf das Skript verweist:
ln -sf /usr/bin/esdcompat /usr/bin/esd
Das war es schon. Nun sollte GNOME bei jeder Sitzung PulseAudio starten und verwenden. PulseAudio verwendet standardmäßig jedes Mal einen anderen 'Anschluss' (/tmp/.esd-xxxx) im Gegensatz zu ESD um zu verhindern, dass mehrere Benutzer den gleichen Anschluss verwenden. Um zu verhindern das es nun Probleme gibt da sehr viele GNOME Anwendungen den Standardanschluss ansprechen wollen solltest du die Datei /etc/pulse/system.pa editieren. Such nach der Linie "load-module module-esound-protocol-unix" und editiere diese wie folgt:
load-module module-esound-protocol-unix socket=/tmp/.esd/socket
Da funktioniert nur solange du der einzigste Benutzer an diesem System bist. Sobald ein zweiter hinzukommt wird es wohl zu Problemen kommen.
Das System für PulseAudio konfigurieren
Normalerweise startet PulseAudio erst, sobald ein Benutzer es benötigt und nicht als systemweiter Dämon da dies einfacher, effizienter und sicherer ist. Falls du es doch als systemweiter Dämon brauchst, um z. B. mehrere Benutzer gleichzeitig laufen lassen zu können editiere die /etc/rc.conf wie folgt:
DAEMONS=(syslog-ng ipw3945d network netfs crond fam hal avahi-daemon pulseaudio)
Um den PulseAudio Device Chooser (padevchooser) zu verwenden, musst du eventuell auch den 'avahi-daemon' zu der Liste hinzufügen. Danach solltest du die Benutzer zu der Pulse Gruppe hinzufügen:
gpasswd -a benutzer pulse-access
Es ist eine gute Idee dich zu der 'pulse-rt' hinzuzufügen was nicht automatisch gemacht wird. Dies kann zu Performanzverbesserungen führen:
gpasswd -a <user> pulse-rt
Gehört ins Forum und nicht ins Wiki
Hier hatte ich dann auch schon ein nächstes Problem. PulseAudio legt bei mir den .pulse-cookie in /var/run/pulse mit nur User Leserechten für den User pulse an, sonst sind keinerlei Rechte gesetzt. .pulse-cookie gehört pulse:pulse ich verstehe nicht ganz, was das mit pulse-access soll? Später wird ja der Cookie übertragen und dann bekommt pulse-access als Gruppe Leserechte drauf. Warum so umständlich? Gibt es da einen Grund?]
Jetzt kommt das, was ich gemacht habe:
Da PulseAudio als system-wide Daemon konfiguriert ist und als User pulse gestartet wird und der pulse-cookie NUR mit User-Leserechten angelegt wird, muss man darauf noch Zugriff bekommen. Das Kopieren oder Symlinken des Cookies hat bei mir nicht so recht funktioniert, vielleicht habe ich auch nur etwas falsch gemacht...
In die Datei /etc/rc.d/pulseaudio habe ich vor die Zeile add_daemon pulseaudio geschrieben:
chmod a+r /var/run/pulse/.pulse-cookie chmod a+r /var/run/pulse/.esd_auth
Jetzt darf jeder den Cookie von Pulseaudio lesen. Was mit esd_auth ist, weiß ich nicht, aber einige Programme wollen auch den lesen und starten sonst nicht richtig. Achtung: Bei der Installation einer neueren Version von PulseAudio wird auch diese Datei neu angelegt, diese Änderungen sind dann weg und müssen neu gesetzt werden.
Damit die Programme auch wissen, wo der pulse cookie ist, habe ich in /etc/pulse/client.conf eingetragen:
default-server = <meine IP> cookie-file = /var/run/pulse/.pulse-cookie
Konfiguration des Alsa Plugins
Es ist empfohlen ALSA und PulseAudio anzupassen da die meisten Anwendungen ALSA verwenden. Dies wird wie oben beschrieben durch das PulseAudio plugin möglich. Damit ALSA PulseAudio verwendet muss man die /etc/asound.conf (empfohlen) oder die ~/.asoundrc editieren (Eventuell müssen diese erst erstellt werden):
pcm.pulse { type pulse } ctl.pulse { type pulse }
Falls du PulseAudio als Standardgerät verwenden möchtest solltest du entweder die verwendete Hardware in /etc/pulse/system.pa spezifizieren:
load-module module-alsa-sink device=hw:0 load-module module-alsa-source device=hw:0
oder du verwendest HAL zur automatischen Erkennung:
load-module module-hal-detect
Die Zeile ist normalerweise schon in /etc/pulse/system.pa vorhanden. Versichere dich, dass sie nicht auskommentiert ist. Wenn du PulseAudio nicht als Standard für ALSA gesetzt hast, musst du in jedem Programm als Ausgabegerät 'pulse' einstellen, damit PulseAudio verwendet wird.
Mehr als zwei Lautsprecher ansteuern
Um zum Beispiel bei einem 5.1 Soundsystem nicht nur auf den beiden Front Lautsprechern etwas zu hören, wenn man nur Stereo ausgibt, passt man in der Datei /etc/pulse/daemon.conf die Anzahl der Lautsprecher an:
default-sample-channels = 6
Achtung, hier wird nicht jede Anzahl angenommen, bei 5 zum Beispiel startet Pulseaudio nicht.
Konfiguration SDL für PulseAudio
Seit Version 1.2.12 unterstützt SDL nativen PulseAudio Support. Füge diese Zeile in deine .profile oder .bashrc ein:
export SDL_AUDIODRIVER="pulse"
Andere Umgebungsvariablen:
PASERVER ist der Computer, auf dem der PulseAudio Server läuft, PADEVICE ist das Gerät auf dem Server.
[Aus dem englischen Wiki: Der "pulse" Treiber kann bisher noch nicht deine pulseaudio Konfiguration auslesen, wie es aussieht. Keine Ahnung, ob das noch aktuell ist?]
Anmerkung: Bei mir hat SDL noch nie richtig funktioniert, der Sound hat immer furchtbar gestottert, auch ohne Pulseaudio. Ich habe gelesen, dass das an der HDA Intel Soundkarte liegt. Jedenfalls funktioniert der Ton gut, wenn man in dem SDL Programm den Buffer vergrößern kann.
Bei dem Spiel prey zum Beispiel musste ich in der Datei ~/.prey/base/preyconfig.cfg den Wert so anpassen:
seta s_sdlSamples "2048"
(Von vormals 512)
Wenn export SDL_AUDIODRIVER="pulse" nicht funktioniert oder du eine alte SDL Version benutzt, kannst du die esd Ausgabe benutzen, die auch von PulseAudio übernommen wird:
export SDL_AUDIODRIVER="esd"
Aus dem englischen Wiki: Du kannst ABS benutzen, um SDL mit PulseAudio support zu kompilieren, bis die Qualität des Treibers upstream gefixt ist. Bitte benutze den Patch hier: SDL Pulseaudio Patch [??? Ist das noch aktuell?]
Konfiguration von GStreamer für PulseAudio
Damit GStreamer PulseAudio benutzt, musst du gstreamer0.10-pulse installieren und /system/gstreamer/0.10/default/audiosink sowie /system/gstreamer/0.10/default/audiosrc für PulseAudio setzen, entweder mit dem gconf-editor oder CLI):
pacman -Syu gstreamer0.10-pulse gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosink pulsesink gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosrc pulsesrc
Alternativ kanst du gstreamer-properties benutzen, um die gconf Einträge zu setzen;
gstreamer-properties
Konfiguration von OpenAL für PulseAudio
Spiele, die OpenAL benutzen, können direkt PulseAudio verwenden. Schreibe dazu in die Datei ~/.openalrc:
(define devices '(esd))
oder alternativ
(define devices '(alsa)) (define alsa-device "pulse")
Konfiguration von libao für PulseAudio
pacman -Syu libao-pulse
Füge in /etc/libao.conf ein:
default_driver=pulse
Mehrere PulseAudio ALSA Geräte
PulseAudio kann mehrere verschiedene Soundkarten oder mehrere virtuelle PCMs einer Soundkarte (zum Beispiel, getrennte Front und Surround Ausgabekanäle) verwenden. Dazu muss man PulseAudio für mehrere ALSA sinks konfigurieren. In /etc/pulse/default.pa:
load-module module-alsa-sink device=front load-module module-alsa-sink device=rear
Wenn der Client verschiedene Pulse/ALSA Ausgabegeräte haben soll, bearbeitet man die /etc/asound.conf oder ~/.asoundrc:
pcm.pulsefront { type pulse device front } pcm.pulserear { type pulse device rear }
Und richtet die entsprechenden ctl Elemente ein:
ctl.pulsefront { type pulse device front } ctl.pulserear { type pulse device rear }
Den OSS Wrapper für PulseAudio verwenden
Wenn man ein Programm benutzen willt, das OSS benutzt, kann man es mit padsp mit Pulseaudio starten.
padsp OSSprogram
Beispiele:
padsp aumix padsp sox foo.wav -t ossdsp /dev/dsp
Bei mir arbeitet wine mit der alsa Ausgabe nicht besonders gut mit PulseAudio zusammen, mit OSS und padsp habe ich dagegen keine Probleme. So stellt man ein, dass wine die OSS Ausgabe verwendet: Zuerst winecfg starten
padsp winecfg
Dann auf die Audio Registerkarte wechseln, den Haken bei Alsa wegmachen und bei OSS setzen.
Jetzt müssen alle wine Programme, statt mit "wine" mit "padsp wine" gestartet werden. Evtl kann man ein Script schreiben, das diese Aufgabe übernimmt.
Momentan funktioniert padsp allerdings nicht gut. Sporadisch friert Pulseaudio ein. Läuft zwar noch, aber nimmt keine Befehle oder Verbindungen mehr an.
PulseAudio übers Netzwerk
Eine der großen Stärken von PulseAudio ist die Möglichkeit, Audio über TCP beliebig zu streamen. Dazu braucht man das Modul module-native-protocol-tcp. Zusätzlich muss der pulse-cookie auf die Clients kopiert werden. Um das TCP Modul zu aktivieren, füge Folgendes in /etc/pulse/default.pa ein (oder entferne das Kommentarzeichen):
load-module module-native-protocol-tcp
Wenn PulseAudio als systemweiten Daemon läuft, was für Netzwerksound Sinn macht, befindet sich der Cookie in /var/run/pulse/.pulse-cookie. Dieser Cookie muss an den Client gesendet werden und irgendwo platziert werden, wo die pulse-access Gruppe Leserechte hat (und mit Berechtigungen, dass nur sie ihn lesen können).
[Hä?]
Um den Cookie per SSH von dem Server, auf dem der Sound ausgegeben werden soll, auf die Clients nach /etc/pulse-cookie zu kopieren (auf den Clients muss ein SSH Server laufen und man muss root-Rechte haben):
scp /var/run/pulse/.pulse-cookie client:/etc/pulse-cookie
Auf den Clients müssen dann die Rechte richtig gesetzt werden. Als root:
chown pulse:pulse-access /etc/pulse-cookie chmod 640 /etc/pulse-cookie
Immer noch auf dem Client: Der Pulse Client muss wissen, wo er nach dem Cookie suchen muss. In /etc/pulse/client.conf wird deshalb eingetragen:
### Cookie file cookie-file = /etc/pulse-cookie
Dann muss der Client konfiguert werden, um auf den entsprechenden Server zuzugreifen. Wieder in der /etc/pulse/client.conf:
## The default server to connect to default-server = <die IP Adresse des Servers>
Fertig.
Problembehebung
module-x11-publish
Wenn Folgendes in den PulseAudio Logs auftaucht:
x11wrap.c: XOpenDisplay() failed module.c: Failed to load module "module-x11-publish" (argument: ""): initialization failed. main.c: Module load failed. main.c: failed to initialize daemon.
Dann muss man das module-x11-publish in /etc/pulse/default.pa deaktivieren (auskommentieren):
#load-module module-x11-publish
"daemon startup failed"
Wenn PulseAudio nicht als Daemon startet und Folgendes ausgibt:
E: main.c: daemon startup failed.
Muss man vielleicht die Zeile in /etc/pulse/default.pa deaktivieren, in der .fail steht.
Kommentiere diese Zeile einfach aus, indem du ein # davor schreibst.
[Was soll das denn sein?]
module-hal-detect
Wenn eine Fehlermeldung wegen HAL, module-hal oder Ähnliches ausgegeben wird, wirst du module-hal-detect aus /etc/pulse/default.pa entfernen müssen und explizit die ALSA Hardware angeben, zum Beispiel:
load-module module-alsa-sink device=hw:0 load-module module-alsa-source device=hw:0
Links
http://www.pulseaudio.org/wiki/PerfectSetup
http://www.alsa-project.org/main/index.php/Asoundrc
http://mpd.wikia.com/wiki/PulseAudio#Version_0.12.0_and_later