Linux E X P R E S

Facebook

Tři nejpoužívanější konfigurace Music Player Daemona (MDP)

akarei_player100.png

MPD – Music Player Daemon … výborná věc pro pouštění hudby. Jedná se o server-client aplikaci, pomocí které můžete vzdáleně ovládat (spouštět/zastavovat) hudbu. Ta může být „posílána“ do připojených reproboxů (sluchátek) nebo do dalšího PC. Tři asi nejpoužívanější konfigurace jsou znázorněny na následujících obrázcích.


MPD samozřejmě může přehrávat i internetová rádia. Potřebujete jen vědět adresu streamu a pak jej v MPD klientovi spustit. V GMPC se tak děje přes Nástroje => Přidat URL. Rádia si pak můžete přidat do playlistu.
Adresy streamu některých českých rádií najdete zde, v seznamu si pak najdete rádio a ve sloupci „Listen Live“ si zvolíte datový tok a typ streamu – následně pak stačí zkopírovat adresu odkazu a vložit ji do MPD.

MPD je serverová aplikace, pro ovládání potřebujete tzv. klienta – tj. aplikaci na počítači, ze kterého chcete k mpd přistupovat, resp. ovládat ji. Klientů mpd je vícero, pro Linux používám GMPC, na telefonu s Androidem pak MPD klienta M.A.L.P.

mpd_var-1.png

mpd_var-2.png

mpd_var-3.png

Obecně o konfiguraci MPD – není to nic složitého, záludnost spočívá ve faktu, že na Ubuntu se Pulseaudio spouští v userspace uživatele a MPD při instalaci vytvoří uživatele „mpd“.

Bývaly doby, kdy k HW (fyzické) zvukové kartě mohla přistupovat pouze jedna audio aplikace, která ji „obsadila“ a tím zamezila přístupu jiným aplikacím, přičemž neexistoval zvukový server Pulseaudio. Nemohli jste tedy spouštět společně např. Totem a VLC. Požadavek na společné puštění dvou a více audio programů se zdá být nesmyslný, ale jen do doby, než např. jako DJ budete chtít pustit další skladbu před ukončením právě hrané. Mj. z tohoto důvodu je zde Pulseaudio, což je zvukový server, který jako jediná aplikace přistupuje k fyzické zvukové kartě, přičemž ostatní zájemci o přehrání zvuku pak přistupují jen k zvukovému serveru Pulseaudio. Stále totiž platí, že k fyzické zvukové kartě může přistupovat pouze jedna aplikace.
Z výše uvedeného tedy vyplývá, že lze spustit současně dvě audio aplikace přes Pulseaudio a budou se přehrávat současně výstupy z každé spuštěné aplikace, na druhou stranu uslyšíte jen jeden zvuk pokud jedna aplikace bude používat ALSA a druhá Pulseaudio. Hrát bude ta, která byla spuštěna jako první – protože jako první „obsadí“ zvukovou kartu.
Ovšem stejná situace nastane, pokud se spustí dvě instance Pulseaudio – první spuštěná „obsadí“ zvukovou kartu a instance puštěná druhá v pořadí je tak bez přístupu k fyzické zvukové kartě. A jsme u jádra pudla – MPD při instalaci vytvoří uživatele „mpd“ a spuštěním MPD se vytvoří instance Pulseaudio v userspace uživatele „mpd“. A dál to závisí na aktuální situaci – pokud právě přihlášený uživatel (např. Pepa) nemá spuštěnou žádnou audio aplikaci, pak MPD bude hrát. Pokud ovšem náš Pepa má spuštěnou nějakou audio aplikaci (a stačí www browser se stránkou vyžadující přístup k Pulseaudio), pak MPD hrát samozřejmě nebude, protože instance Pulseaudia uživatele“mpd“ nemá volný přístup k zvukové kartě

Principiální řešení jsou tři :

  1. nakonfigurovat Pulseaudio jako systémového démona tak, aby se spouštěla jen jedna instance společná pro celý systém a nikoliv instance pusleaudio v userspace uživatele
  2. nakonfigurovat MPD tak, aby se nespouštěl pod uživatelem „mpd“, ale pod přihlášeným uživatelem – v našem případě uživatelem Pepa
  3. Výstup z MPD nasměrovat přes TCP do instance Pulseaudio přihlášeného uživatele.

AD 1. – tady může nastat potíž s ostatními aplikacemi, protože všichni předpokládají, že přihlášený uživatel má spuštěné Pulseaudio ve svém userspace. Navíc mohou nastat komplikace při aktualizacích systému, neboť je to zásah do základu konfigurace.
AD 2. – opět celkem komplikované i když postup je dobře popsán na stránkách projektu MPD. Navíc vzniká problém, pokud se na PC ~ notebooku přihlašuje víc uživatelů (manžel-manželka, přítel-přítelkyně, potomek…).
AD 3. – nejjednodušší varianta, která zachovává všechna systémová nastavení a zvuk směřuje přes TCP modul do instance Pulseaudio přihlášeného uživatele – tato instance ale musí mít povolen přístup ze sítě. V případě vzdáleného počítače směřujeme na IP adresu v síti, v případě lokálního řešení (varianta č. 1) na 127.0.0.1 . Tohle se pak velice komfortně nastavuje přes paprefs (= PulseAudioPREFerenceS)

Samotná konfigurace MPD je jednoduchá – vše se nastavuje v souboru mpd.conf, který po instalaci najdete v adresáři /etc. V konfiguračním souboru jsou jednotlivé direktivy dobře popsány, zde uvedu nastavení společných direktiv pro uvedené tři varianty, v popisu konkrétní varianty pak příslušná další nastavení.

# /etc/mpd.conf
music_directory "/var/lib/mpd/music"
playlist_directory "/var/lib/mpd/playlists"
db_file  "/var/lib/mpd/tag_cache"
log_file  "/var/log/mpd/mpd.log"
pid_file  "/run/mpd/pid"
state_file  "/var/lib/mpd/state"
sticker_file  "/var/lib/mpd/sticker.sql"
user  "mpd"
group  "audio"
bind_to_address "0.0.0.0"
# bind_to_address "192.168.0.100"
# bind_to_address "192.168.0.101"
port  "6600"
log_level  "verbose"
follow_outside_symlinks "yes"
follow_inside_symlinks "yes"
zeroconf_enabled "yes"
zeroconf_name  "Music Player

K některým direktivám :
music_directoryplaylist_directory => jedná se o určení, kde má MPD hledat audio soubory a playlisty. Tady malá poznámka : MPD má XDG adresář v /var/lib/mpd , proto tam mj. hledá i audio a playlisty. Nejjednodušší řešení je buď audio soubory nakopírovat zde nebo použít symlinky na skutečné umístění. Používám symbolické odkazy, proto mám povoleny i direktivy follow_outside_symlinksfollow_inside_symlinks.
user => ve výchozím nastavení je nastaven „mpd“ a výše jsem uvádím proč není nutno nastavení měnit.
group => mám nastaveno na „audio“
bind_to_address => direktiva určuje ze které IP adresy je povolen přístup mpd klienta. Pokud je vyplněno 0.0.0.0 , pak je povolen přístup ze všech adres, což je vhodné při problémech … a následně se podívat do logu, ze kterých adresy je vlastně přistupováno. Pro povolení přístupu z vícero IP adres se pak jednoduše uvedou další direktivy bind_to_address s příslušnými IP adresami.

MPD – konfigurace varianty č. 1

mpd_var-1.pngV této konfiguraci máme jeden počítač se zvukovou kartou a připojenými reproduktory. MPD je pak ovládán ze stejného počítače pomocí klienta GMPC. MPD ovšem nastavíme tak, aby výstup posílal přes TCP modul do Pulseaudio instance přihlášeného uživatele, který ovšem musí mít povolen přístup ze sítě (byť se jedná o přístup z IP 127.0.0.1). Konfigurace TCP na 127.0.0.1 je z toho důvodu, že sestavu můžete třeba vzít na párty, kde může v rámci tamní sítě získat jinou IP adresu.

Příslušná část v /etc/mpd.conf

audio_output {
  type            "pulse"
  name            "Pulse_TCP_127.0.0.1"
  mixer_type      "software"
  server          "127.0.0.1" # optional
}

Dále je třeba povolit pomocí paprefs přístup ze sítě pro Pulseaudio :

mpd-pulse-paprefs-1.png

Nyní si nastavíme v GMPC profil pro tuto konfiguraci a zkontrolujeme, zda máme povolen TCP výstup na Pulseaudio.

GMPC_profil.png

GMPC_nastaveni_serveru.png

Toť vše pro danou konfiguraci … 

MPD – konfigurace varianty č. 2

mpd_var-2.pngV této konfiguraci ovládáme MPD z notebooku/pc (např. aplikací GMPC) příp. mobilu/tabletu s Androidem (např. aplikací M.A.L.P.) a pro samotné MPD pak máme jeden počítač se zvukovou kartou a připojenými reproduktory. Pro základní konfiguraci MPD se může jednat o starší slabší PC bez monitoru, podmínkou je pouze přítomnost fyzické zvukové karty, aby bylo kam vlastně připojit repro.

MPD na serveru nastavíme několik výstupů :

  • výstup ALSA – pokud na serveru nebude třeba spouštění vícero audio aplikací
  • Pulse TCP na IP 127.0.0.1 samotného serveru – pro případ, že budeme chtít spouštět více audio aplikací
  • Pulse TCP na IP adresu notebooku (192.168.0.100) – večer tak můžeme vypnout výstup na do reproboxů a pouštět si hudbu jen do sluchátek

Uvedené výstupy pak samozřejmě můžeme aktivovat/deaktivovat z klientské aplikace (MPDC ~ M.A.L.P.). V tomto nastavení ovšem nemá smysl mít aktivovány současně výstupy ALSA a Pulse TCP na 127.0.0.1. Jelikož Ubuntu používá Pulseaudio, tak osobně v nastavení preferuji „Pulse TCP 127.0.0.1“ a výstup „ALSA“ deaktivuji. Výstup ALSA je pak jen jako demonstrativní ukázka.

Nastavení výstupů v /etc/mpd.conf (na serveru 192.168.0.20)

audio_output {
  type "alsa"
  name "ALSA 127.0.0.1"
  device "hw:0,0" # optional
  mixer_type "software" # optional
  mixer_device "default" # optional
  mixer_control "PCM" # optional
  mixer_index "0" # optional
}
audio_output {
  type "pulse"
  name "Pulse TCP 127.0.0.1"
  mixer_type "software" # optional
  server "127.0.0.1" # optional
}
audio_output {
  type "pulse"
  name "Pulse TCP 192.168.0.100"
  mixer_type "software" # optional
  server "192.168.0.100" # optional
}

Nyní na serveru 192.168.0.20 povolíme Pulseaudio přístup ze sítě – pomocí aplikace paprefs (pro výstup „Pulse TCP 127.0.0.1“). Jelikož se jedná o PC ~ server bez monitoru, musíme se přihlásit z terminálu notebooku (192.168.0.100) tak, aby nám server posílal grafický výstup do našeho notebooku.

Klasické ssh přihlášení doplníme následovně :

ssh -c aes256-ctr -XC pepa@192.168.0.20

Po zadání hesla jsme přihlášení pod naším uživatelem „pepa“, přičemž grafický výstup je zasílán do našeho notebooku 192.168.0.100.
Tady malá poznámka – náš uživatel „pepa“ na serveru by měl být ve skupinách : audio, pulse, pulse-access.
Po přihlášení pak vyvoláme nastavení paprefs jednoduchým zadáním do terminálu :

paprefs

Poté co se otevře okno odeslané ze serveru, nastavíme paprefs již známým způsobem :

mpd-pulse-paprefs-1.png

Pokud si budeme chtít nechat posílat hudbu z MPD i na notebook 192.168.0.100, musíme stejným způsobem pomocí paprefs povolit přístup ze sítě pro Pulseaudio i na notebooku.
Nakonec si na notebooku (192.168.0.100) v klientské aplikaci např. GMPC (pro notebook) nebo M.A.L.P. (pro Android) nastavíme profil pro tuto konfiguraci a po připojení můžeme aktivovat/deaktivovat nakonfigurované výstupy MPD – tedy určovat, kam má MPD zvuk posílat, resp. kde co bude hrát.

GMPC_server_192-168-0-20.png

GMPC_profil_192-168-0-20.png

Pro danou variantu konfigurace to je vše ….

MPD – konfigurace varianty č. 3

mpd_var-3.png

V této konfiguraci ovládáme MPD opět z notebooku/pc (např. aplikací GMPC) příp. mobilu/tabletu s Androidem (např. aplikací M.A.L.P.), databázi písniček a samotné MPD pak máme ve virtuálním serveru bez zvukové karty a zvuk posíláme do samostatného PC s připojenými reproduktory.

Pro základní konfiguraci MPD se může opět jednat o starší slabší PC bez monitoru, podmínkou je pouze přítomnost fyzické zvukové karty, aby bylo kam vlastně připojit repro.
Jelikož se jedná o demonstraci konfigurace, tak virtuální server má svoji podsíť a jeho IP adresa se na routeru překládá na veřejnou IP adresu. Tato konfigurace má svůj smysl, když virtuální server hostí Vaši databázi písniček a videoklipů a ještě např. www stránky. Může taky hostit music server Ampache a pak máte svoji sbírku přístupnou k poslechu kdekoliv (o Ampache někdy příště).
Úskalí této konfigurace jsou dvě – jednak virtuální server, který je jako guest na HW serveru bez zvukové karty (např. malá serverová základní deska Intel řady S1200 neobsahující HW zvuk. kartu) a druhák, že subnet s notebookem a spol. bude kvůli přístupu na internet taky překládán na veřejnou IP adres (s čímž má problém MPD).

Konfigurace virtuálního serveru 192.168.10.10 :

Zvuková karta – v uvedené konfiguraci zvuková karta (ani virtuální) není zapotřebí. Stačí nainstalovat jen MPD, který si potřebné balíčky doinstaluje sám. Výstup MPD nasměrujeme pomocí TCP modulu do jiného stroje, takže na virtuálním serveru 192.168.10.10 opravdu nemusí být zvuk. karta, nainstalována ALSA nebo Pulseaudio (libpulse0 si MPD instaluje sám). Toto úskalí je tedy pouze psychologického rázu – jak můžeme přehrávat z něčeho, co neobsahuje zvuk. kartu …
Přístup k MPD – tady pozor, nestačí mít správně nakonfigurovanou síť vč. výchozích bran. Potíž může být v tom, že existuje v síti router, který (z důvodu přístupu do internetu) bude asi překládat subnet 192.168.0.0/24 na veřejnou IP adresu (src-nat 192.168.0.0/24 => to public address). Jako router mám Mikrotik a musel jsem přidat pravidlo, že se subnet 192.168.0.0/24 nepřekládá, pokud je cílová IP adresa v rozsahu subnetu 192.168.10.0/24 (src-address 192.168.0.0/24 dst-address !192.168.10.0/24 => to public address).
Jak na tom jste se můžete přesvědčit následovně – z notebooku 192.168.0.100 se pomocí terminálu přihlásíte k virtuálnímu serveru 192.168.10.10 a zadáte příkaz :

loginctl show-session $XDG_SESSION_ID | grep RemoteHost

a pokud je odpovědí (v tomto případě) :

RemoteHost=192.168.0.100

pak je vše v pořádku. Pokud je ovšem místo IP adresy notebooku uvedena u RemoteHost veřejná IP adresa, na kterou se překládá celá síť 192.168.0.0/24, pak MPD bude hlásit chybu.

Nyní si na virtuálním serveru 192.168.10.10 nakonfigurujeme v /etc/mpd.conf audio výstupy :

# výstup pro server s HW zvuk. kartou 192.169.0.20
audio_output {
  type "pulse"
  name "Pulse TCP 192.168.0.20"
  mixer_type "software" # optional
  server "192.168.0.20" # optional
}
# výstup pro notebook 192.168.0.100
audio_output {
  type "pulse"
  name "Pulse TCP 192.168.0.100"
  mixer_type "software" # optional
  server "192.168.0.100" # optional
}

Konfigurace PC ~ serveru 192.168.0.20 :

PC – server má fyzickou zvukovou kartu, do které jsou připojeny reproduktory, nainstalováno Pulseaudio a Paprefs.
Jelikož k PC ~ serveru nemáme připojen monitor, přihlásíme se z notebooku 192.168.0.100 prostřednictvím terminálu a přesměrujeme si grafický výstup do notebooku

ssh -c aes256-ctr -XC pepa@192.168.0.20

a po zadání hesla a zalogování spustíme paprefs

paprefs

kde nastavíme přístup ze sítě pro Pulseaudio na PC ~ serveru 192.168.0.20

mpd-pulse-paprefs-1.png

Pokud si budeme chtít nechat posílat hudbu z MPD i na notebook 192.168.0.100, musíme stejným způsobem pomocí paprefs povolit přístup ze sítě pro Pulseaudio i na notebooku.
Nakonec si na notebooku (192.168.0.100) v klientské aplikaci např. GMPC (pro notebook) nebo M.A.L.P. (pro Android) nastavíme profil pro tuto konfiguraci a po připojení můžeme aktivovat/deaktivovat nakonfigurované výstupy MPD – tedy určovat, kam má MPD zvuk posílat, resp. kde co bude hrát.

GMPC_server_192-168-10-10.png

GMPC_profil_192-168-10-10.png

Toť vše … tak ať to hraje :-).



Diskuze (3) Nahoru