Musik Player Daemon (MPD) und Archlinux

Was ist der MPD und warum sollte ich ihn nutzen?

Der MPD ist ein Daemon (Hintergrunddienst) in Linux der dafür gedacht ist Musik abzuspielen/streamen. Einerseits kann man diesen Dienst statt eines Musikplayers auf dem lokalen Rechner nutzen, aber viel interessanter ist die Idee den Dienst als ferngesteuerter Musikplayer einzusetzen. Er läuft auf nahezu jeder (auch antiken) Hardware, man braucht lediglich einen alten PC/Laptop oder inzwischen läuft er sicherlich auf auf modernen NAS Systemen. Die einzige Anforderung ist eine einigermaßen taugliche Soundkarte und optional einen SPDIF Ausgang (meiner Ansicht nach immer noch die beste Variante Ton zu übertragen).

Ich persönlich nutze einen kleinen Mini PC auf Intel NUC Basis der mir als Media Center dient. Er braucht wenig Strom und läuft daher fast durchgängig. Er ist direkt mit meinem AV-Receiver und dadurch mit dem Soundsystem verbunden. Auf diesem Rechner läuft der MPD im Hintergrund und kann dann mit jedem beliebigen Gerät – sei es ein direkt von dem Media Center, von einem anderen Rechner im Netzwerk oder auch von einem Handy – ferngesteuert werden. Das ist extrem praktisch, wenn z.B. Besuch da ist, kann jeder mit einem passenden Handy-Client (ich bevorzuge bei Android MPDroid) die Musikbibliothek durchsuchen und gleichzeitig eine Playlist „zusammenklicken“.

Problem

Leider ergeben sich auf Archlinux seit dem Umstieg auf systemd einige Probleme wenn PulseAudio genutzt werden soll. Das Problem liegt hierbei an der Verbindung von MPD zum PulseAudio Server. MPD läuft standardmäßig als MPD Nutzer und kann nicht auf die PulseAudio Session des aktuellen Nutzers zugreifen. Dieses Problem kann auf verschiedene Arten gelöst werden.

Das ganze äußert sich dadurch, dass MPD in die Log Datei etwas ähnliches schreibt wie:

Cannot connect to PulseAudio: access denied

Lösung

Starte MPD und PulseAudio mit dem selben User

Wird kein Multi-User System benötigt, ist dies wohl die einfachste und sauberste Lösung. Hierzu bearbeiten wir zuerst die MPD config /etc/mpd.conf und ändern den User von mpd auf den normalen System-User mit dem auch PulseAudio läuft (euer normaler Username).

 user "username"

Als nächstes muss die systemd service Datei bearbeitet werden. Diese Datei wird bei einem System Update wieder überschrieben! Es ist eine einfache und funktionierende Lösung, könnte aber sicherlich anders besser gelöst werden. Die service Datei liegt unter /usr/lib/systemd/system/mpd.service folgendes muss ergänzt werden

[Service]
User=username
PAMName=system-local-login

Um diese Änderung zu übernehmen muss folgender Befehl ausgeführt werden:

systemctl daemon-reload

Nun kann MPD neu gestartet werden

systemctl restart mpd

Jetzt sollte alles einwandfrei funktionieren.

Alternative

Eine Alternative von der ich gelesen habe ist die Nutzung des TCP Plugins von Pulseaudio, siehe Archlinux Forum (Post #10).

 

Videotearing in Linux (Manjaro/Arch) und XBMC

What the heck is Videotearing?

Tearing äußert sich auf dem Monitor dadurch, dass horizontale Streifen durch das komplette Bild wahrnehmbar sind. Das ist vorallem bei Videos und Filmen ärgerlich, da das Bild anfängt zu stocken und ziemlich „zerrissen“ ausschaut. Extrem fällt das bei schnellen Kameraschwenks auf. Es vermittelt den Eindruck als würde man mehrere Bilder gleichzeitig sehen, die alle ein bisschen verschoben sind (wobei genau das auch der Grund ist, siehe unten). Es gibt mehr als genug Beispiele wirft man einfach die Google Bildersuche an. Kurzum, ein Spaßkiller möchte man einen entspannten Filmabend verbringen.

Woher kommt’s?

Das Problem liegt hierbei an der Grafikkarte, diese berechnet und schickt die Bilder schneller an den Monitor als der sie darstellen kann. Das fällt extrem auf bei den genannten schnellen Kameraschwenks. Bevor ein Bild komplett auf dem Monitor angezeigt wird, schick die Grafikkarte schon das nächste Bild, welches der Monitor dann sofort anfängt darzustellen. Dadurch wird das typische Muster erzeugt, dass auf dem Monitor untereinander gleichzeitig verschiedene Bilder dargestellt werden, die deutlich mit einem Streifen getrennt sind. Je nach Film kann dies zu extremen Rucklern oder Verzerrungen führen. Gerade bei schnellen Actionfilmen wird dadurch der Film „unschaubar“.

Was tun?

Abhilfe schafft hier die sogenannte Vertical Synchronisation, kurz VSync. Ist sie eingeschaltet wartet die Grafikkarte bis der Monitor fertig ist ein Bild darzustellen und schickt erst dann das nächste Bild an den Monitor. Diese Option kann man so gut wie bei jeder Grafikkarte in den Einstellungen aktivieren.

Wo liegt dann das Problem?

Was tun, wenn VSync aktiviert ist (in XBMC und in XFCE4) das Problem aber trotzdem noch auftritt? Ja das ist die große Frage. Ich habe sämtliche Optionen und Lösungsansätze getestet die ich im Netz gefunden. Dort habe ich die Lösung dann auch gefunden. Es stellte sich heraus, dass die aktuelle Version von XOrg das Problem war. Ab 1.15.0 ist die sogenannte „backing store function“ standardmäßig aktiviert, welche zu genau diesem Problem führt.

Lösung

Ich habe momentan Manjaro Linux (basiert auf Archlinux) mit XFCE auf meinem mini Media PC mit einer integrierten Intel Grafik am laufen.

Also hab ich zuerst versucht VSync zu aktivieren. In Manjaro muss hierzu diese Datei bearbeitet /etc/X11/mhwd.d/intel.conf (bei purem Arch wäre es: /etc/X11/xorg.conf.d/20-intel.conf) und um folgendes ergänzt/abgeändert werden:

Section "Device"
   Identifier "Intel Graphics"
   Option "SwapbuffersWait" "true"
   Option "AccelMethod"  "sna"
   Option "TearFree" "true"
EndSection

Hiermit wird VSync (TearFree) aktiviert.

Siehe Update 1.

Des weiteren habe ich über Probleme des Compositing gelesen und entschlossen dieses in den XFCE optionen komplett zu deaktivieren. Da ich den PC sowieso nur für MPD, XBMC und ähnliches benutzen möchte, brauche ich hier sowieso keine „fancy“ Effekte 😉

Der letzte Schritt in Manjaro/Arch war dann die backingstore Funktion zu deaktivieren. Das ganze ist in Arch super einfach, es muss lediglich das AUR Repository eingerichtet sein – was in Manjaro schon ab Installation vorhanden ist. Dann einfach ein kurzes:

yaourt -S sdl-nobackingstore

Und nach einem Reboot läuft alles wie man sich das wünscht. Besonders schön ist es in XBMC noch die Funktion „Adjust display refresh rate to match video“ zu aktivieren (vorausgesetzt der Fernseher unterstützt alle Videomodi wie z.B. 24p). Dadurch erhält man ein noch flüssigeres und angenehmeres Filme-Erlebnis 😉

Auch für Ubuntu Jünger gibt es hier Abhilfe (siehe Eintrag #12).

Update 1

Nach mehreren Stunden Videos ist mir aufgefallen, dass das Bild nach einer gewissen Zeit anfängt zu stottern und ab und zu kleine Lags auftauchen. Das äußert sich so, dass das Bild ganz kurz stehen bleibt und dann in doppelter Geschwindigkeit läuft bis es wieder synchron ist, danach läuft es ganz normal weiter. Komisch ist, dass es nicht durchgängig auftaucht. Nachdem ich das neuste Systemupgrade von Manjaro installiert hatte, XBMC auf 13.2 RC1 upgegraded und TearFree wieder deaktiviert hatte (nobackinstore + XBMC VSync reicht vollkommen aus um das Tearing zu verhindern), funktionierte alles einwandfrei ohne Ruckler. Was genau das Problem ausgelöst hat weiß ich nicht, aber in der Konfiguration funktioniert alles wunderbar.